来源:http://ysen.iteye.com/blog/626524
1、拷贝pager-taglib.jar包
2、在JSP页面中使用taglib指令引入pager-taglib标签库
3、使用pager-taglib标签库进行分页处理
传两个值进去:1、pm.totles总记录数 2、pagesize 每页显示页数 3、<pg:param name="parentId"/>传给后台的变量值对(查询条件)
- <!-- 可以在这里插入分页导航条 -->
- pg:pager url="org.action" items="${pm.totles}" export="currentPageNumber=pageNumber" maxPageItems="${pagesize}">
- <pg:param name="parentId"/>
- <pg:first>
- <a href="${pageUrl}">首页</a>
- </pg:first>
- <pg:prev>
- <a href="${pageUrl}">前页</a>
- </pg:prev>
- <pg:pages>
- <c:choose>
- <c:when test="${currentPageNumber eq pageNumber}">
- <font color="red">${pageNumber }</font>
- </c:when>
- <c:otherwise>
- <a href="${pageUrl}">${pageNumber }</a>
- </c:otherwise>
- </c:choose>
- </pg:pages>
- <pg:next>
- <a href="${pageUrl}">后页</a>
- </pg:next>
- <pg:last>
- <a href="${pageUrl}">尾页</a>
- </pg:last>
- /pg:pager>
struts2的配置文件 变量拦截器中添加 pager.offset 这个值是页面标签传给后台进行分页的
- <interceptor-ref name="params">
- <param name="excludeParams">dojo..*,^struts..*,pager.offset</param>
- </interceptor-ref>
定义一个获取分页所需变量的拦截器 获取pagesize 每页数 与 开始记录数pager.offset
- public class PagerInterceptor extends AbstractInterceptor{
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
- SystemContext.setOffset(getOffset());
- SystemContext.setPageSize(getPagesize());
- try{
- return invocation.invoke();
- }finally{
- SystemContext.removeOffset();
- SystemContext.removePagesize();
- }
- }
- private int getOffset(){
- int offset = 0;
- try {
- offset = Integer.parseInt(ServletActionContext.getRequest().getParameter("pager.offset"));
- } catch (Exception ignore) {
- }
- return offset;
- }
- private int getPagesize(){
- int pagesize = 0;
- try {
- pagesize = Integer.parseInt(ServletActionContext.getRequest().getParameter("pagesize"));
- } catch (Exception ignore) {
- }
- if(pagesize==0){
- pagesize=10;
- }
- // System.out.println(pagesize);
- return pagesize;
- }
- }
上面使用了两个ThreadLocal 变量 存储上面的两个值
- public class SystemContext {
- public static ThreadLocal offset = new ThreadLocal();
- public static ThreadLocal pageSize = new ThreadLocal();
- public static int DEFAULT_PAGE_SIZE= 10;
- public static void setOffset(int _offset){
- offset.set(_offset);
- }
- public static int getOffset(){
- Integer _offset = (Integer)offset.get();
- if( _offset ==null){
- _offset=0;
- }
- return _offset;
- }
- public static void removeOffset(){
- offset.remove();
- }
- public static void setPageSize(int _pageSize){
- pageSize.set(_pageSize);
- }
- public static int getPageSize(){
- Integer _pageSize= (Integer)pageSize.get();
- if( _pageSize ==null){
- _pageSize=DEFAULT_PAGE_SIZE;
- }
- return _pageSize;
- }
- public static void removePagesize(){
- pageSize.remove();
- }
- }
通过从threadlocal 中获取分页所需的变量,就可以在业务类中获取这两个变量,避免了在每个action中传值的麻烦
- public class BaseManager extends HibernateDaoSupport {
- ...
- PageMode searchOrgs(String hql, Object[] objects){
- ...
- int offset = SystemContext.getOffset();
- int pageSize = SystemContext.getPageSize();
- ...
- List datas = query.setFirstResult(offset).setMaxResults(pageSize).list();
- ...
- }
- }
为了使用方面将上面的分页标签页面提取出公共的部分
- <body>
- <pg:pager items="1001" maxPageItems="33" maxIndexPages="20" export="currentPageNumber=pageNumber">
- <pg:first>
- <a href="${pageUrl }">首页</a>
- </pg:first>
- <pg:prev>
- <a href="${pageUrl }">前页</a>
- </pg:prev>
- <pg:pages>
- <c:choose>
- <c:when test="${currentPageNumber eq pageNumber}">
- <font color="red">${pageNumber }</font>
- </c:when>
- <c:otherwise>
- <a href="${pageUrl }">${pageNumber }</a>
- </c:otherwise>
- </c:choose>
- </pg:pages>
- <pg:next>
- <a href="${pageUrl }">下页</a>
- </pg:next>
- <pg:last>
- <a href="${pageUrl }">尾页</a>
- </pg:last>
- </pg:pager>
- </body>
需要分页的页面只需如下调用:将url 传进去
- <!-- 可以在这里插入分页导航条 -->
- <s:include value="/common/pager.jsp">
- <s:set var="url" value="'org.action'"/>
- <s:set var="params" value="#{'parentId':null}"/>
- </s:include>
pg:pager【这个标签用来设置分页的总体参数】重要参数说明:
url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
items:总记录数,pager标签正是根据这个值来计算分页参数的
maxPageItems:每页显示的行数,默认为10
maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10
pg:first【第一页的标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 首页第一行的索引值
lastItem - 首页最后一行的索引值
pg:pre【上一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 前页第一行的索引值
lastItem - 前页最后一行的索引值
pg:next【下一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 下页第一行的索引值
lastItem - 下页最后一行的索引值
pg:last重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 尾页第一行的索引值
lastItem - 尾页最后一行的索引值
pg:pages【这个标签用来循环输出页码信息】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - pageNumber这个页码指定的那一页的第一行的索引值
lastItem - pageNumber这个页码指定的那一页的最后一行的索引值