分页的实现
步骤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; // 当前页码,默认值为1
private int pageSize = 5; // 每页显示的记录数,默认值为5
private 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和HttpServletResponse
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// 设置字符编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 1. 获取当前页码参数
String curPageStr = request.getParameter("curPage");
int curPage = 1; // 默认值为1
if (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>

浙公网安备 33010602011771号