2015-12-08 74 views
0

我有一個primefaces數據網格,我試圖使用primefaces更新。我可以看到onMessage方法被調用,但是,只有在onMessage方法中設置了斷點時,組件本身才會更新。這是處理程序:在原始瀏覽器中未收到推送事件

@PushEndpoint("/prices") 
public class PricesResource { 

    private static final Logger logger = Logger.getLogger("PricesResource"); 

    @OnMessage(encoders = {JSONEncoder.class}) 
    public OrderBook onMessage(OrderBook orderBook) throws InterruptedException { 
     logger.log(Level.INFO, "PricesResource.onMessage price {0}", orderBook.getPrice()); 
     return orderBook; 
    } 
} 

這是代碼我呼籲更新我的index.xhtml組件:​​

<p:socket onMessage="handleMessage" channel="/prices" /> 

    <script type="text/javascript"> 
     function handleMessage(data) 
     { 
      updateWidgets(); 
     } 
    </script> 

    <p:remoteCommand name="updateWidgets" 
      actionListener="#{parliamentManager.findLatestPrices}" 
      update="resultDisplay"/> 

和組件只是在的index.xhtml此刻底部:

<h:panelGroup id="resultDisplay">       
<p:dataGrid id="prices" var="orderBooks" value="#{parliamentManager.latestPricesResults}" columns="3" rows="12"> 
<p:column> 
    <p:panel header="#{orderBooks.bidOrderId.member.memberId}"> 
     <h:panelGrid columns="1"> 
      <h:outputText value="#{orderBooks.price}" /> 
    </h:panelGrid> 
     </p:panel> 
</p:column> 
</p:dataGrid> 
</h:panelGroup> 

我很難過,爲什麼這是,任何建議,將不勝感激。

+0

我假定您使用瀏覽器開發人員工具「調試」網絡流量?檢查'更新'屬性值的正確性等? – Kukeltje

+0

@Kukeltje我會給它一個去,但我不知道我在找什麼。 – zobbo

+0

是否執行了遠程命令,它的響應看起來是什麼樣的(例如更新但是具有相同的數據),響應中的任何錯誤是稱爲etc的方法...... – Kukeltje

回答

0

我發現解決方案是將autoRun屬性添加到我的remoteCommand標記中,這會在表單提交併重新加載頁面後更新組件。

<p:remoteCommand name="updateWidgets" 
    actionListener="#{parliamentManager.findLatestPrices}" 
    update="resultDisplay" 
    autoRun="true"/> 
+0

奇怪的解決方案。那麼你必須在某個地方有一個不同的問題,或者你沒有發佈的相關代碼! – Kukeltje