【问题标题】:PrimeFaces Push: subscription to multiple dynamic channelsPrimeFaces Push:订阅多个动态频道
【发布时间】:2012-10-28 21:32:19
【问题描述】:

我有一个p:dataTable,每行显示金融工具和实时价格,我想使用p:socket 设置广播频道,每行一个频道。目标是当单一仪器的新价格出现时,我可以只更新其单元格以获得更好的性能。

首先我尝试从showcase's chat example 复制聊天示例,并从服务器端订阅动态频道,但是这样客户端无法获取消息所在的频道(p:socket处理多个频道?)。

然后,我尝试在数据表中插入p:socket

<p:dataTable var="instrument"  … >
    <p:socket onMessage="handleMessage(#{instrument.id})" channel="/price" autoConnect="false" 
                                      widgetVar="subscriber_#{instrument.id}" /> 
    …
</p:dataTable>

在服务器端:

for (Instrument instrument : instruments) {
    RequestContext.getCurrentInstance().execute("subscriber_" +instrument.getId() + ".connect('/" + instrument.getId() + "')");
}

但这会在客户端引发错误:

ReferenceError: subscriber_123 is not defined

还有其他方法吗?我在客户端或服务器端管理订阅都没有问题,唯一重要的是我不想将所有价格推给所有客户端。

使用 PrimeFaces 3.4.1

【问题讨论】:

    标签: jsf primefaces push


    【解决方案1】:

    如果您仍然无法使其正常工作,可以通过以下方式动态订阅/连接到频道。

    RequestContext.getCurrentInstance().execute("subscriber.connect('/" + instrument.getId() + "')");

    您的数据表中不需要有多个&lt;p:socket&gt;。单个套接字足以处理您的所有 pub/sub。

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2013-04-22
      相关资源
      最近更新 更多