JavaWeb书城项目-图书&订单模块的分页功能

 

 

 

 

    protected void page(HttpServletRequest req, HttpServletResponse res) 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(pageNo,pageSize):Page对象
        Page<Book> page = bookService.page(pageNo,pageSize);
        //3 保存Page对象到request域中
        req.setAttribute("page", page);
        //4 请求转发到pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req, res);
    }
<div id="page_nav">
        <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="${param.pageNo}" name="pn" id="pn_input"/><input id="searchPageBtn" type="button" value="确定">
        <script type="text/javascript">
            $("#searchPageBtn").click(function(){
                var pageNo = $("#pn_input").val();
                var pageTotal = ${requestScope.page.pageNo}
                if(pageNo < 1 || pageNo > pageTotal){
                    return false;
                }else{
                    //javascript语言中提供了一个location地址栏对象
                    //它又一个属性叫href,它可以获取浏览器地址栏中的地址
                    //href属性可读,可写
                location.href = "${pageScope.basePath}manager/bookServlet?action=page&pageNo=" + pageNo;
                }
            })
        </script>
        </div>
    

 

 

页码显示算法

1.总页码小于5的情况

 

2.总页码大于5的情况

 

    <div id="page_nav">
        <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>
        <%-- 页码输出的开始 --%>
        
        <c:choose>
        <%-- 情况1:如果总页码小于等于5的情况,页码的范围是1~总页码 --%>
            <c:when test="${requestScope.page.pageTotal <= 5}">
                <c:set var="begin" value="1"/>
                <c:set var="end" value="${requestScope.page.pageTotal}"/>
            </c:when>
        <%-- 情况2: 如果总页码大于5小于10的情况,页码的范围是:总页码减4~总页码--%>
            <c:when test="${requestScope.page.pageTotal > 5}">
                <c:choose>
                    <%-- 小情况1:当页码为前面3个:12,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个:89,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个:456,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="manager/bookServlet?action=page&pageNo=${i}">${i}</a>
            </c:if>
        </c:forEach>
        
        <%-- 页码输出的结束 --%>
        
        <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="${param.pageNo}" name="pn" id="pn_input"/><input id="searchPageBtn" type="button" value="确定">
        <script type="text/javascript">
            $("#searchPageBtn").click(function(){
                var pageNo = $("#pn_input").val();
                var pageTotal = ${requestScope.page.pageNo}
                if(pageNo < 1 || pageNo > pageTotal){
                    return false;
                }else{
                    //javascript语言中提供了一个location地址栏对象
                    //它又一个属性叫href,它可以获取浏览器地址栏中的地址
                    //href属性可读,可写
                location.href = "${pageScope.basePath}manager/bookServlet?action=page&pageNo=" + pageNo;
                }
            })
        </script>
        </div>

 

posted @ 2022-04-04 20:08  donkey8  阅读(46)  评论(0)    收藏  举报