2011-09-29 21 views
0

我正在尋找處理基於Web的應用程序工作方式的技巧/最佳實踐。JBoss Seam - 處理從SQL返回的大數據

目前,當用戶搜索一個字段時,它可以立即返回超過10000條記錄,這對我來說是浪費帶寬和內存。

有沒有辦法根據選擇要顯示的行數限制返回的行數。即如果在網頁上用戶每頁選擇100行,則僅返回100行而不是一次加載全部10000行,然後當下一頁被單擊時,下一100行數將被加載等等。

UPDATE:當前實現獲取所有數據,將其綁定到t:datatablet:dataScroller以在頁面之間導航。

從我JFS 1.1有讀書是提供(糾正我,如果我錯了),並提供這樣的機制,我需要編寫自定義代碼沒有服務器端分頁,如http://wiki.apache.org/myfaces/WorkingWithLargeTables

有人可以確認這是是一個好的解決方案?使用RichFaces不是一種選擇。

感謝

回答

2

你應該使用JSF組件,如RichFaces的一個例子做服務器端分頁:

http://katzmaier.blogspot.com/2010/03/richfaces-server-side-pagination.html

+0

感謝您的回覆。當前系統使用JSF標記'<%@ taglib uri =「http://java.sun.com/jsf/html」prefix =「h」%> <%@ taglib uri =「http://java.sun .com/jsf/core「prefix =」f「%>'和't:dataTable'因此使用EntityManager不會更好嗎?但閱讀關於如何使用EntityManager來對結果列表進行分頁的文章看起來有很多需要從BackBean類改爲jsp到導航規則。是否有一本書涵蓋了JBoss Seam(分頁,處理大型reuslt集......)的這一方面。我不覺得我足夠了解開始做出改變。 – ke3pup

+0

此處沒有導航規則。您只需要一個支持外部數據源的JSF組件(就像rich:dataTable一樣)。不幸的是,MyFaces似乎不支持它。順便說一句,Richfaces是Seam支持最多的JSF庫之一。 –

1

你可以使用一個分頁程序組件來控制記錄的相關數量的顯示?

如果您需要限制返回的行數,可以將其指定爲查詢語法的一部分。

+0

感謝您的回覆,是其一般怎麼做?例如在需要顯示大量數據的情況下通過返回頂部100來限制行。相信它或不在我們的系統中實施的方式是,如果給定的搜索條件返回100000行,那麼它會返回整個負載,這會導致我們的tomcat出現各種內存問題。 – ke3pup

+0

我會對您的200行查詢設置限制,然後在Paginator組件中顯示這些行(例如Richfaces一個)。然後,當用戶向前移動結果集時,您可以根據需要從d/b中召喚更多行。 – TrueDub

1

看看entityquery類。這個支持服務器端分頁和排序。它適用於簡單或richfaces數據表。如果你需要一些輕量級的東西,甚至可以在普通的jsf上使用jquery數據表。