点击这里给我发消息 点击这里给我发消息

小小分页帮助程序

添加时间:2013-12-7
    相关阅读: 页面 程序 链接

 

  1. import java.util.List;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. /**
  5.  * 程序目的:  
  6.  *    在 Action 里调用的时候传几个参数进去,然后就可以到跳转过后的页面里面取出分页的必须
  7.  * 参数,达到分页的功能。
  8.  * 
  9.  * 前台页面实例代码:
  10.  * 遍历 list
  11.  * <c:forEach var="i" items="${requestScope.list}" 
  12.  *         begin="${requestScope.beginPoint}" 
  13.  *         end="${requestScope.endPoint}" >
  14.  * 
  15.  *         list 中的内容
  16.  *         ...
  17.  * </c:forEach>
  18.  * 
  19.  * 页面跳转链接代码:
  20.  * <A href="actionName.do&page=1">第一页</A>
  21.  * <A href="action.do&page=${requestScope.curPage - 1}">上一页</A>
  22.  * <A href="action.do&page=${requestScope.curPage + 1}">下一页</A>
  23.  * <A href="action.do&page=${requestScope.totalPage}">最后一页</A>
  24.  * 
  25.  * 显示页码及链接
  26.  * <c:forEach var="i" begin="${requestScope.pageFirst}" 
  27.  *                         end="${requestScope.pageLast}">
  28.  *         <c:choose>
  29.  *            <c:when test="${requestScope.curPage == i}">
  30.  *                ${i}
  31.  *            </c:when>
  32.  *            <c:when test="${requestScope.curPage != i}">
  33.  *                <A href="actionName.do?page=${i}">${i}</A>
  34.  *            </c:when>
  35.  *        </c:choose>
  36.  * </c:forEach>
  37.  * 
  38.  * @author LovinChan
  39.  *
  40.  *     看到网上有很多分页的实例代码,觉得都写得很不错,不过对于大侠们写的那些代码,本人觉得
  41.  * 他们要展示的不过就是一种计算页面的方法,如果看懂了就看懂了,如果没看懂还是不知道用。至少
  42.  * 要我去用的话会有点困难,那些东西很多地方都要大改动。
  43.  *    http://displaytag.sourceforge.net/11/ 可以下到 displaytag,这确实是个好东
  44.  * 西,只要有个list,就可以跟你把页数,页面链接,当前页面,需要显示的表格等等东西都给
  45.  * display出来,如果用 displaytag 用得熟的话对于这种将数据都取出来存进一个list里面然后传
  46.  * 到前台页面上去分页应该可以说是一点问题都没有了。
  47.  *    本人看了网上很多帖子偶得一点灵感,自己写一个工具类供别人调用,只需要传几个参数,就可
  48.  * 以得到分页展示必须的参数,然后只要在前台的jsp页面里面调用就可以了。
  49.  *    
  50.  *    但是这个方法对别人用起来可能会觉得有点烂,呵呵,至少我自己用着觉得蛮好的了,对于一次
  51.  * 将数据都取出来然后分页的方法用这个还是蛮顺手的,在这里也想请各位大侠多多指出其中的不足之
  52.  * 处,多加以批评,让我也可以早点改正一些我还没发现的bug。
  53.  *
  54.  *    程序的注释我尽量写得详细一点,如果觉得这个程序哪里有问题或者是哪里有改进的  
  55.  * 地方欢迎随时跟我交流。
  56.  * 
  57.  * 我的msn:egg.chenlw@gmail.com  
  58.  *    QQ:543669516(注上为什么加我就可以了)  
  59.  * 我的blog:http://hi.baidu.com/egg_chen  
  60.  * 欢迎交流  
  61.  */ 
  62. public class PagingUtil {
  63.     
  64.     /**
  65.      * 需要显示的页码段的数量,当前 PAGE_SIZE 表示最多在前台页面上显示 10 个页码数
  66.      */
  67.     public final static int PAGE_SIZE = 10;
  68.     
  69.     /**
  70.      *    用户可以在 Action 中传入下面的参数,然后就可以直接到前台 jsp 页面中将这些参数
  71.      * 取出并加以显示出来。
  72.      * @param pageSize 每页需要显示物品的数量
  73.      * @param list 由后台传来用来显示的list
  74.      * @param request Action 里面的 request 参数
  75.      * @param response Action 里面的 response 参数
  76.      */
  77.     public static void pagingList(int pageSize, List<?> list,
  78.             HttpServletRequest request, HttpServletResponse response) {
  79.         // 总共有多少页
  80.         int totalPage;
  81.         // 当前页数
  82.         int curPage;
  83.         // 取得 Action 里传入的 list 的长度
  84.         int listSize = list.size();
  85.         // 如果这个 list 里面没有东西,则返回的所有的跟页面有关的参数都是 0 
  86.         if(listSize == 0) {
  87.             request.setAttribute("begin", 0);
  88.             request.setAttribute("end", 0);
  89.             request.setAttribute("list", 0);
  90.             request.setAttribute("curPage", 0);
  91.             request.setAttribute("totalPage", 0);
  92.             return;
  93.         }
  94.         // 计算总共有多少页
  95.         if(listSize % pageSize != 0) {
  96.             totalPage = listSize / pageSize + 1;
  97.         } else {
  98.             totalPage = listSize / pageSize;
  99.         }
  100.         // 从 request 参数中取出将要显示的页数
  101.         // request 参数是由前台页面传入 Action,再从 Action 中传过来的,
  102.         String _curPage = (String) request.getParameter("page");
  103.         
  104.         // 将从 request 中取出的数转换成整型,并保存在当前页数里面
  105.         if(null == _curPage) {
  106.             curPage = 1;
  107.         } else {
  108.             
  109.             // 如果转换过程出现异常,则指定 curPage 为 1
  110.             try {
  111.                 curPage = Integer.parseInt(_curPage);
  112.             } catch (Exception e) {
  113.                 curPage = 1;
  114.             }
  115.             
  116.             // 如果请求的参数比总页数大,则返回总页数,如果小于1,则返回1
  117.             if(curPage > totalPage) {
  118.                 curPage = totalPage;
  119.             } else if(curPage <= 0) {
  120.                 curPage = 1;
  121.             }
  122.         }
  123.         
  124.         // 由于这个分页是采用对一个 list 来进行分页,所以需要计算出分页展示的
  125.         // list 段的长度,然后再在前台页面上循环 这个长度段上的 list 
  126.         
  127.         // 定义每一页需要显示的 list 段根据当前页数变化来变化
  128.         int beginPoint = pageSize * curPage - pageSize;
  129.         int endPoint = beginPoint + pageSize;
  130.         // 如果结束的 list 位置比当前 list 的长度还大,则指定 endPage 为当前 list 长度
  131.         if(endPoint > listSize) {
  132.             endPoint = listSize;
  133.         }
  134.         
  135.         // 如果前台页面上需要显示部分页码
  136.         //(例如在页面右下角显示页码 ... 6 7 8 9 10 11 ... 54页)
  137.         // 以下就是用来计算部分页码的代码
  138.         
  139.         // 需要显示的页码段的第一页页码(如上的 6)
  140.         int pageFirst;
  141.         // 需要显示的页码段的最后一页页码(如上的 11)
  142.         int pageLast;
  143.         
  144.         // 让 curPage 显示的时候是居中显示
  145.         if(PAGE_SIZE % 2 == 0) {
  146.             pageFirst = curPage - PAGE_SIZE / 2 - 1;
  147.             pageLast = curPage + PAGE_SIZE / 2;
  148.         } else {
  149.             pageFirst = curPage - PAGE_SIZE / 2;
  150.             pageLast = curPage + PAGE_SIZE / 2;
  151.         }
  152.         
  153.         if(pageFirst <= 0) {
  154.             pageFirst = 1;
  155.         }
  156.         if(pageLast >= totalPage) {
  157.             pageLast = totalPage;
  158.         }
  159.         
  160.         // 设置 list 开始位置
  161.         request.setAttribute("beginPoint", beginPoint);
  162.         // 设置 list 结束位置
  163.         request.setAttribute("endPoint", endPoint - 1);
  164.         // 当前传入的 list
  165.         request.setAttribute("list", list);
  166.         // 将要显示的页面数
  167.         request.setAttribute("curPage", curPage);
  168.         // 总共的页面数
  169.         request.setAttribute("totalPage", totalPage);
  170.         // 显示的开始页码
  171.         request.setAttribute("pageFirst", pageFirst);
  172.         // 显示的结束页码
  173.         request.setAttribute("pageLast", pageLast);
  174.     }
  175. }
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册