【问题标题】:Large JSF dataTable backed by database that can handle paging/sorting由可以处理分页/排序的数据库支持的大型 JSF 数据表
【发布时间】:2011-01-23 06:41:53
【问题描述】:

如果我尝试在 JSF 数据表中显示大量表格数据。是否有任何可以处理数据库分页和排序的实现或组件?

我目前必须拉回表中的所有行并在 JSF 中处理客户端的分页和排序。不幸的是,这不是很高效,有时会导致我的应用服务器内存不足。

理想情况下,这个数据表实现能够以某种方式包装 JDBC 查询或 Hibernate 查询。我没有停留在 JSF 1.2 上,如果这很重要,我计划很快升级到 2.0。

【问题讨论】:

    标签: java performance jsf datatable pagination


    【解决方案1】:
    【解决方案2】:

    查看 richfaces 数据表 datatable 和表 filtering 和表 sortingextended datatable

    但是,是的,我忘记了一个小提示 :),如果您需要访问数据库并在 db 级别处理过滤/排序,则需要通过扩展 org.ajax4jsf.model 来提供您自己的 DataModel 实现。可序列化数据模型。

    有些博客是这样写的,见this one

    【讨论】:

      【解决方案3】:

      当 Java 代码在 Java 内存中拖曳/复制数据存储(例如 RDBMS)的整个数据集,然后使用 Java 在 Java 内存中进行排序和过滤时,您总是会遇到内存问题代码。甚至将其存储在 Web 应用程序的会话范围内时,情况会变得更糟。

      最节省内存的方法是让数据库完成它的发明任务。 SQL 语言在每个 ORDER BY 子句下为您提供进行排序,WHERE 子句进行过滤和(DB 供应商特定)LIMIT/OFFSET 子句/子选择/函数仅返回基于记录的子集firstrowrowcountlastrow。这样,您最终只有Java 内存中实际要显示的数据集。

      没有标准的 JSF 组件可以做到这一点。它总是需要整个数据集在 Java 内存中可用,因为过滤和排序需要使用纯 Java 代码或 Javascript 进行。 JSF 对 SQL 一无所知,您需要为数据表提供javax.faces.model.DataModel 的自定义实现和/或自己在数据访问层中控制/管理它。您可以获得很多新的见解/想法,并在 this article 中找到一个启动示例。您还可以在我之前在此处发布的this JSP-targeted answer 中找到所需 SQL 查询的示例。

      祝你好运。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-24
        • 2010-09-15
        • 1970-01-01
        • 2013-08-06
        • 2015-01-31
        • 1970-01-01
        • 2013-12-02
        • 2014-08-27
        相关资源
        最近更新 更多