锁定老帖子 主题:pager-taglib 使用说明
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-28
最后修改:2010-03-28
1、拷贝pager-taglib.jar包
传两个值进去: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【这个标签用来设置分页的总体参数】重要参数说明: pg:next【下一页标签】重要参数说明:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-09-17
我在使用的时候会报错,请教一下:
(1)如果有maxPageItems="${pagesize}"这句会出现 500 \by 0的错误。 (2)如果删掉后上面那行会出现 Error setting expression 'pager.offset' with value '[Ljava.lang.String;@c7e8af' ognl.OgnlException: target is null for setProperty(null, "offset", [Ljava.lang.String;@c7e8af) 另外我的配置文件 <interceptors> <!-- 定义拦截器 --> <interceptor name="pagerInerceptor" class="tsinghua.weblab.common.PagerInterceptor"/> </interceptors> <action name="patentsList" class="struts2.action.PatentsListAction"> <result name="success">PatentsList.jsp</result> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*,pager\.offset</param> </interceptor-ref> <interceptor-ref name="pagerInerceptor"/> </action> |
|
返回顶楼 | |
浏览 4526 次