具有延迟加载、过滤和排序的 jsf 数据表
Posted
技术标签:
【中文标题】具有延迟加载、过滤和排序的 jsf 数据表【英文标题】:jsf datatable with lazy loading, filtering and sorting 【发布时间】:2011-02-22 15:42:53 【问题描述】:我参与过多个包含大量数据表的项目。 这些表当然在服务器端并在数据库的帮助下进行了排序、过滤和分页 (所有数据库都实现了排序、过滤-where和限制返回结果)。
在实际应用程序中工作时,会有数千甚至数百万行。
但我见过几个 JSF 数据表组件。 他们在客户端实现分页、排序和过滤! 在我看来,这是非常愚蠢的。这种技术叫做企业,他们用java脚本在客户端对数据进行排序!
我还没有看到任何好的 JSF 数据网格在服务器端内置了用于排序、过滤和延迟加载的功能。
这是为什么呢?我是在寻找错误的方向还是真的没有对此的构建支持。 最近我正在测试 primefaces 和延迟加载数据表。它真的很好用,但我只能懒加载表。如果添加排序和过滤器,那么问题就开始了。
结论: 是否有任何数据表 JSF 组件可以在服务器端执行延迟加载分页以及过滤和排序? 如果我需要执行我自己的解决方案,这要归功于进行客户端排序和过滤的团队,它们是无用的。
【问题讨论】:
你有没有找到一种使用延迟加载构建可排序表的好方法? @darpet:你找到一个好的解决方案了吗? Primefaces Datatable 启用延迟加载是今天的答案:-) 【参考方案1】:不,没有。因为组件库无法知道持久化机制是什么。
但是,许多数据表都提供了用于呈现这一点的选项。例如richfaces 的数据表有所谓的DataModel。例如我们所做的是:
public class CustomDataProvider implements DataProvider<ClassToShow>,
Sortable2, Filterable ..
public class PagingExtendedTableDataModel<T> extends ExtendedDataModel implements
Serializable, Modifiable
private DataProvider dataProvider;
private Object rowKey;
private List wrappedKeys;
private Map wrappedData;
private Integer rowCount;
private Integer rowIndex;
private List<FilterField> filterFields;
private List<SortField2> sortFields;
public PagingExtendedTableDataModel(DataProvider<T> dataProvider) ..
您必须以适合您的持久性机制的方式实现所有方法
【讨论】:
以上是关于具有延迟加载、过滤和排序的 jsf 数据表的主要内容,如果未能解决你的问题,请参考以下文章
使用JSF Converter时的延迟加载异常(指一个集合)