`

displaytag分页

阅读更多

DisplayTag一直以来为人们所诟病的缺点就是它的装载数据的方式: 一次性把所有数据读取到内存中,然后再分页显示。这样做的后果就是在处理大批量数据时力不从心,可用性急剧下降,并且在翻页显示的仅仅是内存中的数据而不是实时数据.因此人们往往只是在实现小型项目的小数量表格分页显示时才想到DisplayTag,并且因为考虑到项目的扩展往往最终弃用DiaplayTag.
但是发布于本月12日的1.1版本彻底解决了这个问题,新版的DisplayTag提供了两种方式实现部分装入数据:
(1)实现接口 org.displaytag.pagination.PaginatedList,用户可以实现这个接口用来代替以前传入DisplayTag的list对象,DisplayTag将认为分页和排序的动作已经由外部动作执行了,而不会使用 原来的分页方式(即全部读入内存).但是这样用户需要自己编写分页和排序代码;
(2)设置相应参数,告诉DisplayTag传入的数据集由外部分页和排序,而不使用默认的方式.比如:

<display:table name="testList" sort="external" defaultsort="1" pagesize="20" id="element" partialList="true" size="resultSize">
其中:
sort="external" 告诉DisplayTag传入的数据集已经由外部程序排好序了..
defaultsort="1" 说明默认是升序(Descending is 2, Ascending is 1);
partialList="true" 说明部分装入数据;
pagesize="20" 每页显示记录数;
size="resultSize" 显示记录的总条数(此参数结合PageSize,使得表格在只拿到某一页的完整数据的同时,可以知道会有多少页,并将其他的页数也列举出来,当用户实际翻页时才去获取当页数据);

 

displaytag(partialList="true")分页例子JSP:

 

<% @tagliburi = " /WEB-INF/displaytag.tld " prefix = " display " %>

< display:table name ="resultList" pagesize ="100" requestURI ="listLog.do" sort ="external" id ="row" partialList ="true" size ="resultSize" >
< display:column property ="operdate" title ="操作时间" ></ display:column >
< display:column property ="pername" title ="操作人员" ></ display:column >
< display:column property ="opertype" title ="操作类型" ></ display:column >
</ display:table >
name="resultList" 将记录集存在session或者request中的键值
pagesize="100" 每页显示100条数据
sort="external" 外部排序
id="row" 表格id值,用于程序得相关的参数
partialList="true" 分段从数据库中读数据
size="resultSize" 记录的总条数,用于计算总页数


Controller:

// 页数的参数名
StringpageIndexName = new org.displaytag.util.ParamEncoder( "row" ).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);
// 每页显示的条数
int pageSize = 100 ;
// 当前页
int pageIndex = GenericValidator.isBlankOrNull(request.getParameter(pageIndexName)) ? 0 Integer.parseInt(request.getParameter(pageIndexName)) - 1 );

// 统计总记录数的sql语句
int resultSize = logDao.getAllCount();
// 取得当前页数据
ListresultList = logDao.getLogList( int pageIndex, int pageSize);

try {
request.setAttribute( " resultList " ,resultList); // 把结果存入request
request.setAttribute( " resultSize " , new Integer(rs.getInt( 1 ))); // 将总记录数保存成Intger实例保存在request中
} catch (Exceptionex) {
ex.printStackTrace();
}

 

其中 logDao.getAllCount() 和 logDao.getLogList(intpageIndex,intpageSize),根据不同持久层有不同实现,此处略。

分享到:
评论
1 楼 wang_godsun 2010-08-25  
如果查询排序的同时,还有加上一些查询条件怎么传到action呢?

相关推荐

Global site tag (gtag.js) - Google Analytics