PrimeFaces Push:订阅多个动态频道

时间:2012-10-28 21:32:20

标签: jsf primefaces push

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

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

然后,我尝试在dataTable中插入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() + "')");
}

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

使用PrimeFaces 3.4.1

1 个答案:

答案 0 :(得分:0)

如果您仍然无法使其正常工作,请按以下步骤动态订阅/连接频道。

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

您的数据表中不需要多个<p:socket>。单个套接字足以处理所有发布/订阅。