图书分页
分页模块的分析

分页模型Page 的抽取(当前页数,总页数,总记录数,当前页数据,每页记录数)
/**
* Page 是分页的模型对象
* @param <T> 是具体的模块的javaBean 类
*/
public class Page<T> {
public static final Integer PAGE_SIZE = 4;
// 当前页码
private Integer pageNo;
// 总页码
private Integer pageTotal;
// 当前页显示数量
private Integer pageSize = PAGE_SIZE;
// 总记录数
private Integer pageTotalCount;
// 当前页数据
private List<T> items;
分页的实现
BookDao 代码:
@Override
public Integer queryForPageTotalCount() {
String sql = "select count(*) from t_book";
Number count = (Number) queryForSingleValue(sql);
return count.intValue();
}
@Override
public List<Book> queryForPageItems(int begin, int pageSize) {
String sql = "select `id` , `name` , `author` , `price` , `sales` , `stock` , `img_path` imgPath from t_book limit ?,?";
return querryForList(Book.class,sql,begin,pageSize);
}
BookService 代码:
@Override
public Page<Book> page(int pageNo, int pageSize) {
Page<Book> page = new Page<Book>();
page.setPageSize(pageSize);
//总记录数
Integer pageTotalCount = bookDao.queryForPageTotalCount();
page.setPageTotalCount(pageTotalCount);
//求总页码
Integer pageToal = pageTotalCount/pageSize;
if (pageTotalCount % pageSize>0){
pageToal+=1;
}
page.setPageTotal(pageToal);
page.setPageNo(pageNo);
int begin = (page.getPageNo()-1)*pageSize;
List<Book> items = bookDao.queryForPageItems(begin,pageSize);
page.setItems(items);
return page;
}
BookServlet 程序的代码:
/**
* 处理分页功能
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void page(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
//获取pageNo 和 pageSize
int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),1);
int pageSize = Page.PAGE_SIZE;
if(req.getParameter("pageSize")!=null){
pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
}
//查询获取新的page
Page<Book> page = bookService.page(pageNo,pageSize);
page.setUrl("manager/bookServlet?action=page");
// req.setAttribute();
req.setAttribute("page",page);
req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
}
定义分类条JSP
<%--
Created by IntelliJ IDEA.
User: Mr_xiaobai
Date: 2021/6/30
Time: 9:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div id="page_nav">
<%--大于首页,才显示--%>
<c:if test="${requestScope.page.pageNo>1}">
<a href="${requestScope.page.url}&pageNo=1">首页</a>
<a href="${requestScope.page.url}&pageNo=${requestScope.page.pageNo-1}">上一页</a>
</c:if>
<%--页码输出的开始--%>
<c:choose>
<%--情况1:如果总页码小于等于5的情况,页码的范围是:1-总页码--%>
<c:when test="${ requestScope.page.pageTotal <= 5 }">
<!--设置map,两个一个begin,一个end-->
<c:set var="begin" value="1"/>
<c:set var="end" value="${requestScope.page.pageTotal}"/>
</c:when>
<%--情况2:总页码大于5的情况--%>
<c:when test="${requestScope.page.pageTotal > 5}">
<c:choose>
<%--小情况1:当前页码为前面3个:1,2,3的情况,页码范围是:1-5.--%>
<c:when test="${requestScope.page.pageNo <= 3}">
<c:set var="begin" value="1"/>
<c:set var="end" value="5"/>
</c:when>
<%--小情况2:当前页码为最后3个,8,9,10,页码范围是:总页码减4 - 总页码--%>
<c:when test="${requestScope.page.pageNo > requestScope.page.pageTotal-3}">
<c:set var="begin" value="${requestScope.page.pageTotal-4}"/>
<c:set var="end" value="${requestScope.page.pageTotal}"/>
</c:when>
<%--小情况3:4,5,6,7,页码范围是:当前页码减2 - 当前页码加2--%>
<c:otherwise>
<c:set var="begin" value="${requestScope.page.pageNo-2}"/>
<c:set var="end" value="${requestScope.page.pageNo+2}"/>
</c:otherwise>
</c:choose>
</c:when>
</c:choose>
<!--显示出来-->
<c:forEach begin="${begin}" end="${end}" var="i">
<c:if test="${i == requestScope.page.pageNo}">
【${i}】
</c:if>
<c:if test="${i != requestScope.page.pageNo}">
<a href="${requestScope.page.url}&pageNo=${i}">${i}</a>
</c:if>
</c:forEach>
<%--页码输出的结束--%>
<%-- 如果已经 是最后一页,则不显示下一页,末页 --%>
<c:if test="${requestScope.page.pageNo < requestScope.page.pageTotal}">
<a href="${requestScope.page.url}&pageNo=${requestScope.page.pageNo+1}">下一页</a>
<a href="${requestScope.page.url}&pageNo=${requestScope.page.pageTotal}">末页</a>
</c:if>
<%--跳转--%>
共${ requestScope.page.pageTotal }页,${ requestScope.page.pageTotalCount }条记录
到第<input value="${requestScope.page.pageNo}" name="pn" id="pn_input"/>页
<input id="searchPageBtn" type="button" value="确定">
</div>
<script type="text/javascript">
//给页面跳转添加监听事件
$(function () {
$("#searchPageBtn").click(function () {
//跳转到指定页面
var pageNo = $("#pn_input").val();
location.href="${pageScope.basePath}${requestScope.page.url}&pageNo=" + pageNo;
});
})
</script>
<%--分页条的结束--%>
版权声明:本文为Mr_tianyanxiaobai原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。