计算机系统应用教程网站

网站首页 > 技术文章 正文

Javaweb中JSP分页的实现 javaweb实现分页功能

btikc 2024-10-16 08:21:11 技术文章 4 ℃ 0 评论

一、实体类的设计

二、分页工具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>

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表