[转帖]java分页技术_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3207 | 回复: 0   主题: [转帖]java分页技术        下一篇 
只是很无聊
注册用户
等级:中尉
经验:440
发帖:33
精华:0
注册:2013-6-18
状态:离线
发送短消息息给只是很无聊 加好友    发送短消息息给只是很无聊 发消息
发表于: IP:您无权察看 2013-6-19 11:15:37 | [全部帖] [楼主帖] 楼主

Java代码  
北京联动北方科技有限公司

  1. package cn.pdsu; 
  2. /** 
  3.  * 类说明:学生信息封装 
  4.  * 
  5.  * @author 作者: LiuJunGuang 
  6.  * @version 创建时间:2011-11-9 下午02:30:50 
  7.  */ 
  8. public class Student { 
  9.        private int id; 
  10.        private String name; 
  11.        private String sex; 
  12.        private String resume; 
  13.       
  14.        public Student(int id, String name, String sex, String resume) { 
  15.              super(); 
  16.              this.id = id; 
  17.              this.name = name; 
  18.              this.sex = sex; 
  19.              this.resume = resume; 
  20.        } 
  21.       
  22.        public Student() { 
  23.              super(); 
  24.        } 
  25.       
  26.        public int getId() { 
  27.              return id; 
  28.        } 
  29.       
  30.        public void setId(int id) { 
  31.              this.id = id; 
  32.        } 
  33.       
  34.        public String getName() { 
  35.              return name; 
  36.        } 
  37.       
  38.        public void setName(String name) { 
  39.              this.name = name; 
  40.        } 
  41.       
  42.        public String getSex() { 
  43.              return sex; 
  44.        } 
  45.       
  46.        public void setSex(String sex) { 
  47.              this.sex = sex; 
  48.        } 
  49.       
  50.        public String getResume() { 
  51.              return resume; 
  52.        } 
  53.       
  54.        public void setResume(String resume) { 
  55.              this.resume = resume; 
  56.        } 
  57.       
  58.        @Override 
  59.        public String toString() { 
  60.              return "Student [id=" + id + ", name=" + name + ", sex=" + sex 
  61.              + ", resume=" + resume + "]"; 
  62.        } 
  63.       



Java代码  
北京联动北方科技有限公司

  1. package cn.pdsu; 
  2. import java.util.LinkedList; 
  3. import java.util.List; 
  4. /** 
  5.  * 类说明:数据的封装 
  6.  * 
  7.  * @author 作者: LiuJunGuang 
  8.  * @version 创建时间:2011-11-9 下午02:28:27 
  9.  */ 
  10. public class DataSourceDAO { 
  11.        private static List<Student> list = new LinkedList<Student>(); 
  12.        static { 
  13.              for (int i = 0; i < 20; i++) { 
  14.                    list.add(new Student(i, "张山" + i, "男", "学生" + i)); 
  15.              } 
  16.        } 
  17.       
  18.        /** 
  19.        * 模拟数据库中分页查询 
  20.        * 
  21.        * @param startIndex 
  22.        * 要查询的开始索引 
  23.        * @param count 
  24.        * 查询的总记录数 
  25.        * @return 查询出的学生记录 
  26.        */ 
  27.        public List<Student> findStudent(int startIndex, int count) { 
  28.              int num = count + startIndex; 
  29.              if (num > list.size()) 
  30.              num = list.size(); 
  31.              return list.subList(startIndex, num); 
  32.        } 
  33.       
  34.        /** 
  35.        * 模拟数据库中查询总记录数 
  36.        * 
  37.        * @return 总的记录数 
  38.        */ 
  39.        public int count() { 
  40.              return list.size(); 
  41.        } 



Java代码  
北京联动北方科技有限公司

  1. package cn.pdsu; 
  2. import java.io.IOException; 
  3. import java.util.List; 
  4. import javax.servlet.ServletException; 
  5. import javax.servlet.http.HttpServlet; 
  6. import javax.servlet.http.HttpServletRequest; 
  7. import javax.servlet.http.HttpServletResponse; 
  8. /** 
  9.  * 类说明:分页控制器 
  10.  * 
  11.  * @author 作者: LiuJunGuang 
  12.  * @version 创建时间:2011-11-9 下午03:47:59 
  13.  */ 
  14. public class ControlServlet extends HttpServlet { 
  15.       
  16.        public ControlServlet() { 
  17.        } 
  18.       
  19.        public void doGet(HttpServletRequest request, HttpServletResponse response) 
  20.        throws ServletException, IOException { 
  21.              DataSourceDAO dataSourceDAO = new DataSourceDAO(); 
  22.              int countRecord = dataSourceDAO.count(); 
  23.              request.setCharacterEncoding("UTF-8"); 
  24.              // 得到当前页 
  25.              String currentPage = request.getParameter("page"); 
  26.              if (currentPage == null) 
  27.              currentPage = "1"; 
  28.              int cp = Integer.parseInt(currentPage);// 当前页码 
  29.              Page<Student> p = new Page<Student>(cp, countRecord); 
  30.              // 数据库中的查询结果 
  31.              List<Student> list = dataSourceDAO.findStudent(p.getStartIndex(), 
  32.              p.getOnePageCount()); 
  33.              p.setList(list);// 设置结果集 
  34.              // 设置页码显示类型 
  35.              PageModel<Student> pageModel = new PageModel<Student>(p, 
  36.              "servlet/ControlServlet", PageModel.NUM_MODEL); 
  37.              request.setAttribute("pageObject", pageModel); 
  38.              getServletContext().getRequestDispatcher("/show.jsp").forward(request, 
  39.              response); 
  40.             
  41.        } 
  42.       
  43.        public void doPost(HttpServletRequest request, HttpServletResponse response) 
  44.        throws ServletException, IOException { 
  45.              doGet(request, response); 
  46.        } 
  47.       



Java代码  
北京联动北方科技有限公司

  1. package cn.pdsu; 
  2. import java.util.List; 
  3. /** 
  4.  * 类说明:分页方法封装 
  5.  * 
  6.  * @author 作者: LiuJunGuang 
  7.  * @version 创建时间:2011-11-9 下午02:22:35 
  8.  */ 
  9. public class Page<T> { 
  10.        /** 
  11.        * 总页数,通过总记录数和每页显示记录条数计算获得 
  12.        */ 
  13.        private int countPage; 
  14.        /** 
  15.        * 总记录数 
  16.        */ 
  17.        private int countRecord; 
  18.        /** 
  19.        * 当前页,默认是第一页 
  20.        */ 
  21.        private int currentPage = 1; 
  22.        /** 
  23.        * 结果列表 
  24.        */ 
  25.        private List<T> list = null; 
  26.        /** 
  27.        * 每页显示记录条数 ,默认是每页显示13条记录 
  28.        */ 
  29.        private int onePageCount = 3; 
  30.        /** 
  31.        * 开始索引,通过当前页和每页显示记录条数计算获得 
  32.        */ 
  33.        private int startIndex; 
  34.       
  35.        public Page() { 
  36.        } 
  37.       
  38.        /** 
  39.        * 两个参数的构造方法,调用该构造方法需要另行设置结果list 
  40.        * 
  41.        * @param currentPage 
  42.        * 当前页 
  43.        * @param countRecord 
  44.        * 总页数 
  45.        */ 
  46.        public Page(int currentPage, int countRecord) { 
  47.              this.currentPage = currentPage; 
  48.              this.countRecord = countRecord; 
  49.              calculate(); 
  50.        } 
  51.       
  52.        /** 
  53.        * 能够设置一页显示多少条记录的构造方法 
  54.        * 
  55.        * @param currentPage 
  56.        * 当前页 
  57.        * @param countRecord 
  58.        * 总记录数 
  59.        * @param onePageCount 
  60.        * 每页最多显示的记录条数 
  61.        */ 
  62.        public Page(int currentPage, int countRecord, int onePageCount) { 
  63.              super(); 
  64.              this.countRecord = countRecord; 
  65.              this.currentPage = currentPage; 
  66.              this.onePageCount = onePageCount; 
  67.              calculate(); 
  68.        } 
  69.       
  70.        /** 
  71.        * 计算开始索引和总页数 
  72.        */ 
  73.        private void calculate() { 
  74.              // 计算开始索引 
  75.              this.startIndex = (currentPage - 1) * onePageCount; 
  76.              // 计算总页数 
  77.              this.countPage = (countRecord % onePageCount == 0) ? (countRecord / onePageCount) 
  78.              : (countRecord / onePageCount + 1); 
  79.        } 
  80.       
  81.        public int getCountPage() { 
  82.              return countPage; 
  83.        } 
  84.       
  85.        public int getCountRecord() { 
  86.              return countRecord; 
  87.        } 
  88.       
  89.        public int getCurrentPage() { 
  90.              return currentPage; 
  91.        } 
  92.       
  93.        public List<T> getList() { 
  94.              return list; 
  95.        } 
  96.       
  97.        public int getOnePageCount() { 
  98.              return onePageCount; 
  99.        } 
  100.       
  101.        public int getStartIndex() { 
  102.              return startIndex; 
  103.        } 
  104.       
  105.        public void setCountPage(int countPage) { 
  106.              this.countPage = countPage; 
  107.        } 
  108.       
  109.        public void setCountRecord(int countRecord) { 
  110.              this.countRecord = countRecord; 
  111.        } 
  112.       
  113.        public void setCurrentPage(int currentPage) { 
  114.              this.currentPage = currentPage; 
  115.        } 
  116.       
  117.        public void setList(List<T> list) { 
  118.              this.list = list; 
  119.        } 
  120.       
  121.        public void setOnePageCount(int onePageCount) { 
  122.              this.onePageCount = onePageCount; 
  123.        } 
  124.       
  125.        public void setStartIndex(int startIndex) { 
  126.              this.startIndex = startIndex; 
  127.        } 



Java代码  
北京联动北方科技有限公司

  1. package cn.pdsu; 
  2. /** 
  3.  * 开始页,结束页封装 
  4.  * 
  5.  * @author 作者:user 
  6.  * @version 创建时间:2011-7-19 上午03:08:25 
  7.  */ 
  8. public class PageIndex { 
  9.        /** 
  10.        * 结束页 
  11.        */ 
  12.        private int endIndex; 
  13.       
  14.        /** 
  15.        * 开始页 
  16.        */ 
  17.        private int startIndex; 
  18.       
  19.        /** 
  20.        * 计算开始页和结束页 
  21.        * 
  22.        * @param viewpagecount 
  23.        * 页面中要显示的页面个数 
  24.        * @param currentPage 
  25.        * 当前页 
  26.        * @param totalpage 
  27.        * 总页面数 
  28.        * @return PageIndex 记录开始页(startindex)和结束页(endindex) 
  29.        */ 
  30.        public static PageIndex getPageIndex(int viewpagecount, int currentPage, 
  31.        int totalpage) { 
  32.              int startpage = currentPage 
  33.              - (viewpagecount % 2 == 0 ? viewpagecount / 2 - 1 
  34.              : viewpagecount / 2); 
  35.              int endpage = currentPage + viewpagecount / 2; 
  36.              if (startpage < 1) { 
  37.                    startpage = 1; 
  38.                    if (totalpage >= viewpagecount) 
  39.                    endpage = viewpagecount; 
  40.                    else 
  41.                    endpage = totalpage; 
  42.              } 
  43.              if (endpage > totalpage) { 
  44.                    endpage = totalpage; 
  45.                    if ((endpage - viewpagecount) > 0) 
  46.                    startpage = endpage - viewpagecount + 1; 
  47.                    else 
  48.                    startpage = 1; 
  49.              } 
  50.              return new PageIndex(startpage, endpage); 
  51.        } 
  52.       
  53.        public PageIndex(int startIndex, int endIndex) { 
  54.              this.startIndex = startIndex; 
  55.              this.endIndex = endIndex; 
  56.        } 
  57.       
  58.        public int getEndIndex() { 
  59.              return endIndex; 
  60.        } 
  61.       
  62.        public void setEndIndex(int endIndex) { 
  63.              this.endIndex = endIndex; 
  64.        } 
  65.       
  66.        public int getStartIndex() { 
  67.              return startIndex; 
  68.        } 
  69.       
  70.        public void setStartIndex(int startIndex) { 
  71.              this.startIndex = startIndex; 
  72.        } 
  73.       



Java代码  
北京联动北方科技有限公司

  1. package cn.pdsu; 
  2. import java.util.List; 
  3. /** 
  4.  * 类说明:页码显示效果类 。1:TextModel “第一页 上一页 下一页 最后一页”;2:NumModel “第一页 2 3 4 最后一页”; 
  5.  * 
  6.  * @author 作者: LiuJunGuang 
  7.  * @version 创建时间:2011-11-9 下午04:09:22 
  8.  */ 
  9. public class PageModel<T> { 
  10.        /** 
  11.        * 文本类型:形如:“第一页 上一页 下一页 最后一页” 
  12.        */ 
  13.        public static final int TEXT_MODEL = 1; 
  14.       
  15.        /** 
  16.        * 数字类型:形如:NumModel “第一页 2 3 4 最后一页” 
  17.        */ 
  18.        public static final int NUM_MODEL = 2; 
  19.        /** 
  20.        * 页码显示模型 
  21.        */ 
  22.        private int model = 1; 
  23.        /** 
  24.        * 页码连接URL,不需要添加页码参数 
  25.        */ 
  26.        private String url; 
  27.        /** 
  28.        * 页码信息的封装 
  29.        */ 
  30.        private Page page = null; 
  31.        /** 
  32.        * 模型类型的页码 
  33.        */ 
  34.        private StringBuffer strHtml = null; 
  35.       
  36.        /** 
  37.        * 数字类型的页码模型中间数字显示个数,例如:第一页 1 2 3 4 5 最后一页,numCount = 5; 默认显示 5个数字 
  38.        */ 
  39.        private int numCount = 5; 
  40.       
  41.        /** 
  42.        * 页码的模式默认的文字类型的样式 
  43.        * 
  44.        * @param page 
  45.        * 页面信息 
  46.        * @param url 
  47.        * 页面的url地址 
  48.        */ 
  49.        public PageModel(Page page, String url) { 
  50.              super(); 
  51.              this.url = url; 
  52.              this.page = page; 
  53.        } 
  54.       
  55.        /** 
  56.        * 页码的模型 
  57.        * 
  58.        * @param page 
  59.        * 页面信息 
  60.        * @param url 
  61.        * 页面的url地址 
  62.        * @param model 
  63.        * 页码的显示样式 
  64.        */ 
  65.        public PageModel(Page page, String url, int model) { 
  66.              super(); 
  67.              this.model = model; 
  68.              this.url = url; 
  69.              this.page = page; 
  70.        } 
  71.       
  72.        /** 
  73.        * 页码的模型 
  74.        * 
  75.        * @param page 
  76.        * 页面信息 
  77.        * @param url 
  78.        * 页面的url地址 
  79.        * @param model 
  80.        * 页码的显示样式 
  81.        * @param numCount 
  82.        * 数字类型的页码,共显示的个数 
  83.        */ 
  84.        public PageModel(Page page, String url, int model, int numCount) { 
  85.              super(); 
  86.              this.model = model; 
  87.              this.url = url; 
  88.              this.page = page; 
  89.              this.numCount = numCount; 
  90.        } 
  91.       
  92.        /** 
  93.        * 返回页面的模型 
  94.        * 
  95.        * @return 
  96.        */ 
  97.        public String getPageModel() { 
  98.              // 组装页码模型 
  99.              createURL(); 
  100.              return createModel(); 
  101.        } 
  102.       
  103.        /** 
  104.        * 构建URL 
  105.        */ 
  106.        private void createURL() { 
  107.              url = url.contains("?") ? url + "&page=" : url + "?page="; 
  108.        } 
  109.       
  110.        /** 
  111.        * 组装页码模型 
  112.        */ 
  113.        private String createModel() { 
  114.              strHtml = new StringBuffer(); 
  115.              switch (model) { 
  116.                    case TEXT_MODEL:// 文本模型 
  117.                    buildTextModel(); 
  118.                    break; 
  119.                    case NUM_MODEL:// 数字模型 
  120.                    buildNumModel(); 
  121.                    break; 
  122.                    default:// 文本模型 
  123.                    buildTextModel(); 
  124.                    break; 
  125.              } 
  126.              return strHtml.toString(); 
  127.        } 
  128.       
  129.        /** 
  130.        * 组件���字类型的页码模型 
  131.        */ 
  132.        private void buildNumModel() { 
  133.              int currentPage = page.getCurrentPage(); 
  134.              int countPage = page.getCountPage(); 
  135.              strHtml.append( 
  136.              "<table width='100%' border='0' cellspacing='0' cellpadding='0'>") 
  137.              .append("<tr><td height='24' align='center'>"); 
  138.              // 构造格式:第一页 1 2 3 4 5 最后一页 
  139.              PageIndex pageIndex = PageIndex.getPageIndex(numCount, currentPage, 
  140.              countPage); 
  141.              // 不是第一页时,显示首页 
  142.              if (currentPage > 1) { 
  143.                    strHtml.append("<a href='").append(url) 
  144.                    .append("1'>首页</a>&nbsp;&nbsp;"); 
  145.              } 
  146.              if (currentPage <= countPage) { 
  147.                    for (int i = pageIndex.getStartIndex(); i <= pageIndex 
  148.                    .getEndIndex(); i++) { 
  149.                          // 当前页加粗 
  150.                          if (currentPage == i) { 
  151.                                strHtml.append("<b>").append(i).append("</b>&nbsp;&nbsp;"); 
  152.                          } else { 
  153.                          strHtml.append("<a href='").append(url).append(i) 
  154.                          .append("'>").append(i).append("</a>&nbsp;&nbsp;"); 
  155.                    } 
  156.              } 
  157.              // 不是最后一页显示末页 
  158.              if (currentPage < countPage) { 
  159.                    strHtml.append("<a href='").append(url).append(countPage) 
  160.                    .append("'>末页</a>"); 
  161.              } 
  162.        } 
  163.        strHtml.append("</td></tr></table>"); 
  164.  } 
  165.  /** 
  166.  * 组件文本类型的页码 
  167.  */ 
  168.  private void buildTextModel() { 
  169.        int currentPage = page.getCurrentPage(); 
  170.        int countPage = page.getCountPage(); 
  171.        strHtml.append( 
  172.        "<table width='100%' border='0' cellspacing='0' cellpadding='0'>") 
  173.        .append("<tr> <td height='24' align='center'>当前页数:[") 
  174.        .append(currentPage).append("/").append(countPage) 
  175.        .append("]&nbsp;&nbsp;"); 
  176.        if (currentPage > 1) { 
  177.              strHtml.append("<a href='").append(url).append("1'>首页</a>") 
  178.              .append("&nbsp;&nbsp;<a href='").append(url) 
  179.              .append(currentPage - 1).append("'>上一页</a>"); 
  180.        } 
  181.        if (currentPage < countPage) { 
  182.              strHtml.append("&nbsp;&nbsp;<a href='").append(url) 
  183.              .append(currentPage + 1) 
  184.              .append("'>下一页</a>&nbsp;&nbsp;<a href='").append(url) 
  185.              .append(countPage).append("'>末页</a>"); 
  186.        } 
  187.        strHtml.append("</td></tr></table>"); 
  188.  } 
  189.  public List<T> getList() { 
  190.        return page.getList(); 
  191.  } 



Html代码  
北京联动北方科技有限公司

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> 
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
  3. <% 
  4. String path = request.getContextPath(); 
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
  6. %> 
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  8. <html> 
  9.  <head> 
  10.  <base href="<%=basePath%>"> 
  11.  <title>分页技术</title> 
  12.  </head> 
  13.  <body> 
  14.  <table border="1" width="50%"> 
  15.  <tr><th>ID</th><th>姓名</th><th>性别</th><th>简介</th></tr> 
  16.  <c:forEach items="${ pageObject.list}" var="student" > 
  17.  <tr> 
  18.  <td>${student.id }</td> 
  19.  <td>${student.name }</td> 
  20.  <td>${student.sex }</td> 
  21.  <td>${student.resume }</td> 
  22.  </tr> 
  23.  </c:forEach> 
  24.  </table> 
  25.  ${ pageObject.pageModel} 
  26.  </body> 
  27. </html> 



运行结果图:
北京联动北方科技有限公司

北京联动北方科技有限公司

北京联动北方科技有限公司

北京联动北方科技有限公司

北京联动北方科技有限公司

北京联动北方科技有限公司

北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论