【发布时间】:2016-07-05 10:28:28
【问题描述】:
我已经为此苦苦挣扎了好几天。
我有一个来自 primefaces 的 tabView,其值是对象的集合。
<p:tabView id="allChats"
value="#{userCalcChatRoom.userChats.userListChats}" var="userChat"
activeIndex="#{userCalcChatRoom.userChats.activeChat}" dynamic="true" cache="true"
scrollable="true">
<p:tab title="#{userChat.getTitle()}">
<h:form id="chats">
<div class="chatBottom">
<p:dataList id="dataListMessages"
value="#{userChat.chat.messages}" var="message"
rendered="#{not empty userChat.chat.messages}" type="none">
<p>
<span class="username"># message.user.username}: </span> <span
class="message">#{message.message}</span>
</p>
</p:dataList>
</div>
<div class="divAddNewMessage">
<p:inputText autocomplete="false" value="#{userChat.inputAddNewMessage}" required="true" />
<p:commandButton process="@form" update="@form"
actionListener="#{userChat.addNewMessage() }" styleClass="hidden" />
</div>
</h:form>
</p:tab>
</p:tabView>
这个集合可以在服务器上改变,所以我需要每 X 秒更新一次这个 tabView,我可以用 poll 来做:
<p:poll update="onlineUserList allChats" interval="2"/>
问题是我在每个选项卡上都有输入字段,每次投票都会丢失其值。
有没有办法更新tabview而不更新输入字段?
我尝试过使用一个简单的 html 字段,但这也会在每次投票时重新呈现。 我不能使用 ID,因为输入字段在 tabview 内部,我需要更新 tabview,因为服务器中的选项卡数量可以改变。
谢谢
【问题讨论】:
-
但我需要更新 tabview 集合,并且 tabview 对所有组件进行分组...
-
我应该保存 bean 类上的每个输入字段更改吗?
-
“我应该保存 bean 类上的每个输入字段更改吗?” 归结为...使用 ajax 来实现它...也许使用 push 而不是拉更好。你只需要在有更新的时候更新。
-
每 2 秒更新一个焦点
inputField不是一个好主意:光标每次都会跳转。我会考虑将 divdivAddNewMessage移出<p:tabView>。您应该能够使用 tabChange 事件跟踪活动选项卡,从而允许将新消息发送到活动选项卡。
标签: jsf jsf-2 primefaces jsf-2.2