PrimeFaces Socket是如何工作的



我的代码:

<p:socket channel="/allposts/#{uview.user.uid}">
 <p:ajax event="message" async="true" listener="#{uview.go}" update="xout"/>
</p:socket>

# 1。Uview引用了一个视图作用域bean。除了侦听器方法之外,包括update在内的所有操作都有效。永远不会调用侦听器方法。即使我将listener的值更改为不存在的方法,它也不会报告任何错误。知道为什么不行吗?

我在下面的代码片段[涉及动态id]中注意到的另一件事:
<p:socket channel="/allposts/#{uview.user.uid}">
<p:ajax event="message" async="true" listener="#{uview.go}" update="#{uview.user.uid}"/>
</p:socket>

在这里,它报告错误,指出它找不到具有指定id的id[在错误消息中显示id]。即使有这个id的元素,它也找不到。这当然不是命名容器引用的问题。

是否因为在JSF渲染页面[dynamic part]之前就已经初始化了Primeface套接字?这就是为什么它找不到动态id??

# 2。正如我从Pimeface Demo页面中了解到的,在JSF中实现聊天应用程序需要更新具有动态id的元素。我在实现primeface socket时有错吗?还有其他更优雅的实现方法吗?

uview引用了一个视图作用域bean。除了侦听器方法之外,包括update在内的所有操作都有效。永远不会调用侦听器方法。即使我将listener的值更改为不存在的方法,它也不会报告任何错误。知道为什么不行吗?

这是一个bug。我找到了下面的解决方法:

<p:socket channel="/channel">
    <p:ajax event="message"
            listener="#{controller.yourListenerMethod}"
            update=":form:table" />
</p:socket>

替换为:

<p:socket onMessage="handleMessage" channel="/channel" />
<script type="text/javascript">
    function handleMessage(data) {
        updateWidgets();
    }
</script>
<p:remoteCommand name="updateWidgets"
                 actionListener="#{controller.yourListenerMethod}"
                 update=":form:table" />

相关内容

  • 没有找到相关文章

最新更新