pager-taglib 使用说明

来源: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"/>传给后台的变量值对(查询条件)

Java代码  收藏代码
  1. <!-- 可以在这里插入分页导航条 -->  
  2.           
  3.           
  4.           
  5. pg:pager url="org.action" items="${pm.totles}"  export="currentPageNumber=pageNumber" maxPageItems="${pagesize}">  
  6.     <pg:param name="parentId"/>  
  7.       
  8.        
  9.     <pg:first>  
  10.         <a href="${pageUrl}">首页</a>  
  11.     </pg:first>  
  12.     <pg:prev>  
  13.         <a href="${pageUrl}">前页</a>  
  14.     </pg:prev>  
  15.     <pg:pages>  
  16.         <c:choose>  
  17.             <c:when test="${currentPageNumber eq pageNumber}">  
  18.                 <font color="red">${pageNumber }</font>  
  19.             </c:when>  
  20.             <c:otherwise>   
  21.                 <a href="${pageUrl}">${pageNumber }</a>  
  22.             </c:otherwise>  
  23.         </c:choose>  
  24.     </pg:pages>  
  25.     <pg:next>  
  26.         <a href="${pageUrl}">后页</a>  
  27.     </pg:next>  
  28.     <pg:last>  
  29.         <a href="${pageUrl}">尾页</a>  
  30.     </pg:last>  
  31. /pg:pager>    

 

struts2的配置文件 变量拦截器中添加 pager\.offset 这个值是页面标签传给后台进行分页的

Xml代码  收藏代码
  1.  <interceptor-ref name="params">  
  2.                   <param name="excludeParams">dojo\..*,^struts\..*,pager\.offset</param>  
  3.                 </interceptor-ref>  

 

 

 定义一个获取分页所需变量的拦截器 获取pagesize 每页数 与 开始记录数pager.offset

 

Java代码  收藏代码
  1. public class PagerInterceptor extends AbstractInterceptor{  
  2.   
  3.     @Override  
  4.     public String intercept(ActionInvocation invocation) throws Exception {  
  5.           
  6.   
  7.         SystemContext.setOffset(getOffset());  
  8.         SystemContext.setPageSize(getPagesize());  
  9.           
  10.           
  11.   
  12.         try{  
  13.             return invocation.invoke();  
  14.         }finally{  
  15.             SystemContext.removeOffset();  
  16.             SystemContext.removePagesize();  
  17.         }  
  18.           
  19.           
  20.           
  21.     }  
  22.   
  23.       
  24.     private int getOffset(){  
  25.         int offset = 0;  
  26.           
  27.         try {  
  28.             offset = Integer.parseInt(ServletActionContext.getRequest().getParameter("pager.offset"));  
  29.         } catch (Exception ignore) {  
  30.         }  
  31.         return offset;  
  32.     }  
  33.       
  34.     private int getPagesize(){  
  35.     int pagesize = 0;  
  36.           
  37.         try {  
  38.             pagesize = Integer.parseInt(ServletActionContext.getRequest().getParameter("pagesize"));  
  39.         } catch (Exception ignore) {  
  40.         }  
  41.           
  42.         if(pagesize==0){  
  43.               
  44.             pagesize=10;  
  45.               
  46.         }  
  47.     //  System.out.println(pagesize);  
  48.         return pagesize;  
  49.     }  
  50.   
  51. }  

 

上面使用了两个ThreadLocal 变量 存储上面的两个值

 

Java代码  收藏代码
  1. public class SystemContext {  
  2.       
  3.     public static ThreadLocal offset = new ThreadLocal();  
  4.       
  5.     public static ThreadLocal pageSize = new ThreadLocal();  
  6.       
  7.     public static int DEFAULT_PAGE_SIZE= 10;   
  8.   
  9.     public static  void setOffset(int _offset){  
  10.           
  11.         offset.set(_offset);  
  12.           
  13.     }  
  14.   
  15.     public static int getOffset(){  
  16.           
  17.         Integer _offset = (Integer)offset.get();  
  18.           
  19.         if( _offset ==null){  
  20.               
  21.             _offset=0;  
  22.         }  
  23.            
  24.          return _offset;  
  25.     }  
  26.       
  27.     public static void removeOffset(){  
  28.         offset.remove();  
  29.     }  
  30.       
  31.       
  32.     public static void setPageSize(int _pageSize){  
  33.           
  34.         pageSize.set(_pageSize);  
  35.     }  
  36.       
  37.     public static int getPageSize(){  
  38.           
  39.         Integer _pageSize= (Integer)pageSize.get();  
  40.           
  41.         if( _pageSize ==null){  
  42.               
  43.             _pageSize=DEFAULT_PAGE_SIZE;  
  44.         }  
  45.            
  46.          return _pageSize;  
  47.        
  48.     }  
  49.       
  50.     public static void removePagesize(){  
  51.         pageSize.remove();  
  52.     }  
  53. }  

 

 

 

 

  通过从threadlocal 中获取分页所需的变量,就可以在业务类中获取这两个变量,避免了在每个action中传值的麻烦

Java代码  收藏代码
  1. public class BaseManager extends HibernateDaoSupport {  
  2.   
  3. ...  
  4.   
  5.   
  6.   
  7. PageMode searchOrgs(String hql, Object[] objects){  
  8. ...       
  9.         int offset  = SystemContext.getOffset();  
  10.         int pageSize = SystemContext.getPageSize();  
  11.           
  12. ...  
  13.     List datas =   query.setFirstResult(offset).setMaxResults(pageSize).list();  
  14. ...  
  15. }  
  16.   
  17.   
  18. }  

 

 

 

 

 

 

 

  为了使用方面将上面的分页标签页面提取出公共的部分

Html代码  收藏代码
  1. <body>  
  2. <pg:pager items="1001" maxPageItems="33" maxIndexPages="20" export="currentPageNumber=pageNumber">  
  3.     <pg:first>  
  4.         <a href="${pageUrl }">首页</a>  
  5.     </pg:first>  
  6.     <pg:prev>  
  7.         <a href="${pageUrl }">前页</a>  
  8.     </pg:prev>  
  9.     <pg:pages>  
  10.         <c:choose>  
  11.             <c:when test="${currentPageNumber eq pageNumber}">  
  12.                 <font color="red">${pageNumber }</font>  
  13.             </c:when>  
  14.             <c:otherwise>  
  15.                 <a href="${pageUrl }">${pageNumber }</a>  
  16.             </c:otherwise>  
  17.         </c:choose>  
  18.     </pg:pages>  
  19.     <pg:next>  
  20.         <a href="${pageUrl }">下页</a>  
  21.     </pg:next>  
  22.     <pg:last>  
  23.         <a href="${pageUrl }">尾页</a>  
  24.     </pg:last>  
  25. </pg:pager>  
  26. </body>  

 

   需要分页的页面只需如下调用:将url 传进去

 

Html代码  收藏代码
  1.         <!-- 可以在这里插入分页导航条 -->  
  2.    <s:include value="/common/pager.jsp">  
  3.         <s:set var="url" value="'org.action'"/>  
  4.       <s:set var="params" value="#{'parentId':null}"/>  
  5.    </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这个页码指定的那一页的最后一行的索引值


posted on 2013-10-30 15:49  天神Deity  阅读(270)  评论(0编辑  收藏  举报

导航