RichFaces 中的服务器端 DataTable 排序
Posted
技术标签:
【中文标题】RichFaces 中的服务器端 DataTable 排序【英文标题】:Server-side DataTable Sorting in RichFaces 【发布时间】:2010-09-13 04:19:52 【问题描述】:我有一个列数可变的数据表和一个数据滚动条。如何启用服务器端排序?我更喜欢用户点击列标题来触发它。
<rich:datascroller for="instanceList" actionListener="#pageDataModel.pageChange"/>
<rich:dataTable id="instanceList" rows="10" value="#pageDataModel"
var="fieldValues" rowKeyVar="rowKey">
<rich:columns value="#pageDataModel.columnNames" var="column" index="idx">
<f:facet name="header">
<h:outputText value="#column"/>
</f:facet>
<h:outputText value="#classFieldValues[idx]" />
</rich:columns>
</rich:dataTable>
我已经在 bean 上有一个方法来执行排序。
public void sort(int column)
【问题讨论】:
【参考方案1】:我最终是手动完成的。我在标题文本标签中添加了一个支持标签,就像这样。
<h:outputText value="#column">
<a4j:support event="onclick" action="#pageDataModel.sort(idx)"
eventsQueue="instancesQueue"
reRender="instanceList,instanceListScroller"/>
</h:outputText>
为了获得升/降箭头,我添加了一个 css 类。
<h:outputText value="#column" styleClass="#pageDataModel.getOrderClass(idx)" >
<a4j:support event="onclick" action="#pageDataModel.sort(idx)"
eventsQueue="instancesQueue"
reRender="instanceList,instanceListScroller"/>
</h:outputText>
【讨论】:
【参考方案2】:看看“rich:columns”的“sortBy”属性,也许这就是你要找的。 Richfaces Reference
【讨论】:
我无法让此属性始终如一地工作。无论如何,他说服务器端排序。不是丰富的:带有 sortBy 客户端排序的列吗?【参考方案3】:在检索列表时不能只使用 Collection.sort() 吗?
【讨论】:
【参考方案4】:您的数据模型需要实现“可修改”接口。
数据表将调用它的modify()
方法来做服务器端
排序和过滤。
【讨论】:
【参考方案5】:这里有一个相当优雅的解决方案:
http://livedemo.exadel.com/richfaces-demo/richfaces/sortingFeature.jsf?tab=ex-usage
本演示避免使用标签。
【讨论】:
这显示了如何进行外部排序,但排序仍在客户端进行。我相信 OP 有兴趣通过单击标题捕获单击事件,然后在后端对底层数据源进行排序。以上是关于RichFaces 中的服务器端 DataTable 排序的主要内容,如果未能解决你的问题,请参考以下文章
Jboss EAP 7.0.9 中的 RichFaces 4.3.7:IllegalStateException