pager-taglib分页的使用

pager-taglib分页的使用

Java代码   收藏代码
  1.   
趁有时间继续写.做项目中必然会遇到分页这个问题..在每次经验积累中!可能你所写的分页操作类功能会在不断的进化中.这次项目中我就选择了一个分页框架.在使用中可以参考别人的所做的效果和提高下开发的效率.现在就说下这个框架:
首先上其页面中下载
http://jsptags.com/tags/navigation/pager/download.jsp
这里也有提供一些效果和例子.
这里讲下一般常用的效果:
首先分页我们需要的是所查询数据的总的数据数量total.和每个数据集合.数据集合用于数据显示.total用于分页跳转到算法.这里我们可以看下pager-taglib的标签需要的参数:
Java代码   收藏代码
  1. <pg:pager url="访问页面的url地址" items="${pm.total }(总数据数量)" export="currentPageNumber=pageNumber">  
  2. <!--访问路径中后置数据.效果如xx.do?method=search-->  
  3.     <pg:param name="method" value="search"/>  
  4.   
  5.     <pg:first>  
  6.         <a href="${pageUrl}">首页</a>  
  7.     </pg:first>  
  8.     <pg:prev>  
  9.         <a href="${pageUrl }">前页</a>  
  10.     </pg:prev>  
  11.     <pg:pages>  
  12.         <c:choose><!--jstl标签.这里就不解析-->  
  13.             <c:when test="${currentPageNumber eq pageNumber }">  
  14.             <font color="red">${pageNumber }</font>  
  15.             </c:when>  
  16.             <c:otherwise>  
  17.                 <a href="${pageUrl }">${pageNumber }</a>  
  18.             </c:otherwise>  
  19.         </c:choose>  
  20.     </pg:pages>  
  21.     <pg:next>  
  22.         <a href="${pageUrl }">后页</a>  
  23.     </pg:next>  
  24.     <pg:last>  
  25.         <a href="${pageUrl }">尾页</a>  
  26.     </pg:last>  
  27. </pg:pager>  

${pageUrl}这是pager-taglib定义的el表达式...表示为url="访问页面的url地址"加上<pg:param name="method" value="search"/>形成的访问地址.
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这个页码指定的那一页的最后一行的索引值

这时候可能还有疑问.那页面中怎么知道他访问是第几页和每页显示多少数据量.
这里我们可以使用一个过滤类进行过滤:PagerFilter.java
Java代码   收藏代码
  1. public class PagerFilter implements Filter {  
  2.   
  3.     public void destroy() {  
  4.     }  
  5.   
  6.     public void doFilter(ServletRequest request, ServletResponse response,  
  7.             FilterChain chain) throws IOException, ServletException {  
  8.           
  9.         HttpServletRequest httpRequest = (HttpServletRequest)request;  
  10.         SystemContext.setOffset(getOffset(httpRequest));  
  11.         SystemContext.setPagesize(getPagesize(httpRequest));  
  12.           
  13.         try{  
  14.             chain.doFilter(request, response);  
  15.         }finally{  
  16.             //清空ThreadLocal中的值  
  17.             SystemContext.removeOffset();  
  18.             SystemContext.removePagesize();  
  19.         }  
  20.           
  21.     }  
  22.       
  23.     protected int getOffset(HttpServletRequest request){  
  24.         int offset = 0;  
  25.         try {  
  26.         offset = Integer.parseInt(request.getParameter("pager.offset"));//这里是pager-taglib的一个属性获取当前页  
  27.   
  28.         } catch (NumberFormatException ignore) {  
  29.         }  
  30.         return offset;  
  31.     }  
  32.       
  33.     protected int getPagesize(HttpServletRequest request){  
  34.         return 10;//设置每页显示10条数据.这里可以进行更灵活的控制  
  35.     }  
  36.   
  37.     public void init(FilterConfig arg0) throws ServletException {  
  38.     }  

从上面可以看到使用了SystemContext这里类.这个是自己写的一个利用threadLocal模式的.为防止一些数据的重复
Java代码   收藏代码
  1. public class SystemContext {  
  2.     private static ThreadLocal offset = new ThreadLocal();  
  3.     private static ThreadLocal pagesize = new ThreadLocal();  
  4.       
  5.     public static int getOffset(){  
  6.         Integer os = (Integer)offset.get();  
  7.         if(os == null){  
  8.             return 0;  
  9.         }  
  10.         return os;  
  11.     }  
  12.       
  13.     public static void setOffset(int offsetvalue){  
  14.         offset.set(offsetvalue);  
  15.     }  
  16.       
  17.     public static void removeOffset(){  
  18.         offset.remove();  
  19.     }  
  20.       
  21.     public static int getPagesize(){  
  22.         Integer ps = (Integer)pagesize.get();  
  23.         if(ps == null){  
  24.             return Integer.MAX_VALUE;  
  25.         }  
  26.         return ps;  
  27.     }  
  28.       
  29.     public static void setPagesize(int pagesizevalue){  
  30.         pagesize.set(pagesizevalue);  
  31.     }  
  32.       
  33.     public static void removePagesize(){  
  34.         pagesize.remove();  
  35.     }  
  36.       
  37. }  

最后在web.xml中配置上过滤器
Java代码   收藏代码
  1. <filter>  
  2.    <filter-name>pagerFilter</filter-name>  
  3.    <filter-class>xxx(当前路径).PageFilter</filter-class>  
  4.  </filter>  
  5. <filter-mapping>  
  6.    <filter-name>pagerFilter</filter-name>  
  7.    <url-pattern>/*</url-pattern>  
  8.  </filter-mapping>  

而在使用当中查询时候遇到中文查询时候将会出现乱码的问题.这里需要进行对源码进行一些修改:
第一:在下载源码后找到PagerTag.java这里类中addParam方法将
value = java.net.URLEncoder.encode(value,"UTF-8");--添加一个"UTF-8"的转换形式.
.第二:在传输数据当中.需要将你传输的数据进行URLEncoder.encode(data)加密.如下:
<pg:param name="method" value="<%URLEncoder.encode(request.getAtrribute("xxx"))%>"/>
然后在获取数据的时候再进行解码.这样子就防止传输中文的时候出现中文乱码的问题.
xxx = URLDecoder.decode(request.getAtrribute("xxx"));//解码.再操作
这只是使用到的一些功能.还有许多操作是没有使用到的也需要学习.

总的来说这个分页比较方便使用.而还存在点问题.扩展性好像也不咋样.正在看其源码希望可以写个好用的

http://dtfy56924.iteye.com/blog/446280


你可能感兴趣的:(pager-taglib分页的使用)