2012-10-28 87 views
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

回答

0

如果你仍然不能使它發揮作用,這裏是你如何可以動態訂閱/連接的通道。

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

你不需要有多個<p:socket>在你的數據表。一個套接字足以處理所有的發佈/訂閱。