我尝试使用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。提前谢谢!
答案 0 :(得分:1)
我得到了一位同事的回答。它实际上非常简单。您所要做的就是将一个普通的dataTable包装在panelGroup中,如下所示:
<h:panelGroup layout="block" style="overflow: auto; height: 700px">
<h:dataTable id="myTable" ></h:dataTable>
</h:panelGroup>
使用此设置,您仍然可以在表上使用轮询,但不会重新呈现父组件,因此不会强制用户滚动回到顶部。
希望能像对待我一样帮助别人!