• JavaWeb的分页


    1.什么是分页

    第N页/共M页   首页  上一页 1 2 3 4 5 6 7 8 9 下一页 尾页  [  ]  go

      分页的优点:只查询一页,不用查询所有页!

    2.分页数据

      页面的数据都是由Servlet传递过来的!

      Servlet:

      1.*当前页:pageCode,pc;

        >pc:如果页面没有传递当前页码,那么Servlet默认是第一页,或者按页面传递的为准!

      2.*总页数:totalPages,tp

        >tp:总记录数/每页记录数

      3.*总记录数:totalRecored,tr

        >tr:dao来获取,select count(*) from 表;

      4.*每页记录数:业务数据或叫系统数据!(由我们自己来定义)

      5.*当前页数据:beanList

      6.*url

    3.数据的传递

      这些分页数据总要在各层之间来回传递!

    我们把这些分页数据封装到一个Javabean中,它就叫分页Bean,例如:PageBean

     1 package cn.itcast.cstm.domain;
     2 
     3 import java.util.List;
     4 
     5 public class PageBean<T> {
     6     private int pc;// 当前页码page code
     7 //    private int tp;// 总页数total page---不需要了,只需get得到
     8     private int tr;// 总记录数total record
     9     private int ps;// 每页记录数page size
    10     private List<T> beanList;// 当前页的记录
    11     
    12     private String url;//它就是url后的条件!
    13 
    14     public String getUrl() {
    15         return url;
    16     }
    17 
    18     public void setUrl(String url) {
    19         this.url = url;
    20     }
    21 
    22     public int getPc() {
    23         return pc;
    24     }
    25 
    26     public void setPc(int pc) {
    27         this.pc = pc;
    28     }
    29 
    30     /**
    31      * 计算总页数
    32      * @return
    33      */
    34     public int getTp() {
    35         // 通过总记录数和每页记录数来计算总页数
    36         int tp = tr / ps;
    37         return tr%ps==0 ? tp : tp+1;
    38     }
    39 
    40 //    public void setTp(int tp) {
    41 //        this.tp = tp;
    42 //    }
    43 
    44     public int getTr() {
    45         return tr;
    46     }
    47 
    48     public void setTr(int tr) {
    49         this.tr = tr;
    50     }
    51 
    52     public int getPs() {
    53         return ps;
    54     }
    55 
    56     public void setPs(int ps) {
    57         this.ps = ps;
    58     }
    59 
    60     public List<T> getBeanList() {
    61         return beanList;
    62     }
    63 
    64     public void setBeanList(List<T> beanList) {
    65         this.beanList = beanList;
    66     }
    67 }

    4.分页在各层中的处理

      *页面:给出分页相关的链接们!

        >页面需要给Servlet传递什么:有可能传递pc(当前页码)

      *Servlet:创建PageBaen对象,给PageBean所有的属性赋值,然后传递给页面。

        >Servlet需要给Dao传递

      *Service:调用dao层方法。(中转)

      *Dao:

        >tr(总记录数):select count(*)  表名;

        >beanList:select *from 表名 limit x, y;(从数据库中查询从第x行开始,查y条记录---是MySQL的方言)

     

     5.显示分页页码列表

    1 2 3 4 5 6 7 8 9 10

      # 最多显示多少个页码!(暂定为10);

      # 当前页,在页码中列表中的位置,定为6;

      只需要当前页码来定出来页码表!

      定下来页码列表只需要两样数据:

        begin

        end

        10 11 12 13 14 (15) 16 17 18 19

      需要使用pc来推算出begin和end

      begin=pc-5 

      end=pc+4

    计算公式:

      # 如果总页数<=10(列表长度),那么begin=1,end=总页数

      # 使用公式计算:begin=pc-5,end=pc+4;

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

        # 尾溢出:当end>${tp}最大页数,让end=${tp}

     6.在超链接中要保留参数(搜索时的条件)

       当使用多条件查询后,然后再点击第二页时,这个第二页超链接没有条件了,所以会丢失条件,所以我们需要在页面上的所有链接都要保留条件!

       我们要把条件以一个字符串的形式保存到PageBean的url中!这个任务交给Servlet!

    也就是获取请求的路径及参数(参数中不包括当前页pc)

        /**
         * 截取url
         *    /项目名/Servlet路径?参数字符串
         * @param request
         * @return
         */
        private String getUrl(HttpServletRequest request){
             String contextPath=request.getContextPath();//获取项目名
             String servletPath = request.getServletPath();//获取Servlet路径
             String queryString = request.getQueryString();//获取?之后的参数
             
             //判断参数部分是否包含pc这个参数,如果包含,需要截取下去,不要这一部分。
             if(queryString.contains("&pc=")){
                 //返回指定子字符串在此字符串中最右边出现处的索引
                 int index=queryString.lastIndexOf("&pc=");
                 queryString=queryString.substring(0, index);
             }
             
             return contextPath+servletPath+"?"+queryString;
        }

     把这次请求得到的路径保存到PageBean对象中,然后可以在页面获取,从而不会丢失参数,完成查询的分页。

    注意:在搜索查询的时候,也就是在Dao层的SQL语句上增加where子句,返回一个PageBean(其中BeanList是查询得到的对象集合),然后再分页实现。

        请求的时候的form表单的请求方式为GET,这样所得的URL路径中包含查询的参数条件(POST方式不带查询的参数条件),然后再处理编码问题得到参数条件。完成搜索查询。

  • 相关阅读:
    【脑图】iOS的Crash分类和捕获
    Ruby03
    Ruby02
    Ruby01
    如何快速把一个十进制数转换为二进制?
    iOS
    互联网协议基本知识
    XCBB
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/10923289.html
Copyright © 2020-2023  润新知