3
我有一個p:dataTable
顯示每行的金融工具和實時價格,我想要設置使用p:socket
的廣播頻道,每行一個頻道。目標是當新的價格到達單個儀器時,我只能更新其單元以獲得更好的性能。PrimeFaces推送:訂閱多個動態頻道
首先,我嘗試從showcase's chat example複製聊天示例,並從服務器端訂閱動態通道,但這樣客戶端無法獲取消息所在的哪個通道(並且p:socket
是否處理多個通道?)。
於是,我試着用DataTable中插入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