原始浏览器未收到推送事件

Push event not received in originating browser

我有一个 primefaces 数据网格,我正在尝试使用 primefaces Push 进行更新。我可以看到调用了 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>

我很困惑为什么会这样,如果有任何建议,我们将不胜感激。

我发现解决方案是将 autoRun 属性添加到我的 remoteCommand 标记,这会在提交表单和重新加载页面后更新组件。

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