PrimeFaces Socket如何工作?

时间:2013-03-13 16:35:58

标签: jsf web-applications jsf-2 primefaces

我的代码:

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

#1。 uview指的是视图范围的bean。一切,包括更新,除了监听方法以外都有效。永远不会调用监听器方法。即使我将侦听器的值更改为不存在的方法,也不会报告任何错误。知道为什么它不起作用吗?

我在下面的代码片段中注意到的另一件事[涉及动态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的元素,也无法找到它。它当然不是命名容器引用问题。

是否发生这种情况是因为Primeface套接字甚至在JSF&amp; amp;提供页面[动态部分]之前就被初始化了这就是为什么它找不到动态id ???

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

1 个答案:

答案 0 :(得分:4)

  

uview指的是视图范围的bean。一切,包括更新,除了监听方法以外都有效。永远不会调用监听器方法。即使我将侦听器的值更改为不存在的方法,也不会报告任何错误。知道为什么它不起作用吗?

这是一个错误。我找到了以下解决方法:像这样的代码

<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" />