原始浏览器未收到推送事件
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"/>
我有一个 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"/>