對於 web programmer 來說,分頁的資料顯示方式確實是一項令人頭痛的問題,因為必須先支到資料內容的長度,資料分頁後的頁數,以及使用者目前瀏覽到哪一個分頁的資料等等
Displaytag
是一個可以讓 web programmer 輕鬆就完成多資料分頁功能的 open source solution
官方網站中對於自家的 library 有了一些很詳盡的說明,以下就對於分頁的功能作部分的探討
Displaytag 首先就如同其他 JSP tag 一樣,需要再使用前先宣告
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
接著我們就是以 display 做為 Displaytag 的 namespace
簡單的分頁使用就是對 table 設定 pagesize attribute:
<display:table name="myList" pagesize="10">
</display:table>
接著就是如果我們的 framework 使用的 Struts,我們還可以讓每次換頁時,都向 controller 重新取資料,那我們就必須設定 requestURI attribute:
<display:table name="myList" pagesize="10" requestURI="/paging.do">
</display:table>
這樣就會在每次分頁時,重新跟 paging controller 要求資料
不過你一定會很好奇,那他要的資料是要部分呢? 還是全部的資料?
別以為程式會這麼聰明,每次分頁時,當然要的都是全部的資料啊!!但是它只會顯示你要看的中間幾筆資料!!
那這樣記憶體空間不就浪費了!! 沒錯~~
所以在 displaytag 中提供了兩種方式來只取部分資料
不過我只有是成功其中一種 XD
首先建立一個 class 是 implement org.displaytag.pagination.PaginatedList:
public class MyPagingList implement org.displaytag.pagination.PaginatedList {
}
裡面會有一些需要實作出來的 methods:
getFullListSize():告知前端的 displaytag 總共會有多少筆的資料,讓前端可以產生所需要的頁數
getList():讓前端的 displaytag 取資料的 method,List 裡面存放的是取出部分的資料
getObjectsPerPage():告知前端的 displaytag 一頁顯示的資料筆數
getPageNumber():告知前端的 displaytag 目前是屬於第幾頁的資料
getSearchId():讓前端的 display 用於搜尋的功能
getSortCriterion():告知前端的 displaytag 目前排序的依據
getSortDirection():告知前端的 displaytag 目前排序的方向 ASC or DESC
我們可以利用後端的 Model 來取得這些資訊,並將這些資訊給與上面我們所建立的物件,再透過 controller 來給與 view 端的 displaytag 作顯示
對於使用者來說,觀看的內容並沒有任何的差別,但是對於顯示的速度來說確實是會加快(當總資料的筆數有上萬筆來說),因為取部分資料的方式,對於記憶體來說,永遠都會只占有那幾筆的數量,在空間上來說確實是一項節省
2008年5月3日 星期六
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言