当前位置: 首页 > news >正文

分页的实现

步骤1:创建分页工具类(PageVo)

分页工具类是实现分页功能的核心,用于封装分页相关的属性和逻辑。

创建文件:src/cn/wolfcode/PageVo.java

package cn.wolfcode;import lombok.Data;
import java.util.ArrayList;
import java.util.List;@Data
public class PageVo<E> {private int curPage = 1;  // 当前页码,默认值为1private int pageSize = 5;  // 每页显示的记录数,默认值为5private int totalRows;     // 总记录数private int totalPage;     // 总页数private List<E> data;      // 存储分页数据的集合// 设置数据并触发分页逻辑public void setData(List<E> data) {this.totalRows = data.size();  // 计算总记录数this.totalPage = (totalRows + pageSize - 1) / pageSize;  // 计算总页数// 确保当前页码在有效范围内if (curPage < 1) {curPage = 1;}if (curPage > totalPage) {curPage = totalPage;}// 截取当前页的数据List<E> smallList = new ArrayList<>();for (int i = (curPage - 1) * pageSize; i < curPage * pageSize && i < totalRows; i++) {smallList.add(data.get(i));}this.data = smallList;}
}

步骤2:服务层封装分页数据

服务层负责调用数据访问层获取数据,并封装到分页对象中。

创建/修改文件:src/cn/wolfcode/service/impl/BookServiceImpl.java

@Override
public PageVo<Book> selectAllBypage(int curPage) {// 1. 查询所有图书数据List<Book> bookList = bookMapper.selectAll();// 2. 封装到PageVo对象PageVo<Book> bookPageVo = new PageVo<>();bookPageVo.setCurPage(curPage);  // 设置当前页码bookPageVo.setData(bookList);    // 触发分页逻辑return bookPageVo;  // 返回分页对象
}

步骤3:控制器层处理分页请求

控制器层接收用户请求中的分页参数,调用服务层获取分页数据,并转发到视图。

创建/修改文件:src/cn/wolfcode/servlet/BookServlet.java

@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// 转换为HttpServletRequest和HttpServletResponseHttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;// 设置字符编码request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");// 1. 获取当前页码参数String curPageStr = request.getParameter("curPage");int curPage = 1;  // 默认值为1if (curPageStr != null && !"".equals(curPageStr.trim())) {curPage = Integer.valueOf(curPageStr);}// 2. 调用服务层方法获取分页数据PageVo<Book> books = bookService.selectAllBypage(curPage);// 3. 将分页数据设置到请求属性中request.setAttribute("books", books);// 4. 转发到JSP视图request.getRequestDispatcher("/WEB-INF/jsp/book/bookList.jsp").forward(request, response);
}

步骤4:创建/修改JSP视图

JSP视图负责展示分页数据和分页导航链接。

创建/修改文件:web/WEB-INF/jsp/book/bookList.jsp

<%@ page import="java.util.List" %>
<%@ page import="cn.wolfcode.domain.Book" %>
<%@ page import="cn.wolfcode.PageVo" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>图书列表</title><script type="text/javascript">// 首页function first() {document.getElementById("curPage").value = 1;document.getElementById("f1").submit();}// 上一页function pre() {var curPage = parseInt(document.getElementById("curPage").value);if (curPage > 1) {document.getElementById("curPage").value = curPage - 1;document.getElementById("f1").submit();}}// 下一页function next() {var curPage = parseInt(document.getElementById("curPage").value);var totalPage = parseInt(document.getElementById("totalPage").value);if (curPage < totalPage) {document.getElementById("curPage").value = curPage + 1;document.getElementById("f1").submit();}}// 尾页function last() {var totalPage = parseInt(document.getElementById("totalPage").value);document.getElementById("curPage").value = totalPage;document.getElementById("f1").submit();}</script>
</head>
<body>
<form action="/books" method="post" id="f1"><table align="center" width="80%"><tr align="center"><th>编号</th><th>书名</th><th>作者</th><th>售价</th><th>进价</th><th>分类</th></tr><%-- 显示图书列表 --%><% PageVo<Book> books = (PageVo<Book>) request.getAttribute("books");for (Book book : books.getData()) {%><tr align="center"><td><%= book.getId() %></td><td><%= book.getBname() %></td><td><%= book.getAuthor() %></td><td><%= book.getSalePrice() %></td><td><%= book.getCostPrice() %></td><td><%= book.getClassify() == 1 ? "国外文学" : "国内文学" %></td></tr><% }%><%-- 分页导航 --%><tr align="center"><td colspan="6"><a href="#" onclick="first()">首页</a> | <a href="#" onclick="pre()">上一页</a> | <a href="#" onclick="next()">下一页</a> | <a href="#" onclick="last()">尾页</a><span>第<%= books.getCurPage() %>页,共<%= books.getTotalPage() %>页</span></td></tr><%-- 隐藏字段 --%><input type="hidden" name="curPage" id="curPage" value="<%= books.getCurPage() %>"><input type="hidden" name="totalPage" id="totalPage" value="<%= books.getTotalPage() %>"></table>
</form>
</body>
</html>
http://www.jsqmd.com/news/309682/

相关文章:

  • 计算机毕业设计springboot学科竞赛活动报名系统 基于Spring Boot的学科竞赛活动报名与管理系统设计 Spring Boot框架下的学科竞赛活动在线报名平台开发
  • 2026制造业中央空调回收高效服务推荐榜
  • 宏智树AI:终结课程论文“凑字焦虑”,从合格到高分的底层逻辑
  • 2026/1/27
  • 计算机Java毕设实战-基于java+springboot的流浪猫狗救助系统基于springboot的宠物领养救助系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 线段树区间加维护前缀最值
  • 写论文软件哪个好?宏智树 AI 实测封神!从选题到答辩的学术避坑指南
  • pythn中什么是命名空间?什么是作用域?他们之间有什么区别和联系?
  • 9 款 AI 写论文哪个好?宏智树 AI 实测封神!从选题到定稿全靠 “真实感” 取胜
  • 5款AI写论文哪个好?宏智树AI凭真实文献与合规图表碾压全场
  • 宏智树 AI:ChatGPT 学术版驱动,重新定义学术写作效率与品质
  • 【路由器-AP、DHCP、ARP、广播帧、交换机、信道】-初级知识串联(五)之路由器与交换机的关系
  • Java毕设项目:基于springboot的敬老院管理系统(源码+文档,讲解、调试运行,定制等)
  • 毕设开源 基于单片机的红外热视仪(源码+硬件+论文)
  • 字符串不是字符串——聊聊「字符串的编码与解码(Encode and Decode Strings)」这道被严重低估的算法题
  • 不靠人熬夜的运维,才叫真自动化——聊聊智能运维是怎么一步步把 IT 自动化“推上正轨”的
  • 《eBay 买家号注册与维护实操指南(新手必看)》
  • Flutter viewpage嵌套tabview的滑动联动解决方法
  • 提升50%效率:提示工程架构师的社交网络内容生产自动化方案
  • 学长亲荐!8款AI论文工具测评:研究生开题报告神器大公开
  • 前端怎么知道用户勾选了哪几行?
  • 题解:QOJ8692 Yet Another Convolution
  • 学习Java的一天
  • Neo4j 在大数据领域的安全防护机制解读
  • 2026质量验厂咨询优质机构推荐榜:bsci验厂咨询、costco验厂咨询、disney验厂咨询、fsc认证咨询选择指南
  • 华为OD机考双机位C卷- 不含101的数(Java Python JS C/C++ GO )
  • 创客匠人洞察:信任重构——AI智能体在知识消费决策中的隐性价值
  • 创客匠人视角:小微创作者的破局点——轻量化AI智能体与知识服务的“最小可行闭环”
  • 华为OD机考双机位C卷 - 仿LISP运算 (Java Python JS C/C++ GO )
  • 创客匠人深度观察:AI智能体如何重塑知识变现的底层逻辑