Richfaces ExtendedDataTable更新而不滚动到顶部

Richfaces ExtendedDataTable update without scrolling to top

我正在尝试使用 rich:extendedDataTable 实现聊天功能。我可以通过轮询 table 来接收消息,但每次我轮询 table 时它都会滚动回顶部,因此无法阅读较早的消息。有没有办法禁用该功能,或者以不刷新整个 table 而是根据需要添加行的方式加载?这是代码:

<rich:extendedDataTable
    id="message_list"
    var="message"
    value="#{studentChat.chatLog.messages}">
    <rich:column width="100%">
        <f:facet name="header">
            <h:outputText value="Messages" styleClass="label_general"/>
        </f:facet>
        <!-- Style blue if teacher sent, light grey if student sent -->
        <div style="border-radius:3px; background-color: #{(message.senderRole eq loggedUser.role ) ? '#b9caee': '#eeeeee'}">
            <h:outputText value="#{message.message}" style="font-size: 1.3em"/><br></br>
            <h:outputText value="sent #{message.timestamp}" style="float:right; font-size:.9em" /><br></br>
            <h:outputText value="#{message.viewed ? 'read' :'delivered'}" style="font-size: .9em; float: right" />
        </div>  
    </rich:column>
</rich:extendedDataTable>

每秒轮询一次。我仅限于 Richfaces 3 和 JSF 1.2。提前致谢!

我从同事那里得到了答案。这实际上非常简单。您所要做的就是将一个普通的 dataTable 包装在一个 panelGroup 中,如下所示:

<h:panelGroup layout="block" style="overflow: auto; height: 700px">
    <h:dataTable id="myTable" ></h:dataTable>
</h:panelGroup>

使用此设置,您仍然可以在 table 上使用投票,但不会重新呈现父组件,因此用户不会被迫滚动回顶部。

希望这对其他人的帮助和对我的帮助一样多!