以下内容是eamoi在dev2dev回答一网友问题的摘要.因为有共性,故摘要于此.
详细源帖请查阅:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=19428&tstart=0
这两天将两个包彻底研究并编码测试了一下,接下来将两个分页标签做一个简单的说明和比较.这里将前者(国内比较流行的pager.rar)称为 P1,后者(pager-taglib-2.0.war,下载地址:http://jsptags.com/tags/navigation/pager/index.jsp?tree1.plus=4
)称为P2.
两者的共同点:
[设计出发点] 通过标签库封装,将分页的手工计算转化为标签自动计算,提供统一
的分页导航条,简化分页设计,提高工作效率.
[标签设计] 提供以主标签和内嵌子标签为结构的分页标签库,通过标签参数设置,控制分页的显示效果.
[分页主体内容显示] 需要手工计算分页主体内容.
[是否适用Struts] 两者都是针对JSP开发的,在标签中会自动取得标签参数,然后自动控制显示效果.因此,不完全适用Struts,除非你在Action中手工取得标签参数,并且放到request中.
两者的不同点:
[P1]:
将分页导航条和主体内容放到form中,参数放到生成的中实现.提供唯一一个标签 page:navigator来统一表现分页导航条,提供任意页跳转功能.即使中途转出返回,比如链接到其它页面对某记录进行一下处理,直接返回重新访问或刷新该页面即可恢复转出前的状况(页号和每页记录数等),不用费心处理。简洁,只需三行代码,在需要分页的地方,头尾加上两行标记,中间适当位置插入导航条标记,如下:
....//这里是显示记录的地方
[P2]:
提供pg:pager为主标签,pg:param、pg:item、pg:index、pg:first、pg:prev、pg:page、pg:pages、pg:next、pg:last、pg :skip为内嵌子标签的分页控制方法,将参数放在pageContext或者request中,使用pg:param标签可以在URL后面增加参数,分页导航条分散到 pg:first等各个标签控制,提高灵活性.提供了包括Google等在内的多种导航条样式和选择功能,提供export variables功能. 不支持中途跳转功能.
[P1和P2如何在Struts中使用]:
正如前文所说,P1和P2是针对JSP开发的,所以页面提交target也是标签所在的JSP页面,标签的控制参数以及分页效果在页面中有标签自动读取和计算.
因此,将P1和P2应用到Action的关键是参数传递和分页主体内容的计算(原来在JSP中内嵌,手工计算).
如果在Action中,request是转发的,那么页面参数会自动保留(这个应该占多数).如果request不是转发的那么参数要先取得,再压入 request中.
现在关键是分页主体内容的计算.以P1为例:
//定义分页参数--页码和每页显示数目
int iPageNo = 1;
if(request.getParameter("pageNo")!=null) iPageNo=Integer.parseInt((String)request.getParameter("pageNo"));
int iPageSize = 10;
if(request.getParameter("pageSize")!=null) iPageSize=Integer.parseInt((String)request.getParameter("pageSize"));
String choice = "first";
if(request.getParameter("choice")!=null) choice = request.getParameter("choice");
HotInfoValue[] hotInfoValues = new HotInfoValue[0];
try {
//这里取出所有数据,放到hotInfoValues数组里面
}catch(Exception ex2) {
}
int resultNum = hotInfoValues.length;
request.setAttribute("hotInfoNum",Integer.toString(resultNum));// item条目总数
Collection result = null;
if(resultNum!=0) {
int pages = (resultNum % iPageSize == 0) ? resultNum / iPageSize : resultNum / iPageSize + 1;
if (choice.equals("next")) iPageNo++;
if (choice.equals("prev")) iPageNo--;
if (choice.equals("first")) iPageNo = 1;
if (choice.equals("last")) iPageNo = pages;
result = new ArrayList();
for(int i=(iPageNo-1)*iPageSize;i if(i>=resultNum) break;
result.add(hotInfoValues );
}
if(result.toArray().length!=0) request.setAttribute("hotInfoValues",(HotInfoValue[])result.toArray(new HotInfoValue[0]));
}
return actionMapping.findForward("---");
上述代码的关键是取得当前页面等参数,手工计算本页主体内容数据,将取得的数据压入request中.在JSP中,通过logic:iterate标签实现循环迭代.
posted on 2005-01-24 08:35
eamoi 阅读(10150)
评论(3) 编辑 收藏 所属分类:
JSP/Servlet