Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 原始浏览器中未接收到推送事件_Jsf_Jsf 2_Primefaces_Primefaces Push - Fatal编程技术网

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

Jsf 原始浏览器中未接收到推送事件,jsf,jsf-2,primefaces,primefaces-push,Jsf,Jsf 2,Primefaces,Primefaces Push,我有一个primefaces数据网格,我正在尝试使用primefaces Push更新它。我可以看到onMessage方法被调用,但是组件本身只有在我在onMessage方法中设置了断点时才会更新。这是处理程序: @PushEndpoint("/prices") public class PricesResource { private static final Logger logger = Logger.getLogger("PricesResource"); @OnMe

我有一个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"/>

函数句柄消息(数据)
{
updateWidgets();
} 
此时组件正好位于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>


我很难理解为什么会这样,如果有任何建议,我将不胜感激。

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

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


我假设您使用浏览器开发工具“调试”了所有网络流量?检查“更新”属性等值的正确性?@Kukeltje我会尝试一下,但我不确定我在寻找什么。是否执行了远程命令,其响应是什么样的(例如,已更新但使用相同的数据),响应中的任何错误,是否调用了方法等。@Kukeltje执行了远程命令,是的。我不确定它是否更新了相同的数据。我注意到的一件有趣的事情是,如果我打开两个浏览器并更新我的列表(即更改最新价格结果),它将在另一个浏览器窗口中持续更新组件,但不会更新它自己的组件。我不确定这表明了什么。我已经在javascript处理程序中添加了日志记录,我可以看到处理程序正在启动,并且在接收浏览器中具有正确的数据(尽管我不使用返回给处理程序的对象)。我还可以看到提交表单的浏览器中没有触发处理程序(假设我们使用两个浏览器),所以这仍然有点神秘。奇怪的解决方案。那么你肯定在某个地方遇到了不同的问题,或者你没有发布的相关代码!