remoteCommand没有正确更新JSF组件

时间:2016-06-07 11:50:50

标签: javascript primefaces websocket remotecommand

我们有一个用JavaEE开发的大型应用程序(primefaces,wildfly,Websocket)。我们的应用程序的重要功能背后的想法是,如果两个或更多用户同时在线,那么他们可以看到彼此的状态。

e.g。 如果' Maik'和安德烈'在线,然后Maik可以看到Andre的在线状态,Andre看到了Maik的状态。

我们使用Websocket(服务器端点,客户端的Javascript Websocket API)。

客户端通过安全websocket将其用户ID(UUID)发送到服务器,服务器将它们保存在Hashmap中(密钥:用户当前登录的页面ID,值:user-id)。服务器将json字符串返回给客户端,然后客户端使用参数化的RemoteCommand将字符串发送到支持bean。

ws.onmessage = function(e) {
     console.log("received msg: " + e.data);
        showOnlineUsers([ {
            name : 'jsonString',
            value : e.data
        } ]);
    }

xhtml页面中的RemoteCommand用作:

    <p:remoteCommand name="showOnlineUsers"
        action="#{bean.showOnlineUsers()}"
        process="@form" update="OnlineUsersFormId:onlineUserId" />

RemoteCommand调用支持bean函数 - showOnlineUSers()。

String jsonString = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("jsonString"); 

 // Logic to extract jsonSting and generate a List of users.
 // Set the users list for XHTML component.

setUsersList(list);

调用支持bean函数后,RemoteCommand更新组件&#34; OnlineUsersFormId:onlineUserId&#34;在XHTML页面中。页面中的确切jsf组件如下: -

<h:form id="OnlineUsersFormId">
    <h:panelGroup id="onlineUserId">
        <ui:repeat var="user" value="#{bean.getUsersList()}">
            #{user.getUserName()}
        </ui:repeat>
    </h:panelGroup>
</h:form>                                                   

问题: 逻辑工作正常,但在工作一段时间后,当用户(Maik)离开页面但他的名字不在时,它会突然停止工作已从其他用户(安德烈)页面中移除(虽然服务器告诉他删除Maik的名称 - 它也只能工作一段时间)。 我们的直觉就是说有一些东西用于更新组件&#34;在remoteCommand中工作异常。

任何帮助都将不胜感激。

祝你好运, 塔希尔

0 个答案:

没有答案