❤️jquery pagination 实现jsp页面分页效果

小明的学习圈子2023-11-27数据库分页

这里分享使用插件和不使用插件的方法,只有jsp和js代码不同,controller和service,dao,mapper的代码都一样(不使用插件有一点缺陷,就是页数太多的时候页面宽度显示问题)

1.引入jquery.pagination.js和pagination.css

img

2.1不使用插件的jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/common/common_taglib.jsp"%>
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <%@ include file="/WEB-INF/jsp/common/common_css.jsp"%>
    <style>
    .tree li {
        list-style-type: none;
        cursor:pointer;
    }
    table tbody tr:nth-child(odd){background:#F4F4F4;}
    table tbody td:nth-child(even){color:#C00;}
    </style>
  </head>

  <body>

    <nav class="navbar navbar-inverse navbar-fixed-top" advert="navigation">
      <div class="container-fluid">
        <div class="navbar-header">
          <div><a class="navbar-brand" style="font-size:32px;" href="#">众筹平台 - 广告管理</a></div>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav navbar-right">
            <%@include file="/WEB-INF/jsp/common/top.jsp" %>
          </ul>
          <form class="navbar-form navbar-right">
            <input type="text" class="form-control" placeholder="Search...">
          </form>
        </div>
      </div>
    </nav>

    <div class="container-fluid">
      <div class="row">
        <div class="col-sm-3 col-md-2 sidebar">
            <div class="tree">
                <jsp:include page="/WEB-INF/jsp/common/menu.jsp"></jsp:include>
            </div>
        </div>
        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
            <div class="panel panel-default">
              <div class="panel-heading">
                <h3 class="panel-title"><i class="glyphicon glyphicon-th"></i> 数据列表</h3>
              </div>
              <div class="panel-body">
                <form class="form-inline" advert="form" style="float:left;">
                  <div class="form-group has-feedback">
                    <div class="input-group">
                      <div class="input-group-addon">查询条件</div>
                      <input id="queryText" class="form-control has-success" type="text" placeholder="请输入查询条件">
                    </div>
                  </div>
                  <button id="queryBtn" type="button" class="btn btn-warning"><i class="glyphicon glyphicon-search"></i> 查询</button>
                </form>
                <button type="button" class="btn btn-danger" style="float:right;margin-left:10px;"><i class=" glyphicon glyphicon-remove"></i> 删除</button>
                <button type="button" class="btn btn-primary" style="float:right;" onclick="window.location.href='${CWF_PATH}/advert/toAdd.htm'"><i class="glyphicon glyphicon-plus"></i> 新增</button>
                <br>
                 <hr style="clear:both;">
                  <div class="table-responsive">
                    <table class="table  table-bordered">
                      <thead>
                        <tr >
                          <th width="30">#</th>
                          <th width="30"><input id="allCheckBox" type="checkbox"></th>
                          <th>广告描述</th>
                          <th>状态</th>
                          <th width="100">操作</th>
                        </tr>
                      </thead>
                      <tbody id="tbodyConcat">
                    
                      </tbody>
                      <tfoot>
                         <tr >
                             <td colspan="5" align="center">
                                <ul class="pagination">
                                    分页的数据显示在这里
                                </ul>
                             </td>
                         </tr>
        
                      </tfoot>
                    </table>
                  </div>
              </div>
            </div>
        </div>
      </div>
    </div>

    <%@ include file="/WEB-INF/jsp/common/common_js.jsp"%>
        <script type="text/javascript">
            $(function () {
                $(".list-group-item").click(function(){
                    if ( $(this).find("ul") ) {
                        $(this).toggleClass("tree-closed");
                        if ( $(this).hasClass("tree-closed") ) {
                            $("ul", this).hide("fast");
                        } else {
                            $("ul", this).show("fast");
                        }
                    }
                });
                queryPageList(1);
                showMenu();
            });
                        
            $("tbody .btn-success").click(function(){
                window.location.href = "assignadvert.html";
            });
            $("tbody .btn-primary").click(function(){
                window.location.href = "edit.html";
            });

            function pageChange(pageNo){                
                queryPageList(pageNo);              
            } 
            var loadingIndex = -1;            //分页查询
            function queryPageList(pageNo){
                var queryText = $("#queryText").val();
                var jsonData = {"pageNo":pageNo,
                                "pageSize":10,
                                "queryText":queryText}               
                $.ajax({
                    type:"POST",
                    data:jsonData,
                    url:"${CWF_PATH}/advert/doIndex.do",
                    beforeSend : function(){
                        loadingIndex = layer.load(2,{time:10*1000});
                        return true;
                        
                    },success:function(data){
                        layer.close(loadingIndex);
                        if(data.success){
                            var page = data.page;
                            var pageData = data.page.pageList;
                            var html ="";
                            $.each(pageData,function (i,n){
                                
                                html += '<tr>';
                                html += '  <td>'+(i+1)+'</td>';
                                html += '  <td><input type="checkbox"  id="'+n.id+'" name="'+n.name+'"></td>';
                                html += '  <td>'+n.name +'</td>';
                                html += '  <td>'+n.status +'</td>';
                                html += '  <td>';
                                html += '      <button type="button" class="btn btn-success btn-xs" onclick="window.location.href=\'${CWF_PATH}/advert/toAssignPermission.htm?id='+n.id+'\'"><i class=" glyphicon glyphicon-check"></i></button>';
                                html += '      <button type="button" class="btn btn-primary btn-xs" onclick="window.location.href=\'${CWF_PATH}/advert/toUpdate.htm?id='+n.id+'\'"><i class=" glyphicon glyphicon-pencil"></i></button>';
                                html += '      <button type="button" class="btn btn-danger btn-xs" onclick="deleteUser('+n.id+',\''+n.name+'\')"><i class=" glyphicon glyphicon-remove"></i></button>';
                                html += '  </td>';
                                html += '</tr>';
                            });
                            $("#tbodyConcat").html(html);                            //分页页码处理
                            var content ="";
                            if(page.pageNo == 1){
                                content += '<li class="disabled"><a href="#">上一页</a></li>';
                            }else{
                                content += '<li><a href="#" onclick="pageChange('+(page.pageNo-1)+')">上一页</a></li>';
                            }
                            for(var i = 1;i<=page.totalPage;i++){
                                content +='<li><a href="#" onclick="pageChange('+i+')">'+i+'</a></li>';
                                
                            }
                            
                            if(page.pageNo == page.totalPage){
                                content += '<li class="disabled"><a href="#">下一页</a></li>';
                            }else{
                                content += '<li><a href="#" onclick="pageChange(('+(page.pageNo+1)+'))">下一页</a></li>';
                            }
                            
                            $(".pagination").html(content);

                        }else{
                            layer.msg(data.message, {time:1000, icon:6, shift:6});
                        }
                    },error:function(){
                        layer.msg("加载数据失败!", {time:1000, icon:6, shift:6});
                    }                    
                });
            }
            $("#queryBtn").click(function (){
                queryPageList(1)
            });
            
            function deleteUser(id,name){
                layer.confirm("确认要删除"+name+"吗",{icon:3,title:"提示"},function(confirmIndex){ 
                    layer.close(confirmIndex);
                    $.ajax({
                        type:"POST",
                        data:{"id":id},
                        url:"${CWF_PATH}/advert/delete.do",
                        beforeSend:function(){
                            return true;
                        },success:function(data){
                            if(data.success){
                                window.location.href="${CWF_PATH}/advert/index.htm";
                            }else{
                                layer.msg(data.message, {time:1000, icon:6, shift:6});
                            }
                        },errot:function(){
                            layer.msg("删除数据失败!", {time:1000, icon:6, shift:6});
                        }
                    });
                    },function(confirmIndex){
                        layer.close(confirmIndex);
                    }                          
                );                
            }
            $("#allCheckBox").click(function(){
                var checkBoxStatus = this.checked;
                $("#tbodyConcat input[type='checkbox']").prop("checked",checkBoxStatus);                
    
            }); 

             $('#tbodyConcat').on('change',"input[type='checkbox']",function(e){                
                 var selectedCheckBox = $("#tbodyConcat input[type='checkbox']");
                 var isAllCehcked = true;
                $.each(selectedCheckBox,function(){
                    if(!this.checked){
                        $("#allCheckBox").prop("checked",false);
                        isAllCehcked = false;
                        return false;
                        }
                    });
                $("#allCheckBox").prop("checked",isAllCehcked);

            }); 

        </script>
  </body>
</html>
    

2.2使用插件的jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/common/common_taglib.jsp"%>
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <%@ include file="/WEB-INF/jsp/common/common_css.jsp"%>
    <style>
    .tree li {
        list-style-type: none;
        cursor:pointer;
    }
    table tbody tr:nth-child(odd){background:#F4F4F4;}
    table tbody td:nth-child(even){color:#C00;}
    </style>
  </head>
  <body>
    <nav class="navbar navbar-inverse navbar-fixed-top" advert="navigation">
      <div class="container-fluid">
        <div class="navbar-header">
          <div><a class="navbar-brand" style="font-size:32px;" href="#">众筹平台 - 广告管理</a></div>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav navbar-right">
            <%@include file="/WEB-INF/jsp/common/top.jsp" %>
          </ul>
          <form class="navbar-form navbar-right">
            <input type="text" class="form-control" placeholder="Search...">
          </form>
        </div>
      </div>
    </nav>
    <div class="container-fluid">
      <div class="row">
        <div class="col-sm-3 col-md-2 sidebar">
            <div class="tree">
                <jsp:include page="/WEB-INF/jsp/common/menu.jsp"></jsp:include>
            </div>
        </div>
        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
            <div class="panel panel-default">
              <div class="panel-heading">
                <h3 class="panel-title"><i class="glyphicon glyphicon-th"></i> 数据列表</h3>
              </div>
              <div class="panel-body">
                <form class="form-inline" advert="form" style="float:left;">
                  <div class="form-group has-feedback">
                    <div class="input-group">
                      <div class="input-group-addon">查询条件</div>
                      <input id="queryText" class="form-control has-success" type="text" placeholder="请输入查询条件">
                    </div>
                  </div>
                  <button id="queryBtn" type="button" class="btn btn-warning"><i class="glyphicon glyphicon-search"></i> 查询</button>
                </form>
                <button type="button" class="btn btn-danger" style="float:right;margin-left:10px;"><i class=" glyphicon glyphicon-remove"></i> 删除</button>
                <button type="button" class="btn btn-primary" style="float:right;" onclick="window.location.href='${CWF_PATH}/advert/toAdd.htm'"><i class="glyphicon glyphicon-plus"></i> 新增</button>
                <br>
                 <hr style="clear:both;">
                  <div class="table-responsive">
                    <table class="table  table-bordered">
                      <thead>
                        <tr >
                          <th width="30">#</th>
                          <th width="30"><input id="allCheckBox" type="checkbox"></th>
                          <th>广告描述</th>
                          <th>状态</th>
                          <th width="100">操作</th>
                        </tr>
                      </thead>
                      <tbody id="tbodyConcat">
                      </tbody>
                      <tfoot>
                         <tr >
                             <td colspan="5" align="center">
                                <!-- <ul class="pagination">    
                                </ul> -->
                                <div id="Pagination" class="pagination">分页数据显示到这里</div>
                             </td>
                         </tr>
        
                      </tfoot>
                    </table>
                  </div>
              </div>
            </div>
        </div>
      </div>
    </div>
    <%@ include file="/WEB-INF/jsp/common/common_js.jsp"%>
        <script type="text/javascript">
            $(function () {
                $(".list-group-item").click(function(){
                    if ( $(this).find("ul") ) {
                        $(this).toggleClass("tree-closed");
                        if ( $(this).hasClass("tree-closed") ) {
                            $("ul", this).hide("fast");
                        } else {
                            $("ul", this).show("fast");
                        }
                    }
                });
                queryPageList(0);//插件0表示第一页
                showMenu();
            });            
            $("tbody .btn-success").click(function(){
                window.location.href = "assignadvert.html";
            });
            $("tbody .btn-primary").click(function(){
                window.location.href = "edit.html";
            });

            var loadingIndex = -1;
            function queryPageList(pageNo){
                var queryText = $("#queryText").val();
                var jsonData = {"pageNo":(pageNo+1),//插件0表示第一页,但是后台查询还是从1开始
                                "pageSize":10,
                                "queryText":queryText}               
                $.ajax({
                    type:"POST",
                    data:jsonData,
                    url:"${CWF_PATH}/advert/doIndex.do",
                    beforeSend : function(){
                        loadingIndex = layer.load(2,{time:10*1000});
                        return true;
                        
                    },success:function(data){
                        layer.close(loadingIndex);
                        if(data.success){
                            var page = data.page;
                            var pageData = data.page.pageList;
                            var html ="";
                            $.each(pageData,function (i,n){
                                
                                html += '<tr>';
                                html += '  <td>'+(i+1)+'</td>';
                                html += '  <td><input type="checkbox"  id="'+n.id+'" name="'+n.name+'"></td>';
                                html += '  <td>'+n.name +'</td>';
                                html += '  <td>'+n.status +'</td>';
                                html += '  <td>';
                                html += '      <button type="button" class="btn btn-success btn-xs" onclick="window.location.href=\'${CWF_PATH}/advert/toAssignPermission.htm?id='+n.id+'\'"><i class=" glyphicon glyphicon-check"></i></button>';
                                html += '      <button type="button" class="btn btn-primary btn-xs" onclick="window.location.href=\'${CWF_PATH}/advert/toUpdate.htm?id='+n.id+'\'"><i class=" glyphicon glyphicon-pencil"></i></button>';
                                html += '      <button type="button" class="btn btn-danger btn-xs" onclick="deleteUser('+n.id+',\''+n.name+'\')"><i class=" glyphicon glyphicon-remove"></i></button>';
                                html += '  </td>';
                                html += '</tr>';
                            });
                            $("#tbodyConcat").html(html);                            
                            // 创建分页,page.totalSize表示分页数据的总条数(比如返回97条数据,10条一页,按每页10条数据表示,一共有10页),totalsize就是97
                            $("#Pagination").pagination(page.totalSize, {
                                num_edge_entries: 1, //边缘页数
                                num_display_entries: 4, //主体页数
                                callback: queryPageList,
                                items_per_page:10, //每页显示1项
                                current_page:(page.pageNo-1),
                                prev_text:"上一页",
                                next_text:"下一页"
                            });
                            /* var content ="";
                            if(page.pageNo == 1){
                                content += '<li class="disabled"><a href="#">上一页</a></li>';
                            }else{
                                content += '<li><a href="#" onclick="pageChange('+(page.pageNo-1)+')">上一页</a></li>';
                            }
                            for(var i = 1;i<=page.totalPage;i++){
                                content +='<li><a href="#" onclick="pageChange('+i+')">'+i+'</a></li>';
                                
                            }
                            
                            if(page.pageNo == page.totalPage){
                                content += '<li class="disabled"><a href="#">下一页</a></li>';
                            }else{
                                content += '<li><a href="#" onclick="pageChange(('+(page.pageNo+1)+'))">下一页</a></li>';
                            }
                            
                            $(".pagination").html(content); */

                        }else{
                            layer.msg(data.message, {time:1000, icon:6, shift:6});
                        }
                    },error:function(){
                        layer.msg("加载数据失败!", {time:1000, icon:6, shift:6});
                    }                    
                });
            }
            $("#queryBtn").click(function (){
                queryPageList(0)
            });
            
            function deleteUser(id,name){
                layer.confirm("确认要删除"+name+"吗",{icon:3,title:"提示"},function(confirmIndex){ 
                    layer.close(confirmIndex);
                    $.ajax({
                        type:"POST",
                        data:{"id":id},
                        url:"${CWF_PATH}/advert/delete.do",
                        beforeSend:function(){
                            return true;
                        },success:function(data){
                            if(data.success){
                                window.location.href="${CWF_PATH}/advert/index.htm";
                            }else{
                                layer.msg(data.message, {time:1000, icon:6, shift:6});
                            }
                        },errot:function(){
                            layer.msg("删除数据失败!", {time:1000, icon:6, shift:6});
                        }
                    });
                    },function(confirmIndex){
                        layer.close(confirmIndex);
                    }                          
                );                
            }
            $("#allCheckBox").click(function(){
                var checkBoxStatus = this.checked;
                $("#tbodyConcat input[type='checkbox']").prop("checked",checkBoxStatus);                
    
            }); 

             $('#tbodyConcat').on('change',"input[type='checkbox']",function(e){                
                 var selectedCheckBox = $("#tbodyConcat input[type='checkbox']");
                 var isAllCehcked = true;
                $.each(selectedCheckBox,function(){
                    if(!this.checked){
                        $("#allCheckBox").prop("checked",false);
                        isAllCehcked = false;
                        return false;
                        }
                    });
                $("#allCheckBox").prop("checked",isAllCehcked);

            }); 

        </script>
  </body>
</html>
    

3.Page类

package com.stuwork.crowdfunding.util;

import java.util.List;

public class Page {
    
    private Integer pageNo;//当前页数
    private Integer pageSize;//每页显示数
    private Integer totalPage;//总页数
    private Integer totalSize;//总记录数
    private List pageList;
    
    public Page(Integer pageNo,Integer pageSize){
        
        if(pageNo <=0){
            pageNo = 1;
        }else{
            this.pageNo = pageNo;
        }
        if(pageSize <= 0){
            pageSize = 10;
        }else{
            this.pageSize = pageSize;
        }
        
    }
    
    public Integer getPageNo() {
        return pageNo;
    }
    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }
    public Integer getPageSize() {
        return pageSize;
    }
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }
    public Integer getTotalPage() {
        return totalPage;
    }
    private void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }
    public Integer getTotalSize() {
        return totalSize;
    }
    public void setTotalSize(Integer totalSize) {
        this.totalSize = totalSize;
        this.totalPage = (totalSize%pageSize)==0?(totalSize/pageSize):(totalSize/pageSize+1);
    }
    public List getPageList() {
        return pageList;
    }
    public void setPageList(List pageList) {
        this.pageList = pageList;
    }
    
    //数据库查询开始索引
    public Integer getStartIndex(){
        return (this.pageNo - 1)*pageSize;
    }
    

}

4.controller的方法

        //分页同步请求(参数改为map接受,json封装)条件查询
        @ResponseBody
        @RequestMapping("/doIndex")
        public Object index(@RequestParam(value="pageNo",required=false,defaultValue="1") Integer pageNo,
                            @RequestParam(value="pageSize",required=false,defaultValue="10")Integer pageSize,
                            String queryText){
            AjaxResult result = new AjaxResult();
            
            try {
                Map<String,Object> map = new HashMap<String,Object>();
                map.put("pageNo", pageNo);
                map.put("pageSize", pageSize);
                if(StringUtil.isNotEmpty(queryText)){
                    if(queryText.equals("%")){
                        //斜线本身需要转译,regex中两个\\表示一个\ ; Java中也是两个\\表示一个\;所以,需要四个斜线
                        queryText = queryText.replaceAll("%", "\\\\%");
                    }
                    map.put("queryText", queryText);
                }        
                Page page = advertService.getPage(map);                
                result.setSuccess(true);
                result.setPage(page);
            } catch (Exception e) {
                result.setSuccess(false);
                result.setMessage("查询数据失败");
                e.printStackTrace();
            }
            return result;
        }

5.service方法

    public Page getPage(Map<String, Object> map) {

        //通过当前页,和每页显示的条数,取得mysql的查询索引startIndex 
        Page page = new Page((Integer) map.get("pageNo"), (Integer) map.get("pageSize"));
        Integer startIndex = page.getStartIndex();
        map.put("startIndex", startIndex);
        List<Advertisement> pageList = advertisementMapper.queryList(map);
        //取得分页的总记录数据
        Integer totalSize = advertisementMapper.queryCount(map);
        page.setPageList(pageList);
        page.setTotalSize(totalSize);
        return page;
    }

6.mapper方法

    <select id="queryList" parameterType="map" resultMap="BaseResultMap">
        SELECT
        id,
        name,
        iconpath,
        status,
        url,
        userid
        FROM t_advertisement
        <where>
            <if test="queryText != null">
                name like concat("%",#{queryText},"%")
            </if>
        </where>
        ORDER BY id DESC
        LIMIT #{startIndex}, #{pageSize}

    </select>
Last Updated 2024/4/6 10:47:15