2010-03-03 31 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查詢的示例。

祝你好運。