學習DispalyTag1.1分頁
1.1版最大的改進可以說是終于支持了大家期待以久的分次加載功能了,想顯示多少數據就載入多少數據.1.1版本支持兩種方式的分頁,第一種是實現其org.displaytag.pagination.PaginatedList 接口,第二種是在頁面和后臺同時做修改來實現分頁功能.在網上關于第二種分頁的使用方法介紹的非常多,而且官方文檔上面寫的也比較詳細,所以在這里我主要介紹自己是如何使用第一種方式進行分頁的,且這種方式也是官方推薦分頁方式
給出 org.displaytag.pagination.PaginatedList接口原代碼如下

package org.displaytag.pagination;

import java.util.List;
import org.displaytag.properties.SortOrderEnum;

public interface PaginatedList


{

public abstract List getList();

public abstract int getPageNumber();

public abstract int getObjectsPerPage();

public abstract int getFullListSize();

public abstract String getSortCriterion();

public abstract SortOrderEnum getSortDirection();

public abstract String getSearchId();
}

首先寫一個此接口的實現類

/** *//**
* PaginatedListImpl
* totalNum 所有條目數目
* currentPage 當前所在頁號
* objectsPerPage 每頁顯示條數
* list 此頁所需要顯示的數據
*/

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;
}

}

然后在使用的時候只需要創建此類的一個實例,且將所需要的參數通過set方法賦值進去就可以了.下面的代碼片段一般處于業務邏輯層.當然還可進行封裝.
int page;


/**//*
*其中request中的page參數為displaytag中的默認當前頁數,當然也可以使用*TableTagParameters.SORT_AMOUNT_PAGE來表示當前頁數
*/

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數據

List list=
.;

paginaredList.setList(list);

// 總共有多少數據,他會根據所有數目和每頁數目自動統計頁數

paginaredList.setFullListSize(
);

// 如果你只設定這幾個參數,那么其余的參數將會默認為你實現類中所賦的初值

最后,你還需要將這個實例放入到request或session中去,好讓displaytag知道這個是外部分頁

request.setAttribute("pageList",paginaredList);

在前臺只需象下面這樣寫就可以了

<display:table name="${pageList}" id="list" requestURI="">

<display:column property="id"/>

</display:table>

因為整個分頁過程是動態的,所以,很有可能在你翻頁的同時,原來的數據已經發生了變化,所以每次傳入總數目是很有必要的(070412).
posted on 2007-04-13 06:30
Jorny.R 閱讀(102)
評論(0) 編輯 收藏