2008年5月3日 星期六

[Displaytag] Displaytag:一個可以簡單完成分頁的 library

對於 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 作顯示

對於使用者來說,觀看的內容並沒有任何的差別,但是對於顯示的速度來說確實是會加快(當總資料的筆數有上萬筆來說),因為取部分資料的方式,對於記憶體來說,永遠都會只占有那幾筆的數量,在空間上來說確實是一項節省

沒有留言: