zoukankan      html  css  js  c++  java
  • 分页---总结

    分页总结:

    1. 分页简单版: 

      实现效果如:   首页 - 上一页 - 下一页 - 尾页

      能够按相应的链接,实现跳转到相应的页面。

      分析与梳理:

        a. 只要知道当前页(PageCode--pc) 和总页数(TotalPage--tp);

        b. 所以,首页为: <a href="CustomerServlet?method=findAll&pc=1">首页</a>

          上一页:<a href="CustomerServlet?method=findAll&pc=${pc - 1}">上一页</a>

          下一页:<a href="CustomerServlet?method=findAll&pc=${pc + 1}">下一页</a>

          尾   页:<a href="CustomerServlet?method=findAll&pc=${tp}">尾页</a>

    2. 分页完善版:

      实现效果如: 首页 - 上一页 - 1 - 2 - 3 - 4 - 5 - .... - 10 - 下一页 - 尾页

      能够按相应的页码,实现跳转到相应的页面。

      分析与梳理:

        a. 要求: 最多显示10个页码;

              如果当前页码超过本次显示的10个页码的 6/10 那么就向左移动。如:当前页码为6,

                  那么当用户按下一页的时候就应该把6往左移动一位,之前首位的“1”就要被它后面的“2”代替掉。

              结果也就是为: 2 - 3 - 4 - 5 - 6 - 【7】 - 8 - 9 -10 -11 。

        b. 如何确定首位的数字跟末尾的数字?什么时候数字应该被移动,什么时候保持不变?

             设置页码从 begin变量开始,到end变量结束。pc为当前页码;ps为每页显示数据的最大数量(设置为“10”大小);tp为总页数;tr为数据的总条数。

             * 首先,先判断总页数(tp) 是否大于 “10”。  //如果大于10,那么begin = 1, end = 10 ;

             * 然后,判断 begin = pc - 5 < 1 ?        //如果begin小于1那么当前页在1-5之间,所以,页码不需要移动。begin = 1,end = 10;

             * 最后,判断  end = pc + 4 > tp ?        //如果end大于tp那么当前页在倒数的四页中,所以,页码还是不需要移动。begin = tp - 9 ,end = tp ;

         代码:

    <a href="<c:url value="/CustomerServlet?method=findAll&pc=1"/>">首页</a>
        <c:if test="${pb.pc > 1}">
            <a href="<c:url value="/CustomerServlet?method=findAll&pc=${pb.pc-1 }"/>">上一页</a>
        </c:if>
        <c:choose>
            <c:when test="${pb.tp<=10}">
                <c:set var="begin" value="1"/>
                <c:set var="end" value="${pb.tp}"/>
            </c:when>
            <c:otherwise>
                <c:set var="begin" value="${pb.pc-5}"></c:set>
                <c:set var="end" value="${pb.pc+4}"></c:set>
                <c:if test="${begin<=1}">
                    <c:set var="begin" value="1"></c:set>
                    <c:set var="end" value="10"></c:set>
                </c:if>
                <c:if test="${end>=pb.tp}">
                    <c:set var="begin" value="${pb.tp-9}"> </c:set>
                    <c:set var="end" value="${pb.tp}"></c:set>
                </c:if>
            </c:otherwise>
        </c:choose>
        <c:forEach begin="${begin}" end="${end}" var="i">
            <a href="<c:url value="CustomerServlet?method=findAll&pc=${i }"/>">${i }</a>
        </c:forEach>
        <c:if test="${pb.pc < pb.tp}">
            <a href="<c:url value="/CustomerServlet?method=findAll&pc=${pb.pc+1 }"/>">下一页</a>
        </c:if>
        <a href="<c:url value="/CustomerServlet?method=findAll&pc=${pb.tp }"/>">尾页</a>

    3. 最终版分页:

      以上的两个版本只是简单的查询所有的内容数据,如果要加上条件的搜索就没办法了。

      所以,要重新改动代码,让其能够根据表单传递的条件来进行查询,并分页。

      假设表单的样子为以下的图表所示:


               多条件搜索

    客户名称:                                   
    性     别:          请选择性别....  
    电     话:  
    注     释:  

     

                

     

      

        搜索       取消


      分析与梳理:

        CustomerServlet#query(request,response)

        a.  需要传递表单参数给CustomerServlet#query方法   (把findAll改成query,并重写)

        b.  设置点击搜索的时候再传递的参数后面再添加一个 参数 "&pc=1" ,让他的pc的默认值为1;也就是说,第一次查询数据的时候是显示第一页数据。

        c.  把传递的参数封装成一个Customer对象。(包含cname、gender、cellphone、description),还有int pc = Integer.valueOf(request.getParameter("pc"));

        d.  设置每页显示的最大数量行数:int  ps  = 10

        CustomerDao#query(c,pc,ps)

        e.  查询符合条件的记录数(tr),和查询符合条件的记录结果集,并把该记录结果集通过BeanListHandler封装成一个List<Customer> beanList(参考Java类的多条件查询)

        f.   然后把pc、ps、tr、beanList、tp(总页数)=tr%ps==0?tr/ps:(tr/ps)+1;封装到一个PageBean对象pb。然后pb返回给CustomerServlet#query

        

        CustomerServlet#query(request,response)

        g.  获取通过页码的超链接,获取该超链接地址字符串(包括:/项目名称/Servlet名?参数等),并把该字符串保存到pb的属性String url;(注意此时没有传递pc参数,只有其他名称、性别、电话、注释这些参数)

        h.  再转发到list.jsp页面。

        list.jsp页面

        i .  设置每个超链接的地址为: href="${pb.url}&pc=${相应的页码}"。

           如:首页为: <a href="${pb.url}&pc=1">首页</a>

        CustomerServlet#query

        j .  还需要添加一个方法,在pb.setUrl(url)的之前需要把传递进来的String url进行处理。判断传递进来的url是否包含字符串“&pc=”有的话,就把它给去掉,然后在把url赋值给pb.setUrl(url);//如果没有去掉传进来的"&pc="字符串,那么转发到list.jsp的url将会是已经带有"&pc="的url,此时在list.jsp又给url添加一个字符串"&pc="那就会出现错误。(看这句话的时候可以参考 :  首页在list.jsp的代码: <a href="${pb.url}&pc=1">首页</a>)

        说的好像不太清晰。。有时间再来整理思路。。

               

        

  • 相关阅读:
    CSS语言
    HTML语言
    JDBC技术
    存储过程
    Oracle和Mysql数据库技术
    正则表达式
    反射
    XML技术
    设计模式初步专题(自学,适合初级.更深入的会在框架阶段)
    线程池专题(自学)
  • 原文地址:https://www.cnblogs.com/JamKong/p/4328281.html
Copyright © 2011-2022 走看看