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

集群环境中的故障​​转移不适用于 JSF 2、Richfaces 4、Tomcat 7

带有richfaces 4的动态列

Richfaces 使用 ajax 向服务器发送数据

将 RICHFACES 添加到现有的 JSF2 项目

如何填充richfaces 选项列表的右侧?