文章出處:http://blog.csdn.net/shrek_xu/archive/2006/06/01/767885.aspx
最近因為項目需要,所以想把原來使用的displaytag1.0升級為displaytag1.1,其實升級的原因很簡單,1.0實在是太傻了,每次分頁還需要將所有數(shù)據(jù)一次載入,效率低到無法忍受:)
1.1版最大的改進可以說是終于支持了大家期待以久的分次加載功能了,想顯示多少數(shù)據(jù)就載入多少數(shù)據(jù).1.1版本支持兩種方式的分頁,第一種是實現(xiàn)其org.displaytag.pagination.PaginatedList 接口,第二種是在頁面和后臺同時做修改來實現(xiàn)分頁功能.在網(wǎng)上關于第二種分頁的使用方法介紹的非常多,而且官方文檔上面寫的也比較詳細,所以在這里我主要介紹自己是如何使用第一種方式進行分頁的,且這種方式也是官方推薦分頁方式(自己摸索的,呵呵,不好不要見怪)
首先寫一個此接口的實現(xiàn)類
/**
* PaginatedListImpl
* User: shrek_xu
* Date: 2006-5-30
* Time: 20:35:18
*
* totalNum 所有條目數(shù)目
* currentPage 當前所在頁號
* objectsPerPage 每頁顯示條數(shù)
* list 此頁所需要顯示的數(shù)據(jù)
*/
public class PaginatedListHelper implements PaginatedList{
private List list;
private int pageNumber = 1;
private int objectsPerPage = 20;
private int fullListSize = 0;
private String sortCriterion;
private SortOrderEnum sortDirection;
private String searchId;
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getObjectsPerPage() {
return objectsPerPage;
}
public void setObjectsPerPage(int objectsPerPage) {
this.objectsPerPage = objectsPerPage;
}
public int getFullListSize() {
return fullListSize;
}
public void setFullListSize(int fullListSize) {
this.fullListSize = fullListSize;
}
public String getSortCriterion() {
return sortCriterion;
}
public void setSortCriterion(String sortCriterion) {
this.sortCriterion = sortCriterion;
}
public SortOrderEnum getSortDirection() {
return sortDirection;
}
public void setSortDirection(SortOrderEnum sortDirection) {
this.sortDirection = sortDirection;
}
public String getSearchId() {
return searchId;
}
public void setSearchId(String searchId) {
this.searchId = searchId;
}
}
然后在使用的時候只需要創(chuàng)建此類的一個實例,且將所需要的參數(shù)通過set方法賦值進去就可以了
int page;
/*
*其中request中的page參數(shù)為displaytag中的默認當前頁數(shù),當然也可以使用*TableTagParameters.SORT_AMOUNT_PAGE來表示當前頁數(shù)
*/
if(request.getParameter("page")!=null && !"".equals(request.getParameter("page"))){
page=Integer.parseInt(request.getParameter("page"));
}else{
page=1;
}
PaginatedList paginaredList=new PaginatedListHelper();
paginaredList.setPageNumber(page);
// 此頁要顯示的list數(shù)據(jù)
List list=.......;
paginaredList.setList(list);
// 總共有多少數(shù)據(jù),他會根據(jù)所有數(shù)目和每頁數(shù)目自動統(tǒng)計頁數(shù)
paginaredList.setFullListSize(...);
// 如果你只設定這幾個參數(shù),那么其余的參數(shù)將會默認為你實現(xiàn)類中所賦的初值
最后,你還需要將這個實例放入到request或session中去,好讓displaytag知道這個是外部分頁
request.setAttribute("pageList",paginaredList);
在前臺只需象下面這樣寫就可以了
<display:table name="${pageList}" id="list" requestURI="">
<display:column property="id"/>
</display:table>
最開始我對每次都要傳入總共有多少條數(shù)據(jù)表示疑問,認為這個沒有必要,只需要第一次傳入就可以了,但是后來仔細想想,因為整個分頁過程是動態(tài)的,所以,很有可能在你翻頁的同時,原來的數(shù)據(jù)已經(jīng)發(fā)生了變化,所以每次傳入總數(shù)目是很有必要的
如果大家需要轉載,請你也附上此文連接
posted on 2007-11-14 19:55
Ke 閱讀(442)
評論(0) 編輯 收藏 所屬分類:
tag