java web 中分页技术
2015-06-24 22:53
375 查看
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中显示为:
在dao中如下:
其次为了显示页码列表,规定最多显示10个页码,当前页在页码中的位置为6,则begin=当前页-5,end=当前页+4;
其中特殊情况为总页数小于10,则begin=1,end=总页数
头溢出:当begin<1时,让begin=1;
尾溢出:当end>总页数时,end=总页数
代码如下:
即如下所示:
这样的话,用户可以自己选择要查看哪一页,更加的人性化,一次只查询一页,不用查询所有页,
<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); //设定ps int ps = 10;//设定每页记录为10 //调用service,得到pageBean PageBean<Customer> pb = customerservice.findAll(pc,ps); //保存到request域中 request.setAttribute("pb", pb); //转发到list.jsp return "f:/list.jsp"; }
在dao中如下:
public PageBean<Customer> findAll(int pc,int ps){ try{ //得到PageBean对象pb PageBean<Customer> pb = new PageBean<Customer>(); //把pc,ps设置给pb pb.setPc(pc); pb.setPs(ps); //得到tr,设置给pb String 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>
相关文章推荐
- 让MyEclipse支持mac的Retina屏解决字体模糊的问题
- 如何在Maven中配置Spring依赖
- struts2中json插件日期格式化
- java学习之旅13--运算符_01_算术_逻辑_位运算符_扩展运算符
- JAVA基础第四天
- Java生成图形化验证码
- 黑马程序言——Java语言基础语法(二)数组
- SPRING技术内幕-笔记(九)SpringMVC视图的呈现
- java命名规范
- Java初级笔记_常用API_3
- Java初级笔记_常用API_2
- java 数组或者链表输出
- Hibernate4.3.x Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
- Java 死锁的个人尝试和理解
- Java Date类的一些用法
- Java 8十个lambda表达式案例
- Java中变量、代码块与静态块调用顺序
- Java设计模式透析之 —— 策略(Strategy)
- 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
- Java数组