【问题标题】:jsf poll update clears input fieldsjsf poll update 清除输入字段
【发布时间】: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 来做: &lt;p:poll update="onlineUserList allChats" interval="2"/&gt;

问题是我在每个选项卡上都有输入字段,每次投票都会丢失其值。

有没有办法更新tabview而不更新输入字段?

我尝试过使用一个简单的 html 字段,但这也会在每次投票时重新呈现。 我不能使用 ID,因为输入字段在 tabview 内部,我需要更新 tabview,因为服务器中的选项卡数量可以改变。

谢谢

【问题讨论】:

  • 但我需要更新 tabview 集合,并且 tabview 对所有组件进行分组...
  • 我应该保存 bean 类上的每个输入字段更改吗?
  • “我应该保存 bean 类上的每个输入字段更改吗?” 归结为...使用 ajax 来实现它...也许使用 push 而不是拉更好。你只需要在有更新的时候更新。
  • 每 2 秒更新一个焦点 inputField 不是一个好主意:光标每次都会跳转。我会考虑将 div divAddNewMessage 移出 &lt;p:tabView&gt;。您应该能够使用 tabChange 事件跟踪活动选项卡,从而允许将新消息发送到活动选项卡。

标签: jsf jsf-2 primefaces jsf-2.2


【解决方案1】:

我找到了一个简单而出色的解决方案,将 resetValues="false" 添加到 p:poll:

<p:poll resetValues="false" interval="3" listener="#{counterView.increment}" update="txt_count" />

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多