经典分页

    技术2022-05-20  43

    一般的分页只有“上一页”、“下一页”、“首页”、“末页”着四个选项,下面来学习一下,仿google搜索结果显示的分页,如下:

    [ 1 ]  [ 2 ]  [ 3 ]              下一页         当前页是[ 1 ]    

     上一页 [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]            下一页          当前页是[ 2 ]    

     上一页  [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]         下一页           当前页是[ 3 ]   

     上一页  [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]      下一页        当前页是[ 4 ]      

     上一页  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 ]      下一页        当前页是[ 5 ]      

     

     上一页  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 ]  [ 8 ]      下一页        当前页是[ 6 ]     

       

     上一页  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 ]  [ 8 ]  [ 9 ]      下一页        当前页是[ 7 ]      

       

     上一页  [ 5 ]  [ 6 ]  [ 7 ]  [ 8 ]  [ 9 ]  [ 10]      下一页        当前页是[ 8 ]     

    如上页码的出现规律:

    前四页是每点下一页就多一页,大于四页时,每点下一页,前面的页数加一,后面的页数减一,依次类推,到最后一页时,不显示下一页。

    思路如下:

    1、创建Page类,

    package cn.csdn.domain;

    import java.util.List;

    public class Page {

    private int nowpage;// 当前页

    private int countrecord;// 总记录数

    private int countpage;// 总页数

    private int pageindex;// 当前页记录开始的位置 (nowpage-1)*PAGESIZE

    public static final int PAGESIZE = 5;// 每页显示的记录数

    private int sumindex = 6;// 索引的sum值 代表的是 google页面中最大显示页数

    private int startindex;// 开始的索引值

    private int endindex;// 结束的索引值

    private List allentities;

    public Page() {

    }

    public Page(int countrecord, int nowpage) { // 可变

    // 计算当前页

    this.nowpage = nowpage;

    // 计算出当前页开始的位置

    this.pageindex = (nowpage - 1) * PAGESIZE;

    // 计算总页数

    this.countrecord = countrecord;

    if (this.countrecord % this.PAGESIZE == 0) {

    this.countpage = this.countrecord / this.PAGESIZE;

    else {

    this.countpage = this.countrecord / this.PAGESIZE + 1;

    }

    // 计算索引位置

    //==============第一种方法========

    /*if (this.nowpage <= 4) {

    this.startindex = 1;

    this.endindex = this.nowpage + 2;

    if(this.endindex>this.countpage){

    this.endindex=this.countpage;

    }

    }else if(this.nowpage>4){

    this.startindex=this.nowpage-3;

    this.endindex=this.nowpage+2;

    if(this.endindex>this.countpage){

    this.endindex=this.countpage;

    this.startindex=this.countpage-5;

    }

    }*/

    //============================

    // ============第二种方法==========

    if(nowpage<(lastpage-2)){

    if(nowpage>=5){

    //如果大于6的话,startindex要变大

    startindex=nowpage-3;

    }else{

    startindex=1;

    }

    //endindex要变大

    endindex=nowpage+2;

    // 如果总页数小于6

    if(endindex>lastpage){

    endindex=lastpage;

    }

    }else{

    endindex=lastpage;

    startindex=endindex-5;

    }

    // ======================

    }

    public int getNowpage() {

    return nowpage;

    }

    public void setNowpage(int nowpage) {

    this.nowpage = nowpage;

    }

    public int getCountrecord() {

    return countrecord;

    }

    public void setCountrecord(int countrecord) {

    this.countrecord = countrecord;

    }

    public int getCountpage() {

    return countpage;

    }

    public void setCountpage(int countpage) {

    this.countpage = countpage;

    }

    public int getPageindex() {

    return pageindex;

    }

    public void setPageindex(int pageindex) {

    this.pageindex = pageindex;

    }

    public int getSumindex() {

    return sumindex;

    }

    public void setSumindex(int sumindex) {

    this.sumindex = sumindex;

    }

    public int getStartindex() {

    return startindex;

    }

    public void setStartindex(int startindex) {

    this.startindex = startindex;

    }

    public int getEndindex() {

    return endindex;

    }

    public void setEndindex(int endindex) {

    this.endindex = endindex;

    }

    public List getAllentities() {

    return allentities;

    }

    public void setAllentities(List allentities) {

    this.allentities = allentities;

    }

    }

    dao中写:

    public int getCountRecord() {

    // 1、定义返回结果

    int countrecord = 0;

    // 2、获取数据库连接对象

    conn = DBConn.getConn();

    // 3、创建预处理的sql语句

    String sql = "select count(*) from student";

    try {

    // 4、根据预处理的sql语句创建预处理的操作对象

    pstmt = conn.prepareStatement(sql);

    // 5、查询的时候 直接执行

    rs = pstmt.executeQuery();

    // 6、判断

    if (rs.next()) {

    countrecord = rs.getInt(1);

    }

    catch (SQLException e) {

    e.printStackTrace();

    finally {

    DBConn.close(rspstmt);

    }

    return countrecord;

    }

    // 获取当前页信息

    public List<Student> getNowPageInfo(int pageindex,int pagesize) {

    //1、定义返回结果变量

    List<Student> allentities = new ArrayList<Student>();

    //2、获取连接对象

    conn = DBConn.getConn();

     try {

     //3、根据预处理的sql语句创建预处理的操作对象

    pstmt = conn.prepareStatement("select id,name,age,email from student limit ?,?");

         //4、定义下标变量 并赋值

    int index = 1;

    pstmt.setInt(index++, pageindex);

    pstmt.setInt(index++, pagesize);

    //5、查询的时候 直接执行

    rs = pstmt.executeQuery();

    //判断

    while(rs.next()){

    //创建实体bean对象

    Student entity = new Student();

    entity.setId(rs.getInt("id"));

    entity.setName(rs.getString("name"));

    entity.setAge(rs.getInt("age"));

    entity.setEmail(rs.getString("email"));

    //添加到集合中

    allentities.add(entity);

    }

     } catch (SQLException e) {

    e.printStackTrace();

    }finally{

    DBConn.close(rspstmt);

    }

    return allentities;

    }

    servlet中写:

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)

    throws ServletException, IOException {

       //1.设置编码

    req.setCharacterEncoding("utf8");

       //2.获取当前页

    int nowpage=1;

    String npage = req.getParameter("nowpage");

    if(npage!=null){

    nowpage = Integer.valueOf(npage);

    }

         //3、创建sevice服务操作对象

    StudentServiceImpl ssi = new StudentServiceImpl();

    //计算总记录数

    int countrecord = ssi.getCountRecord();

    //创建page对象

    Page stupage = new Page(countrecord, nowpage);

    //获取当前页信息

            List<Student> allentities = ssi.getNowPageInfo(stupage.getPageindex(),stupage.PAGESIZE);

            //把当前页信息赋值给page对象的list集合

            stupage.setAllentities(allentities);

            //存入到reqeust

            req.setAttribute("stupage", stupage);

    req.getRequestDispatcher("liststudents.jsp").forward(req, resp);

    }

    jsp中应写:

    <div id="pg">

          

               <c:if test="${stupage.nowpage!=1}">

               <span>

                 <a href="${pageContext.request.contextPath}/liststudents.do?nowpage=${stupage.nowpage-1>0?stupage.nowpage-1:1}">上一页</a>

               </span>

               </c:if>

      

            <c:forEach begin="${stupage.startindex}end="${stupage.endindex}var="indexnum">

               <span>

                 [<a href="${pageContext.request.contextPath}/liststudents.do?nowpage=${indexnum}">${indexnum}</a>]

               </span>

             </c:forEach>  

               

               <c:if test="${stupage.nowpage!=stupage.countpage}">

               <span>

               <a href="${pageContext.request.contextPath}/liststudents.do?nowpage=${stupage.nowpage+1>stupage.countpage?stupage.countpage:stupage.nowpage+1}">下一页</a>

               </span>

               </c:if>

    </div>

    效果图如下:


    最新回复(0)