• 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>

    最后显示页面

  • 相关阅读:
    redis set
    实现排行榜神器——redis zset
    nginx挂了怎么办
    django 400报错
    项目管理【18】 | 项目进度管理-规划进度管理
    项目管理【17】 | 项目进度管理-进度管理概述
    项目管理【23】 | 项目进度管理-制定进度计划
    移动端开发基础【7】生命周期
    移动端开发案例【7】移动端朋友圈发布显示开发
    移动端开发案例【6】移动端群、用户搜索开发
  • 原文地址:https://www.cnblogs.com/64Byte/p/12896934.html
Copyright © 2020-2023  润新知