Richfaces ExtendedDataTable更新,无需滚动到顶部

时间:2015-02-24 23:41:33

标签: jsf richfaces

我尝试使用rich:extendedDataTable实现聊天功能。我可以通过轮询桌面来接收消息,但每次我轮询桌面时它都会滚动回到顶部,这使得无法读取之前的消息。有没有办法禁用该功能,或以不刷新整个表但是根据需要添加行的方式加载?这是代码:

<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。提前谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

使用此设置,您仍然可以在表上使用轮询,但不会重新呈现父组件,因此不会强制用户滚动回到顶部。

希望能像对待我一样帮助别人!