如果我想在JSF数据表中显示大量表格数据。是否有任何可以处理数据库分页和排序的实现或组件?大型JSF数据表支持可处理分页/排序的数据库
我现在必须将表中的所有行都拉回来,并在JSF中处理分页和排序客户端。不幸的是,这不是很高效,偶尔会导致我的应用程序服务器耗尽内存。
理想情况下,此数据表的实现将能够以某种方式包装JDBC查询或Hibernate查询。我并没有停留在JSF 1.2上,我计划在不久的将来升级到2.0。
如果我想在JSF数据表中显示大量表格数据。是否有任何可以处理数据库分页和排序的实现或组件?大型JSF数据表支持可处理分页/排序的数据库
我现在必须将表中的所有行都拉回来,并在JSF中处理分页和排序客户端。不幸的是,这不是很高效,偶尔会导致我的应用程序服务器耗尽内存。
理想情况下,此数据表的实现将能够以某种方式包装JDBC查询或Hibernate查询。我并没有停留在JSF 1.2上,我计划在不久的将来升级到2.0。
退房RichFaces的数据表datatable与表filtering和表sorting 还是extended datatable
但是,是我忘了一个小纸条:),如果您需要到数据库,并处理您的过滤/整理在数据库级别,您将需要通过扩展org.ajax4jsf.model.SerializableDataModel来提供您自己的DataModel实现。
有一些博客会这样,看this one
你将永远有内存问题Java代码的时候拖拉/复制整个数据集的数据存储(如一个RDBMS)在Java的内存,然后做使用Java代码在Java内存中进行排序和过滤。甚至在将它存储在Web应用程序的会话范围内时,情况会变得更糟。
内存效率最高的方法是让数据库完成它发明的任务。 SQL语言根据每个ORDER BY
子句进行排序,WHERE
子句进行筛选,并且(DB供应商特定的)LIMIT/OFFSET
子句/子子查询/子函数仅返回基于第一行和行记录的记录子集或lastrow。这样你最终只能得到 Java内存中实际要显示的数据集。
没有标准的JSF组件可以做到这一点。它将始终要求整个数据集在Java内存中可用,因为过滤和排序需要在纯Java代码或Javascript中发生。 JSF对SQL一无所知,您需要自己提供一个自定义实现javax.faces.model.DataModel
到数据表和/或控制/管理数据访问层。您可以获得许多新的见解/想法,并在this article中找到一个启动示例。您也可以在此处发布的this JSP-targeted answer中找到所需SQL查询的示例。
祝你好运。