图书分页的模型分析

分页模型图分析:

分页模型 Page 的抽取(当前页数,总页数,总记录数, 当前页数据,每页记录数) 

package pojo;

import java.util.List;

/**
 * page是分页的模型对象
 * @param <T> 是具体的模块的javabean
 */
public class Page <T>{
    public static final Integer PAGE_SIZE = 4;
    private Integer pageNo;
    private Long pageTotal;
    private Long getTotalCount;
    private Integer pageSize=PAGE_SIZE;
    private List<T> items;
    private String url;

    public Page() {
    }

    public Integer getPageNo() {
        return pageNo;
    }

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

    public Long getPageTotal() {
        return pageTotal;
    }

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

    public Long getGetTotalCount() {
        return getTotalCount;
    }

    public void setGetTotalCount(Long getTotalCount) {
        this.getTotalCount = getTotalCount;
    }

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

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

    public Integer getPageSize() {
        return pageSize;
    }

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

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

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

page分页的Servlet程序

protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //分页查询
        //页数
        int pageNo = WebUtils.paraseInt(req.getParameter("pageNo"),1);
        //一页多少内容
        int pageSize = WebUtils.paraseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
        //要传进去的servlet程序的url
        String url = "manager/bookServlet?action=page";
        //获得图书信息
        Page<Book> page = book.page(pageNo,pageSize,url);
        System.out.println(page);
        //将图书信息保存到request域中
        req.setAttribute("book",page);
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }

Dao包:

List<Book> queryForitems(int begin,int pageSize);
public List<Book> qurtyForPageItems(int begin, int pageSize, int min, int max) {
    String sql = "select id,name,author,price,sales,stock,img_path from " +
            "t_book where price between ? and ? order by price limit ?,? ";
    return queryMore(Book.class,sql,min,max,begin,pageSize);

}

 Service包:

Page<Book> page(int pageNo, int pageSize,String url);
public Page<Book> page(int pageNo, int pageSize,String url) {
    //创建page对象
    Page<Book>page = new Page<Book>();
    //设置要转发到那个url中的servlet程序
    page.setUrl(url);
    //设计每页数量
    page.setPageSize(pageSize);
    //获取总记录数 即总共多少本书
    Long i = booker.queryForPageTotalCount();
    //设置总记录数 即总共多少本书
    page.setGetTotalCount(i);
    //获取总页码
    Long total = i/pageSize;
    if(i%pageSize>0){
        total++;
    }
    //设置总页码
    page.setPageTotal(total);
    //数据边界的有效检查
    if(pageNo<1){
        pageNo=1;
    }else if(pageNo>total){
        pageNo= Math.toIntExact(total);
    }
    page.setPageNo(pageNo);
    //分页查询的begin
    int begin = (page.getPageNo()-1)*pageSize;
    //分页查询完后返回来的对象
    List<Book> books = booker.queryForitems(begin, pageSize);
    //将这个对象保存在page中的list对象中
    page.setItems(books);

    return page;
}

 

首页、上一页、下一页、末页实现,分页模块中跳转到指定页数功能

 

<div id="page_nav">
    <%--大于首页,才显示--%>
    <c:if test="${requestScope.book.pageNo > 1}">
        <a href="${ requestScope.book.url }&pageNo=1">首页</a>
        <a href="${ requestScope.book.url }&pageNo=${requestScope.book.pageNo-1}">上一页</a>
    </c:if>
    <%--页码输出的开始--%>
    <c:choose>
        <%--情况1:如果总页码小于等于5的情况,页码的范围是:1-总页码--%>
        <c:when test="${ requestScope.book.pageTotal <= 5 }">
            <c:set var="begin" value="1"/>
            <c:set var="end" value="${requestScope.book.pageTotal}"/>
        </c:when>
        <%--情况2:总页码大于5的情况--%>
        <c:when test="${requestScope.book.pageTotal > 5}">
            <c:choose>
                <%--小情况1:当前页码为前面3个:1,2,3的情况,页码范围是:1-5.--%>
                <c:when test="${requestScope.book.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.book.pageNo > requestScope.book.pageTotal-3}">
                    <c:set var="begin" value="${requestScope.book.pageTotal-4}"/>
                    <c:set var="end" value="${requestScope.book.pageTotal}"/>
                </c:when>
                <%--小情况3:4,5,6,7,页码范围是:当前页码减2 - 当前页码加2--%>
                <c:otherwise>
                    <c:set var="begin" value="${requestScope.book.pageNo-2}"/>
                    <c:set var="end" value="${requestScope.book.pageNo+2}"/>
                </c:otherwise>
            </c:choose>
        </c:when>
    </c:choose>

    <c:forEach begin="${begin}" end="${end}" var="i">
        <c:if test="${i == requestScope.book.pageNo}">
            【${i}】
        </c:if>
        <c:if test="${i != requestScope.book.pageNo}">
            <a href="${ requestScope.book.url }&pageNo=${i}">${i}</a>
        </c:if>
    </c:forEach>
    <%--页码输出的结束--%>


    <%-- 如果已经 是最后一页,则不显示下一页,末页 --%>
    <c:if test="${requestScope.book.pageNo < requestScope.book.pageTotal}">
        <a href="${ requestScope.book.url }&pageNo=${requestScope.book.pageNo+1}">下一页</a>
        <a href="${ requestScope.book.url }&pageNo=${requestScope.book.pageTotal}">末页</a>
    </c:if>

    共${ requestScope.book.pageTotal }页,${ requestScope.book.getTotalCount }条记录
    到第<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();

                <%--var pageTotal = ${requestScope.page.pageTotal};--%>
                <%--alert(pageTotal);--%>

                // javaScript语言中提供了一个location地址栏对象
                // 它有一个属性叫href.它可以获取浏览器地址栏中的地址
                // href属性可读,可写
                location.href = "${pageScope.basePath}${ requestScope.book.url }&pageNo=" + pageNo;

            });
        });

    </script>

</div>

分页模块中,页码 1,2,【3】,4,5 的显示,要显示 5 个页 码,并且页码可以点击跳转。 

情况 1:如果总页码小于等于 5 的情况,

页码的范围是:1-总页码

1 页 1

2 页 1,2

3 页 1,2,3

4 页 1,2,3,4

5 页 1,2,3,4,5

情况 2:总页码大于 5 的情况。假设一共 10 页

小情况 1:当前页码为前面 3 个:1,2,3 的情况,

页码范围是:1-5. 【1】2,3,4,5

                                1【2】3,4,5

                                1,2【3】4,5

小情况 2:当前页码为最后 3 个,8,9,10,

页码范围是:总页码减 4 - 总页码

6,7【8】9,10

6,7,8【9】10

6,7,8,9【10】

小情况 3:4,5,6,7,页码范围是:当前页码减 2 - 当前页码加 2

2,3,4,5,6

3,4,5,6,7

4,5,6,7,8

5,6,7,8,9

<c:choose>
    <%--情况1:如果总页码小于等于5的情况,页码的范围是:1-总页码--%>
    <c:when test="${ requestScope.book.pageTotal <= 5 }">
        <c:set var="begin" value="1"/>
        <c:set var="end" value="${requestScope.book.pageTotal}"/>
    </c:when>
    <%--情况2:总页码大于5的情况--%>
    <c:when test="${requestScope.book.pageTotal > 5}">
        <c:choose>
            <%--小情况1:当前页码为前面3个:1,2,3的情况,页码范围是:1-5.--%>
            <c:when test="${requestScope.book.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.book.pageNo > requestScope.book.pageTotal-3}">
                <c:set var="begin" value="${requestScope.book.pageTotal-4}"/>
                <c:set var="end" value="${requestScope.book.pageTotal}"/>
            </c:when>
            <%--小情况3:4,5,6,7,页码范围是:当前页码减2 - 当前页码加2--%>
            <c:otherwise>
                <c:set var="begin" value="${requestScope.book.pageNo-2}"/>
                <c:set var="end" value="${requestScope.book.pageNo+2}"/>
            </c:otherwise>
        </c:choose>
    </c:when>
</c:choose>

<c:forEach begin="${begin}" end="${end}" var="i">
    <c:if test="${i == requestScope.book.pageNo}">
        【${i}】
    </c:if>
    <c:if test="${i != requestScope.book.pageNo}">
        <a href="${ requestScope.book.url }&pageNo=${i}">${i}</a>
    </c:if>
</c:forEach>
<%--页码输出的结束--%>

首页 index.jsp 的跳转 

首页价格搜索 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hyong~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值