java web 中分页技术

来源:互联网 发布:小黑瓶和小棕瓶 知乎 编辑:程序博客网 时间:2024/05/29 15:38


        java web中的分页技术,就是显示用户查询的数据的时候,规定每页显示多少条数据,

      即如下所示:

        这样的话,用户可以自己选择要查看哪一页,更加的人性化,一次只查询一页,不用查询所有页,

     <1>首先分页得知道当前页码(pagecode),由用户选定,然后提交给后台,默认为第一页,

     <2>其次得知道总页数(totalpages),总页数可以通过总记录数/每页的记录数得到,

     <3>总记录数(totalrecord)可以通过执行sql语句(select count(*) from customer)得到,

     <4>每页记录数由用户决定,然后就可以计算出总页数,

      <5>还得知道当前页数据(beanutils),通过执行sql语句(select * from customer limit x,y);

     把这些属性封装到一个pagebean中,首先可以得到首页 上一页 下一页 尾页

    在jsp中显示为:

 

 <c:forEach items="${pb.beanList}" var="cstm"><tr><td>${cstm.cname}</td><td>${cstm.gender}</td><td>${cstm.birthday}</td><td>${cstm.cellphone}</td><td>${cstm.email}</td><td>${cstm.description}</td><td><a href="<c:url value='/servlet/CustomerServlet?method=preEdit&cid=${cstm.cid}'/>">编辑</a><a href="<c:url value='/msg.jsp'/>">删除</a></td></tr></c:forEach>

 

 <center>第${pb.pc}页/共${pb.tp}页<a href="<c:url value='/servlet/CustomerServlet?method=findAll&pc=1'/>">首页</a><c:if test="${pb.pc>1}"><a href="<c:url value='/servlet/CustomerServlet?method=findAll&pc=${pb.pc-1}'/>">上一页</a></c:if><c:if test="${pb.pc<pb.tp}"><a href="<c:url value='/servlet/CustomerServlet?method=findAll&pc=${pb.pc+1}'/>">下一页</a></c:if><a href="<c:url value='/servlet/CustomerServlet?method=findAll&pc=${pb.tp}'/>">尾页</a></center>
在servlet中如下

public String findAll(HttpServletRequest request, HttpServletResponse response)           throws ServletException, IOException {   //得到pc(当前页码)int pc = getPc(request);//设定psint ps = 10;//设定每页记录为10//调用service,得到pageBeanPageBean<Customer> pb = customerservice.findAll(pc,ps);//保存到request域中request.setAttribute("pb", pb);//转发到list.jspreturn "f:/list.jsp";}

在dao中如下:

public PageBean<Customer> findAll(int pc,int ps){try{//得到PageBean对象pbPageBean<Customer> pb = new PageBean<Customer>();//把pc,ps设置给pbpb.setPc(pc);pb.setPs(ps);//得到tr,设置给pbString sql = "select count(*) from t_customer";Number num = (Number)qr.query(sql, new ScalarHandler());int tr = num.intValue();pb.setTr(tr);sql = "select * from t_customer order by cname limit ?,?";List<Customer> beanList = qr.query(sql, new BeanListHandler<Customer>(Customer.class),(pc-1)*ps,ps);pb.setBeanList(beanList);return pb;}catch(SQLException e){throw new RuntimeException(e);}}

其次为了显示页码列表,规定最多显示10个页码,当前页在页码中的位置为6,则begin=当前页-5,end=当前页+4;

其中特殊情况为总页数小于10,则begin=1,end=总页数

头溢出:当begin<1时,让begin=1;

尾溢出:当end>总页数时,end=总页数

代码如下:

<c:choose><c:when test="${pb.tp<10}"><c:set var="begin" value="1"></c:set><c:set var="end" value="${pb.tp}"></c:set></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 var="i" begin="${begin}" end="${end}"><c:choose><c:when test="${i eq pb.pc}">[${i}]</c:when><c:otherwise>


 

0 0
原创粉丝点击