一、实体类的设计
二、分页工具PageBean.java
private int currentPage = 1; // 当前页, 默认显示第一页 private int pageCount = 8; // 每页显示的行数(查询返回的行数), 默认每页显示4行 private int totalCount; // 总记录数 private int totalPage; // 总页数 = 总记录数 / 每页显示的行数 (+ 1) private List<T> pageData; // 分页查询到的数据
三、dao数据访问:获取总记录数、分页显示数据
// 创建QueryRunner工具 private QueryRunner qr = JdbcUtils.getQueryRuner(); // 得到总记录数 public int getTotalCount() { String sql = \"大众select count() from grjbxx\"大众; try { // 实行查询, 返回结果的第一行的第一列 Long count = qr.query(sql, new ScalarHandler<Long>()); return count.intValue(); } catch (Exception e) { throw new RuntimeException(e); } } // 分页显示全部数据 public void listGrjbxxAll(PageBean<Grjbxx> pb) { // 查询总记录数; 设置到pb工具中 int totalCount = this.getTotalCount(); pb.setTotalCount(totalCount); / 问题: jsp页面,如果当前页为首页,再点击上一页报错!
如果当前页为末页,再点下一页显示有问题!
办理: 1. 如果当前页 <= 0; 当前页设置当前页为1; 2. 如果当前页 > 最大页数; 当前页设置为最大页数 / // 判断 if (pb.getCurrentPage() <= 0) { pb.setCurrentPage(1); // 把当前页设置为1 } else if (pb.getCurrentPage() > pb.getTotalPage()) { pb.setCurrentPage(pb.getTotalPage()); // 把当前页设置为最大页数 } // 1. 获取当前页: 打算查询的起始行、返回的行数 int currentPage = pb.getCurrentPage(); int index = (currentPage - 1) pb.getPageCount(); // 查询的起始行 int count = pb.getPageCount(); // 查询返回的行数 // 3. 分页查询数据; 把查询到的数据设置到pb工具中 String sql = \"大众select from grjbxx limit ?,?\"大众; try { // 根据当前页,查询当前页数据(一页数据) List<Grjbxx> pageData = qr.query(sql, new BeanListHandler<Grjbxx>(Grjbxx.class), index, count); // 设置到pb工具中 pb.setPageData(pageData); } catch (Exception e) { throw new RuntimeException(e); } }
四、servlet调用dao的方法,跳转到JSP页面显示
try { // 1. 获取“当前页”参数; (第一次访问当前页为null) String currPage = request.getParameter(\"大众currentPage\"大众); // 判断 if (currPage == null || \"大众\"大众.equals(currPage.trim())) { currPage = \"大众1\公众; // 第一次访问,设置当前页为1; } // 转换 int currentPage = Integer.parseInt(currPage); // 2. 创建PageBean工具,设置当前页参数; 传入service方法参数 PageBean<Grjbxx> pageBean = new PageBean<Grjbxx>(); pageBean.setCurrentPage(currentPage); // 3. 调用service // 【pageBean已经被dao添补了数据】 GrjbxxDao grjbxxdao = new GrjbxxDao(); grjbxxdao.listGrjbxxAll(pageBean); // 4. 保存pageBean工具,到request域中 request.setAttribute(\公众pageBean\"大众, pageBean); // 5. 跳转 uri = \"大众/listgrjbxx.jsp\"大众; } catch (Exception e) { e.printStackTrace(); // 测试利用 // 涌现缺点,跳转到缺点页面;给用户友好提示 uri = \公众/error/error.jsp\公众; } request.getRequestDispatcher(uri).forward(request, response);
五、JSP页面
<tbody> <c:choose> <c:when test=\公众${not empty requestScope.pageBean.pageData}\公众> <c:forEach items=\公众${requestScope.pageBean.pageData}\"大众 var=\"大众grjbxx\"大众 varStatus=\公众varSta\"大众> <tr style=\"大众text-align: center;\公众> <!-- 数据居中 --> <td>${(pageBean.currentPage-1)pageBean.pageCount+varSta.index+1}</td> <!-- 序号=(当前页码-1)每页条数+index+1 --> <td>${grjbxx.sfzh}</td> <td>${grjbxx.xm}</td> <td>${grjbxx.xb }</td> <td><a href=\"大众${pageContext.request.contextPath }/QueryTxlServlet?id=${grjbxx.ryid}\公众>修正</a> <a href=\公众${pageContext.request.contextPath }/DelTxlServlet?id=${grjbxx.ryid}\公众>删除</a></td> </tr> </c:forEach> </c:when> <c:otherwise> <tr> <td colspan=\公众4\"大众>对不起,没有你要找的数据</td> </tr> </c:otherwise> </c:choose> <tr> <td colspan=\公众5\"大众 align=\公众center\公众> 当前${requestScope.pageBean.currentPage }/${requestScope.pageBean.totalPage }页 <a href=\"大众?currentPage=1\"大众>首页</a> <a href=\公众?currentPage=${requestScope.pageBean.currentPage-1}\"大众>上一页 </a> <a href=\公众?currentPage=${requestScope.pageBean.currentPage+1}\"大众>下一页 </a> <a href=\"大众?currentPage=${requestScope.pageBean.totalPage}\公众>末页</a> </td> </tr> </tbody>