Servlet之分页

分页

分页limit 0,10表示从0开始,显示10行数据(0-9行数据)
第二页为 limit 10,10 从10开始显示10行 (10-19行数据)
公式:(pageNum-1)*pageSize
封装对象page:包含pageNum、pageSize、totalCount、PageCount、list<T>用来保存查到的10条数据
因为使用了通用类,方法参数可以设置成page对象,默认值pageNum=1,
pageSize=10,显示第一页的时候 有可能地址栏没有参数,需要考虑此种情况
当地址栏有pageNum的参数时,会覆盖默认值
在Service层传递page,处理完返回page在controller层接收

dao层;两个方法

//查询总条数
public Integer selectCount();
//查询从index开始 size为10的10条数据
 public ArrayList<User> selectPageList(Integer index, Integer size);

service层

//传递参数在这里调用dao层的selectPageList(Integer index, Integer size)的方法
//处理完封装给page对象返回一个page
public Page selectPageList(Page page);

showAll为controller层,调用service层,把page传递,因为是引用传递,所以page可以共享,下面的代码,public ArrayList selectPageList(Integer index, Integer size),我返回的是个查询到的数据,在dao层进行了page封装,没有在service层直接进行封装

 public String showAll(Page page, HttpServletRequest request, HttpServletResponse response){

        IUserService iUserService=new UserServiceImpl();
//        String pageNum = request.getParameter("pageNum");

        ArrayList<User> users= null;
//        if (pageNum==null){
//            users = iUserService.selectPageList(page);
//        }else {
//            System.out.println(pageNum);
//            page.setPageNum(Integer.parseInt(pageNum));
        users = iUserService.selectPageList(page);
//        }
        page.setPageList(users);
        request.setAttribute("page",page);

        return "forward:showAll.jsp";
    }

在jsp页面使用EL表达式和jstl进行显示

上一页下一页传递的pageNum会覆盖默认值,然后流程和上述一直封装成page对象,再次显示出来就可以

<table border="1">
    <tr>
        <td>empno</td>
        <td>ename</td>
        <td>ejob</td>
        <td>mgr</td>
        <td >hiredate</td>
        <td >sal</td>
        <td >comm</td>
        <td >deptno</td>
        <td >png</td>
    </tr>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <c:forEach var="users" items="${page.pageList}">
        <tr>
            <td >${users.empno}</td>
            <td>${users.ename}</td>
            <td>${users.job}</td>
            <td><c:if test="${empty users.mgr}">老板</c:if>
               ${users.mgr}
            </td>
            <td>${users.hiredate}</td>
            <td>${users.sal}</td>
            <td><c:if test="${empty users.comm}">0.0</c:if>${users.comm}</td>
            <td>${users.deptno}</td>
            <td>${users.png}</td>
            <td><a href="/UserServlet/showUser?id=${users.empno}&pageNum=${page.pageNum}">编辑</a><a href="/UserServlet/deleteUser?id=${users.empno}&pageNum=${page.pageNum}&pageSize=${page.pageSize}">删除</a></td>
        </tr>
    </c:forEach>
</table>

<a href="/UserServlet/showAll">首页</a>
<c:if test="${page.pageNum>1}"><a href="/UserServlet/showAll?pageNum=${page.pageNum-1}">上一页</a></c:if>
<c:if test="${page.pageNum<page.pageCount}"><a href="/UserServlet/showAll?pageNum=${page.pageNum+1}">下一页</a></c:if>
<a href="/UserServlet/showAll?pageNum=${page.pageCount}">尾页</a>
<form action="/button.jsp">
    <button >返回首页</button>
</form>

单从表现层来说分页不是一个复杂的工作,稍微理一下思路,处于不同competence level的同学应该都能自己搞出来。 以上面的文章列表分页为例,我觉得分页有两点重要的, 一是:分页我们必须首先自己搞清楚,文章总数、每页显示文章数(页大小)、页数 二是:如何做好页脚的分页导航条 实际应用中,文章总数这个值我们从数据库可以得到;每页显示的文章数即分页的页大小可以自己定义;页数我们可以通过下面的个表达式简单得出。 假设: int pageSize = 10; //分页大小 int totalPosts = PagingDAO.entryList.size(); //总文章数 int totalPages = totalPosts/pageSize + ((totalPosts%pageSize)>0?1:0); //计算得出的总页数 每页的文章怎么取出来? 知道分页的大小之后,我们生成了页好的选取下拉框,每次选择第几页的时候,都会向Servlet传递当前选择页号的参数,这样Servlet调用后面的DAO相应的方法,取得文章列表信息,再回传到JSP以供显示。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> page Size : ${pageSize} <br /> Total Posts: ${totalPosts} <br /> Total Pages: ${totalPages} <br /> Current Page: ${pageNumber} <hr /> <table> <thead> <tr align="center"> <td width="10%">Article ID</td> <td width="70%">Article Title</td> <td colspan="3">Actions</td> </tr> </thead> <tbody> <c:forEach items="${entryList}" var="entry"> <tr align="center"> <td>${entry.entryID}</td> <td>${entry.title}</td> <td><a href="viewEntry?entryID=${entry.entryID}">View</a></td> <td><a href="editEntry?entryID=${entry.entryID}">Edit</a></td> <td><a href="deleteEntry?entryID=${entry.entryID}">Delete</a></td> </tr> </c:forEach> </tbody> <tfoot> <tr align="center"> <td colspan="5"> <jsp:include page="paging_footer.jsp"></jsp:include> </td> </tr> </tfoot> </table> <hr/>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值