具有延迟加载、过滤和排序的 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 数据表的主要内容,如果未能解决你的问题,请参考以下文章

PrimeReact - 数据表和延迟加载问题

使用JSF Converter时的延迟加载异常(指一个集合)

数据表延迟加载服务器端过滤器延迟

spring中怎么实现过滤器和监听器?

如何在 JSF 上延迟 Primefaces AjaxStatus?

Primefaces 动态列不适用于延迟加载