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),根据不同持久层有不同实现,此处略。
分享到:
相关推荐
DisplayTag分页及属性
NULL 博文链接:https://wooden-baby.iteye.com/blog/494060
display tag 分页例子中用到的有关display tag lib的jar包,把这些jar包拷贝到WEB-INF/lib中例子就可以运行了。 博文链接:https://zhou568xiao.iteye.com/blog/192366
改装后的displayTag分页插件,解决中文问题,内置帮助文档和示例文件及jar包,比较好用,如果不满足你的需求请不要砸砖 补充: csdn附件不能修改,jsp+servlet分页时有bug,请注意查询所有的serlvet不支持带参数,即...
displaytag分页模版资料非常详细 displaytag分页模版资料非常详细 displaytag分页模版资料非常详细
个人学习收集网上资料辛苦整理而成. DisplayTag分页资料整理.chm DisplayTag 分页 chm java taglib
displaytag分页模版使用说明书
07java培训displaytag分页实例六
该文档详细描述了DisplayTag分页技术的实现,以及怎么使用DisplayTag框架.
displaytag分页控件是一个功能非常强大的控件,唯一的缺陷就是表格样式不好看,这个例子让它成为了既功能强大且好看...
displaytag分页模版
Struts2整合DisplayTag 实现分页技术
Displaytag实现分页
jsp分页利器,displaytag做项目时使用的,自己总结的一些使用说明!
经典而且好用的分页组件,displaytag使用简单,功能强大!
displaytag标签扩展:鼠标经过行变色功能