我们有一个RemoteCommand (showOnlineUsers),它调用一个支持 bean 方法来显示所有在线用户。但它不会(有时)更新组件(OnlineUsersFormId:onlineUserId)。
<p:remoteCommand name="showOnlineUsers"
action="#{bean.showOnlineUsers()}"
update="OnlineUsersFormId:onlineUserId" />
此远程命令应该更新以下 h:panelGroup
<h:form id="OnlineUsersFormId">
<h:panelGroup id="onlineUserId">
<ui:repeat var="user" value="#{bean.usersList}">
#{user.getUserName()}
</ui:repeat>
</h:panelGroup>
</h:form>
此代码工作正常,但一段时间后它表现异常,并在Chrome-Network-Debugger 中生成不完整的部分响应消息。
正确生成的消息:
<partial-response id="j_id1">
<changes>
<update id="OnlineUsersFormId:onlineUserId">
<span id="OnlineUsersFormId:onlineUserId"></span>
</update>
<update id="j_id1:javax.faces.ViewState:0">-938130356222711200:-4155932992558832648
</update>
</changes>
</partial-response>
生成的消息不正确:
<partial-response id="j_id1">
<changes>
<update id="j_id1:javax.faces.ViewState:0">-938130356222711200:-4155932992558832648
</update>
</changes>
</partial-response>
正如您清楚地看到的那样,在 Google Chrome 的网络调试器中生成的不正确的部分响应中缺少OnlineUsersFormId:onlineUserId 。这就是为什么(我猜)它不会更新页面上的 panelGroup 组件。
注意:一旦它不更新组件,它会在调试器中重复相同的消息,除非我们刷新页面。