remoteCommand не обновляет компонент JSF должным образом

У нас есть большое приложение, разработанное с использованием JavaEE (primefaces, wildfly, Websocket). Идея, лежащая в основе важной функциональности нашего приложения, заключается в том, что если два или более пользователей находятся в сети одновременно, они могут видеть статус друг друга.

Например, если "Maik" и "Andre" находятся в сети, Maik может видеть онлайн-статус Andre, а Andre - "Maik".

Мы используем Websocket(конечная точка сервера, Javascript Websocket API на стороне клиента).

Клиенты отправляют свои идентификаторы пользователей (UUID) через защищенную веб-розетку на сервер, сервер сохраняет их в Hashmap (ключ: идентификатор страницы, где в данный момент зарегистрированы пользователи, значение: идентификатор пользователя). Сервер возвращает строку json клиентам и клиентам, а затем отправляет строку компоненту поддержки с параметризованной RemoteCommand.

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

RemoteCommand на странице xhtml используется как:

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

RemoteCommand вызывает функцию вспомогательного компонента - 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);

После вызова функции вспомогательного компонента RemoteCommand обновляет компонент "OnlineUsersFormId:onlineUserId" на странице 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) покидает страницу, но его имя не удаляется со страницы другого пользователя (Andre) (хотя Сервер говорит ему удалить имя Maik- it тоже отлично работает только на некоторое время). Наша интуиция говорит, что что-то с "обновлением компонента" в remoteCommand работает ненормально.

Любая помощь будет оценена.

С наилучшими пожеланиями, Тахир

0 ответов

Другие вопросы по тегам