由可以处理分页/排序的数据库支持的大型JSF dataTable

时间:2010-03-03 15:43:42

标签: java performance jsf datatable pagination

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

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

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

3 个答案:

答案 0 :(得分:3)

使用表格datatable和表格filtering查看 richfaces 数据表sortingextended datatable

但是,是的,我忘记了一个小注释:),如果你需要去数据库并在db级别处理你的过滤/排序,你需要通过扩展org.ajax4jsf.model来提供你自己的DataModel实现。 SerializableDataModel。

有些博客就是这样,请参阅this one

答案 1 :(得分:2)

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

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

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

祝你好运。

答案 2 :(得分:1)