2013-03-13 22 views
0

我的代码: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的元素,它也找不到。这当然不是命名容器参考问题。

是否发生这种情况,因为即使在页面[动态部分]由JSF &呈现之前,Primeface套接字已经初始化,这就是为什么它无法找到动态ID?

#2。正如我从Pimeface Demo页面了解到的,需要使用动态id更新元素才能在JSF中实现聊天应用程序。我在执行primeface套接字时会出错吗?还有其他方法可以更优雅地实现它吗?

+0

嗨,你有没有找到一个解决办法?我有完全一样的问题 – alex 2013-10-25 11:18:53

回答

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