《尚硅谷》JavaWeb课程书城项目笔记——第五阶段(2):图书模块的分页显示

目录

1、分页的初步实现

2、首页、末页、上一页、下一页的设置

3、跳转页面功能的实现

4、页码的输出实现


1、分页的初步实现

Page类的编写

package pojo;

import java.util.List;

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;

    public Integer getPageNo() {
        return pageNo;
    }

    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }

    public Integer getPageTotal() {
        return pageTotal;
    }

    public void setPageTotal(Integer pageTotal) {
        this.pageTotal = pageTotal;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getPageTotalCount() {
        return pageTotalCount;
    }

    public void setPageTotalCount(Integer pageTotalCount) {
        this.pageTotalCount = pageTotalCount;
    }

    public List<T> getItems() {
        return items;
    }

    public void setItems(List<T> items) {
        this.items = items;
    }

    @Override
    public String toString() {
        return "Page{" +
                "pageNo=" + pageNo +
                ", pageTotal=" + pageTotal +
                ", pageSize=" + pageSize +
                ", pageTotalCount=" + pageTotalCount +
                ", items=" + items +
                '}';
    }
}

在BookDao接口与实现类中增加查询总记录、查询指定页面所有数据的方法

public Integer queryForPageTotalCount();

public List<Book> queryForPageItems(int begin, int pageSize);
    @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 ?,?";
        List<Book> books = queryForList(Book.class, sql, begin, pageSize);
        return books;
    }

在BookService接口与类中添加page业务

Page<Book> page(int pageNo, int pageSize);
    @Override
    public Page<Book> page(int pageNo, int pageSize) {
        Page<Book> page = new Page<Book>();

        page.setPageNo(pageNo);

        page.setPageSize(pageSize);

        // 1 求总的记录数
        Integer pageTotalCount = bookDao.queryForPageTotalCount();
        page.setPageTotalCount(pageTotalCount);

        // 2 求总的页码
        Integer pageTotal = pageTotalCount / pageSize;
        if (pageTotalCount % pageSize > 0) {
            pageTotal++;
        }
        page.setPageTotal(pageTotal);

        // 3 求当前页数据
        // 设置开始索引位置
        int begin = (pageNo - 1) * Page.PAGE_SIZE;
        List<Book> items = bookDao.queryForPageItems(begin,pageSize);
        page.setItems(items);

        return page;
    }

在BookServlet类中添加page功能

protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 1 获取请求的参数pageNo和pageSize
        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),1);
        int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);

        // 2 调用bookService.page(int pageNo,int pageSize)==Page,获取Page对象
        Page<Book> page = bookService.page(pageNo,pageSize);

        // 3 将page保存到域对象中
        req.setAttribute("page",page);

        // 4 请求转发到pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);

    }

修改图书管理菜单的指向地址

<a href="manager/bookServlet?action=page">图书管理</a>

 修改页面遍历的数据内容

<c:forEach items="${requestScope.page.items}" var="book">

 增加分页菜单信息

<div id="page_nav">
			<a href="#">首页</a>
			<a href="#">上一页</a>
			<a href="#">3</a>
			【${requestScope.page.pageNo}】
			<a href="#">5</a>
			<a href="#">下一页</a>
			<a href="#">末页</a>
			共${requestScope.page.pageTotal}页,${requestScope.page.pageTotalCount}条记录 到第<input value="4" name="pn" id="pn_input"/>页
			<input type="button" value="确定">
		</div>

2、首页、末页、上一页、下一页的设置

<div id="page_nav">
			<%--页码大于1,才显示首页和上一页--%>
			<c:if test="${requestScope.page.pageNo > 1}">
				<a href="manager/bookServlet?action=page&pageNo=1">首页</a>
				<a href="manager/bookServlet?action=page&pageNo=${requestScope.page.pageNo-1}">上一页</a>
			</c:if>
			<a href="#">3</a>
			【${requestScope.page.pageNo}】
			<a href="#">5</a>
			<%--页码小于总页码,才显示末页和下一页--%>
			<c:if test="${requestScope.page.pageNo < requestScope.page.pageTotal}">
				<a href="manager/bookServlet?action=page&pageNo=${requestScope.page.pageNo+1}">下一页</a>
				<a href="manager/bookServlet?action=page&pageNo=${requestScope.page.pageTotal}">末页</a>
			</c:if>
			共${requestScope.page.pageTotal}页,${requestScope.page.pageTotalCount}条记录 到第<input value="4" name="pn" id="pn_input"/>页
			<input type="button" value="确定">
</div>

3、跳转页面功能的实现

将basePath放入page域

<%
    String basePath = request.getScheme()
            + "://" + request.getServerName()
            + ":" + request.getServerPort()
            + request.getContextPath()
            + "/";
    pageContext.setAttribute("basePath",basePath);
%>

给跳转按钮绑定事件

共${requestScope.page.pageTotal}页,${requestScope.page.pageTotalCount}条记录
到第<input value="${param.pageNo}" name="pn" id="pn_input"/>页
<input id="searchPageBtn" type="button" value="确定">
<script type="text/javascript">
	$(function () {
		$("#searchPageBtn").click(function () {
			var pageNo = $("#pn_input").val();
			location.href="${pageScope.basePath}manager/bookServlet?action=page&pageNo=" + pageNo;
        });
    });
</script>

服务器端输入数据有效边界的设置

        // 数据边界的有效检查
        if(pageNo < 1) {
            pageNo = 1;
        }
        if (pageNo > pageTotal) {
            pageNo = pageTotal;
        }
        page.setPageNo(pageNo);

4、页码的输出实现

页面的编写

<%--页码输出开始--%>
	<c:choose>
		<%--情况1:总的页码数小于等于5--%>
		<c:when test="${requestScope.page.pageTotal <= 5}">
			<c:set var="begin" value="1"></c:set>
			<c:set var="end" value="${requestScope.page.pageTotal}"></c:set>

		</c:when>

	<%--情况2:总的页码数大于5页--%>
	    <c:when test="${requestScope.page.pageTotal > 5}">
			<c:choose>
				<%--子情况1:当前页面在前三页--%>
				<c:when test="${requestScope.page.pageNo <= 3}">
					<c:set var="begin" value="1"></c:set>
					<c:set var="end" value="5"></c:set>
				</c:when>
						
				<%--子情况2:当前页面在最后三页--%>
				<c:when test="${requestScope.page.pageNo > requestScope.page.pageTotal - 4}">
					<c:set var="begin" value="${requestScope.page.pageTotal - 4}"></c:set>
					<c:set var="end" value="${requestScope.page.pageTotal}"></c:set>
				</c:when>
						
				<%--子情况3:当前页面在中间--%>
				<c:otherwise>
					<c:set var="begin" value="${requestScope.page.pageNo - 2}"></c:set>
					<c:set var="end" value="${requestScope.page.pageNo + 2}"></c:set>
				</c:otherwise>
			</c:choose>
		</c:when>
	</c:choose>

		<c:forEach begin="${begin}" end="${end}" var="i">
			<c:if test="${requestScope.page.pageNo == i}">
				【${i}】
			</c:if>
			<c:if test="${requestScope.page.pageNo != i}">
				<a href="manager/bookServlet?action=page&pageNo=${i}">${i}</a>
			</c:if>
		</c:forEach>

<%--页码输出结束--%>

修改添加操作后的页面转发地址

<td><a href="pages/manager/book_edit.jsp?pageNo=${requestScope.page.pageTotal}">添加图书</a></td>
<input type="hidden" name="pageNo" value="${param.pageNo}">
protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),0);
        pageNo+=1;

        // 1 获取请求的参数==封装成为 Book 对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());
        // 2 调用 BookService.addBook()保存图书
        bookService.addBook(book);
        // 3 跳到图书列表页面
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + pageNo);
    }

删除、修改操作后的页面转发

<td><a href="manager/bookServlet?action=getBook&id=${book.id}&pageNo=${requestScope.page.pageNo}">修改</a></td>
<td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}&pageNo=${requestScope.page.pageNo}">删除</a></td>
protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1 获取请求的参数——需要删除的图书id
        int id = WebUtils.parseInt(req.getParameter("id"), 0);

        // 2 使用bookService执行删除操作
        bookService.deleteBookById(id);

        // 3 页面重定向回图书列表管理页面(/manager/bookServlet?action=list)
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo"));
    }

    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1 获取请求的参数并封装成对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(), new Book());
        // 2 执行bookService.updateBook操作修改数据
        bookService.updateBook(book);
        // 3 请求重定向到/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo"));
    }

注:本文章所含内容来源于尚硅谷教育,仅供学习参考使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值