传两个值进去: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>
Xml代码
<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这个页码指定的那一页的最后一行的索引值