(1)
displaytag
分页采用两种方式:一种方式是将全部数据一次性读取到内存中,然后分页。这种方式只能试用于数据量小的应用系统。另一种方式是用户对于每次翻页的请求,只将页面上显示的数据读取到内存中,这种方式适用于数据量大的应用系统。
(2)
displaytag1.1
的部分读取数据的实现
实现
org.displaytag.pagination.PaginatedList
接口,实现
PaginatedList
接口的代码如下,在实现中加入了属性的
setter
方法。
package com.gmail.kissluck.sample;
import java.util.ArrayList;
import java.util.List;
import org.displaytag.pagination.PaginatedList;
import org.displaytag.properties.SortOrderEnum;
public class PaginatedListImpl implements PaginatedList {
List list = new ArrayList();
int pageNumber = 0;
int objectsPerPage = 5;
int fullListSize = 0;
String sortCriterion;
SortOrderEnum sortDirection;
String searchId;
public void setFullListSize(int fullListSize) {
this.fullListSize = fullListSize;
}
public void setList(List list) {
this.list = list;
}
public void setObjectsPerPage(int objectsPerPage) {
this.objectsPerPage = objectsPerPage;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public void setSearchId(String searchId) {
this.searchId = searchId;
}
public void setSortCriterion(String sortCriterion) {
this.sortCriterion = sortCriterion;
}
public void setSortDirection(SortOrderEnum sortDirection) {
this.sortDirection = sortDirection;
}
/*
* @see org.displaytag.pagination.PaginatedList#getList()
*/
public List getList() {
return this.list;
}
/*
* @see org.displaytag.pagination.PaginatedList#getPageNumber()
*/
public int getPageNumber() {
return this.pageNumber;
}
/*
* @see org.displaytag.pagination.PaginatedList#getObjectsPerPage()
*/
public int getObjectsPerPage() {
return this.objectsPerPage;
}
/* (non-Javadoc)
* @see org.displaytag.pagination.PaginatedList#getFullListSize()
*/
public int getFullListSize() {
return this.fullListSize;
}
/*
* @see org.displaytag.pagination.PaginatedList#getSortCriterion()
*/
public String getSortCriterion() {
return this.sortCriterion;
}
/*
* @see org.displaytag.pagination.PaginatedList#getSortDirection()
*/
public SortOrderEnum getSortDirection() {
return this.sortDirection;
}
/*
* @see org.displaytag.pagination.PaginatedList#getSearchId()
*/
public String getSearchId() {
return this.searchId;
}
}
|
创建
PaginatedList
的实例并设置属性,其中对象集合从后台查询数据库获取,其他分页的参数由用户来设定。
<%@page contentType="text/html; charset=GBK"%>
<%@page import="com.gmail.kisslucksample.dao.*"%>
<%@page import="com.gmail.kissluck.sample.*"%>
<%@page import="com.gmail.kissluck.sample.util.*"%>
<%@page import="org.displaytag.properties.SortOrderEnum"%>
<%@page import="org.displaytag.pagination.PaginatedList"%>
<%@page import="org.apache.commons.lang.*"%>
<%@taglib uri="/WEB-INF/displaytag-11.tld" prefix="display"%>
<%
String strPage = request.getParameter("page");
String strDir = request.getParameter("dir");
String strSort = request.getParameter("sort");
int intCurrentPage = 1; //
当前页面
if (null != strPage && !"".equals(strPage.trim())) {
intCurrentPage = new Integer(strPage).intValue();
}
//
创建
PaginatedListImpl
实例
PaginatedListImpl lstPage = new PaginatedListImpl();
lstPage.setPageNumber(intCurrentPage); //
设置当前页
//
设置
sortDirection
if (!StringUtils.isEmpty(strDir)) {
if (StringUtils.equalsIgnoreCase(strDir, "asc"))
lstPage.setSortDirection(SortOrderEnum.ASCENDING);
else
lstPage.setSortDirection(SortOrderEnum.DESCENDING);
}
//
设置
sortCriterion
if (!StringUtils.isEmpty(strSort)) {
lstPage.setSortCriterion(strSort);
}
//
读取数据库中的数据
PagingParam param = new PagingParam();
param.setSCurrentPage(strPage);
param.setSDir(strDir);
param.setSort(strSort);
param.setSPerPage("7");
//
读取数据
PagingDAO pdao = new PagingDAO(param);
//
从数据库中读取数据并以对象列表的形式返回
java.util.List list = pdao.getPerList(param);
//
从数据库中读取数据的总数
int intFullCount = PagingDAO.getFullListCount(param);
//
设置记录总数
lstPage.setFullListSize(intFullCount);
//
设置显示的对象集合
lstPage.setList(list);
//
设置每页显示的页数
lstPage.setObjectsPerPage(7);
//
在
request
范围内保存对象集合
request.setAttribute("list", lstPage);
//
在
request
范围内保存记录的总数
request.setAttribute("resultSize", intFullCount);
%>
|
displaytag
的显示。
dispalytag
的
name
属性设置为保存在
request
范围内的对象列表的名称。
partialList
设置为
true
,表示分页导航时才加载数据的方式。
media
表示导出数据的方式,如果不希望某列出现在导出的文件类型中,可以通过设置
media
进行过滤,例如不希望
email
列出现在导出的
excel
表格中,
media
的设置中就只设置了“
csv xml pdf
”。
<display:table name="list" sort="external" defaultsort="1" pagesize="7" partialList="true" size="resultSize" export="true">
<display:column property="id" title="id" media="csv excel xml pdf"/>
<display:column property="name" title="name" media="csv excel xml pdf"/>
<display:column property="age" title="age" media="csv excel xml pdf"/>
<display:column property="email" title="email" media="csv xml pdf"/>
</display:table>
|