2010-03-03 75 views
4

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

我现在必须将表中的所有行都拉回来,并在JSF中处理分页和排序客户端。不幸的是,这不是很高效,偶尔会导致我的应用程序服务器耗尽内存。

理想情况下,此数据表的实现将能够以某种方式包装JDBC查询或Hibernate查询。我并没有停留在JSF 1.2上,我计划在不久的将来升级到2.0。

回答

3

退房RichFaces的数据表datatable与表filtering和表sorting 还是extended datatable

但是,是我忘了一个小纸条:),如果您需要到数据库,并处理您的过滤/整理在数据库级别,您将需要通过扩展org.ajax4jsf.model.SerializableDataModel来提供您自己的DataModel实现。

有一些博客会这样,看this one

2

你将永远有内存问题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查询的示例。

祝你好运。