Jsp--实现分页显示

  1. 创建一个分页类
  2. 从数据库中获取数据
  3. servlet层获取数据
  4. jsp页面展示

1、创建一个分页类

public class Pages {
    private int pageIndex;//当前页码(页面传递)
    private int pageSize;//页容量(后台设置)
    private int totalCount;//总记录数 (数据库查询)
    private int totalPages;//总页数(逻辑判断,
//如果totalPages%pageSize=0输出totalPages/pageSize或者totalPages/pageSize)
    //查询Client表中的所有数据,返回一个list对象集合
    private List<Client> datas;
在getTotalPages的get方法中设置默认总行数属性,不能更改
//总页数 = 总记录数 % 页容量 == 0 ? 总记录数 / 页容量 : 总记录数 / 页容量 + 1
return totalCount%pageSize == 0?totalCount/pageSize :totalCount/pageSize+1;
提供get/set方法
有参/无参构造方法

2、从数据中获取数据

Service实现类中的方法

/**
     * 分页查询
     * pageSize 初始化页容量
     * pageIndex 当前页码 
     * 返回分页集合类
     */
    @Override
    public Pages pageFindAll(int pageSize, int pageIndex) {
        Pages pages = new Pages();
        pages.setPageSize(pageSize);
        pages.setPageIndex(pageIndex);
        pages.setTotalCount(dao.count());
        pages.setDatas(dao.findPage(pageSize,pageIndex));
        return pages;
    }

dao实现类中的方法(获取client对象集合、总数据行数)

返回client结果集

public List<Customer> queryByPage(int pageIndex, int pageSize) {
        String sql = "select * from ( " + " select rownum rn, t1.* from ( "
                + "   select *  from tb_customer "
                + " ) t1  where rownum <= ? " + " ) t2 " + " where t2.rn >= ?";
        /*
         * -- 开始序号 = (pageIndex -1) *pageSize + 1 -- 结束序号 = pageIndex * pageSize
         */
        ResultSet rs = JdbcUtils.executeQuery(sql, pageIndex * pageSize,
                (pageIndex - 1) * pageSize + 1);
        List<Customer> customers = new ArrayList<>();
        // 3.解析
        try {
            while (rs.next()) {
                Customer c = new Customer();
                c.setCid(rs.getInt("cid"));
                c.setCname(rs.getString("cname"));
                c.setBirthday(rs.getString("birthday"));
                c.setCellphone(rs.getString("cellphone"));
                c.setEmail(rs.getString("email"));
                c.setDescription(rs.getString("description"));
                c.setGender(rs.getString("gender"));

                // 添加到List集合
                customers.add(c);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(rs);
        }
        return customers;
    }

返回总行数

public int count() {
        String sql = "select count(1) from tb_customer";
        ResultSet rs = JdbcUtils.executeQuery(sql);
        try {
            rs.next();
            return rs.getInt(1);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(rs);
        }
        return 0;
    }

3、servlet层获取数据

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //编码的处理
        request.setCharacterEncoding("UTF-8");
        //设置响应编码
        response.setContentType("text/html;charset=UTF-8");
        //获取请求参数

        //初始化页容量为5
        int pageSize = 3;
        //获取当前页码
        String pageIndexStr = request.getParameter("pageIndex");
        //如果没有页码,默认为1
        int pageIndex = 1;
        if(pageIndexStr != null ){
            //如果有强转为int类型
            pageIndex = Integer.parseInt(pageIndexStr);
        }
        //调用service中的方法
        ClientService cs = new ClientServiceImpl();
        Pages pages =cs.pageFindAll(pageSize, pageIndex);
        request.setAttribute("pages",pages);
        //转发
        request.getRequestDispatcher("/list_page.jsp").forward(request, response);
    }

4、jsp页面显示数据(实现显示10条数据)

<td colspan="8" align="center">
    <c:choose>
        <%--如果数据超过10页 --%>
        <c:when test="${ pages.totalPages > 10}">
            <%-- 前一页(当前页不为第一页显示,当前页-1=0--%>
            <c:if test="${ pages.pageIndex-1 !=0 }">
                <a href="
                    <c:url value="/PageServlet?pageIndex=${pages.pageIndex-1}"></c:url>         
                ">前一页</a>
            </c:if>
            <%--开始页码,到了第7页,第一页为2(7-5--%>
            <c:set var = "start" value = "${pages.pageIndex -5}"></c:set>
            <%--结束页码,到了第7页,最后一页为11(7+4--%>
            <c:set var = "end" value = "${pages.pageIndex +4}"></c:set>
            <%-- 头溢出,相减小于1,初始化1~10 --%>
            <c:if test="${start < 1}">
                <c:set var = "start" value = "1"></c:set>
                <c:set var = "end" value = "10"></c:set>
            </c:if>
            <%-- 尾溢出 ,总页数-9,(最后一位-9~最后一位)--%>
            <c:if test="${end > pages.totalPages}">
                <c:set var = "start" value = "${pages.totalPages -9 }"></c:set>
                <c:set var = "end" value = "${pages.totalPages }"></c:set>
            </c:if>
            <%-- 输出响应 ,start~end,已初始化--%>
                <c:forEach var = "i" begin = "${start}" end = "${end}">
                    <%-- 点击到了当前页面超链接失效 --%>
                    <c:choose>
                        <c:when test="${pages.pageIndex == i}">
                            第${i }页
                        </c:when>
                        <c:otherwise>
                            <a href="
                                <c:url value="/PageServlet?pageIndex=${i }"></c:url>         
                            ">第${i }页</a>
                        </c:otherwise>
                    </c:choose>
                </c:forEach>
                <%-- 后一页(当前页不为最后一页显示,当前页=最后一页-1--%>
            <c:if test="${ pages.pageIndex != pages.totalPages }">
                <a href="
                    <c:url value="/PageServlet?pageIndex=${pages.pageIndex+1}"></c:url>         
                ">后一页</a>
            </c:if>
        </c:when>
        
        <%-- 小于10页的数据 --%>
        <c:otherwise>
            <c:forEach var = "i" begin = "1" end = "${pages.totalPages}">
                <c:choose>
                    <c:when test="${pages.pageIndex == i}">
                        第${i }页
                    </c:when>
                    <c:otherwise>
                        <a href="
                            <c:url value="/PageServlet?pageIndex=${i }"></c:url>         
                        ">第${i }页</a>
                    </c:otherwise>
                </c:choose>
            </c:forEach>
        </c:otherwise>
    </c:choose>
</td>

最后显示页面

 

posted @ 2020-05-15 20:30  64Byte  阅读(751)  评论(0编辑  收藏  举报