• bootstrap table + spring + springmvc + mybatis 实现从前端到后端的表格分页


    1.使用准备

    前台需要的资源文件,主要有Bootstrap3相关css、js以及bootstrap Table相关css、js:

    [javascript] view plain copy
     
    1. <-- 样式 -->  
    2. <link rel="stylesheet" href="bootstrap.min.css">  
    3. <link rel="stylesheet" href="bootstrap-table.css">  
    4.   
    5. <script src="jquery.min.js"></script>  
    6. <script src="bootstrap.min.js"></script>  
    7. <script src="bootstrap-table.js"></script>  
    8. <-- 表格汉化js -->  
    9. <script src="bootstrap-table-zh-CN.js"></script>  
    10.    

    以上这些插件可以到这里下载http://bootstrap-table.wenzhixin.NET.cn/zh-cn/getting-started/ (官方文档地址)。

    2.使用方法

    对于bootstrap table 可以通过data 属性或者JavaScript 来启用bootstrap table 插件,显示丰富的功能。

    这里推荐使用javascript来启用bootstrap table插件来使用bootstrap table,可以实现js和html的分离,代码可以重用,下面我介绍的时候也只介绍这种方法。

    3.前端代码

    页面代码:

    [html] view plain copy
     
    1. <-- 以下是一些需要的css、js -->  
    2. <-- 样式 -->  
    3. <link rel="stylesheet" href="bootstrap.min.css">  
    4. <link rel="stylesheet" href="bootstrap-table.css">  
    5.   
    6. <script src="jquery.min.js"></script>  
    7. <script src="bootstrap.min.js"></script>  
    8. <script src="bootstrap-table.js"></script>  
    9. <-- 表格汉化js -->  
    10. <script src="bootstrap-table-zh-CN.js"></script>  
    11.   
    12. <-- 这是html主体代码,只需要这一个就可以了 -->  
    13. <div ><table id="tableList" class="table table-striped"></table</div>  
    
    

    以上代码省略了部分html标签,只粘贴了主要部分。

    js代码:

    [javascript] view plain copy
     
    1. //通过bootstrap Table方法refresh重新加载数据  
    2. function showData() {  
    3.     $('#tableList').bootstrapTable('refresh');  
    4. }  
    5.   
    6. //官方使用方法的语法:<code>$('#table').bootstrapTable('method', parameter)</code>  
    7. $('#tableList').bootstrapTable({  
    8.     columns: [{  
    9.         field: 'id',  
    10.         title: '序号',  
    11.     }, {  
    12.         field: 'year',  
    13.         title: '年度',  
    14.     }, {  
    15.         field: 'month',  
    16.         title: '月份',  
    17.     },{  
    18.         field: 'creDate',  
    19.         title: '日期',  
    20.     },{  
    21.         field: 'merBasicId',  
    22.         title: '商户id',  
    23.     },{  
    24.         field: 'merName',  
    25.         title: '商户名称',  
    26.     },{  
    27.         field: 'categoryTypeName',  
    28.         title: '商户类型',  
    29.     },{  
    30.         field: 'city',  
    31.         title: '城市',  
    32.     },{  
    33.         field: 'area',  
    34.         title: '区域',  
    35.     },{  
    36.         field: 'tradeAreaName',  
    37.         title: '商圈',  
    38.     }],//页面需要展示的列,后端交互对象的属性  
    39.     pagination: true,  //开启分页  
    40.     sidePagination: 'server',//服务器端分页  
    41.     pageNumber: 1,//默认加载页  
    42.     pageSize: 20,//每页数据  
    43.     pageList: [20, 50, 100, 500],//可选的每页数据  
    44.     queryParams: function (params) {  
    45.         return {  
    46.         startDate: $("#txtStartDate").val(),  
    47.         endDate: $("#txtEndDate").val(),  
    48.         merName: $("#txtMerName").val(),  
    49.             pageSize: params.limit,  
    50.             offset: params.offset  
    51.         }  
    52.     },//请求服务器数据时的参数  
    53.     url: rootURL+'/console/finance/channelDivideDetails/data' //服务器数据的加载地址  
    54. });  

    对于parameter更多的描述,具体可以参考前面发的官方文档的链接。

    4.后端代码

    [java] view plain copy
     
    1. //根据传入的pageSize,offset参数决定查哪一页,根据其他参数决定查询哪些数据   
    2. @RequestMapping( value = "/data", method = RequestMethod.POST, produces = "application/json;charset=UTF-8" )  
    3.   @ResponseBody  
    4.   public Object channelDivideDetailsData( HttpServletRequest request, @RequestBody JSONObject jsonObj ) {  
    5.     String html = "[]";  
    6.     Map<String, Object> map = new HashMap<String, Object>();  
    7.     String startDateStr = jsonObj.getString("startDate");  
    8.     String endDateStr = jsonObj.getString("endDate");  
    9.     String merName = jsonObj.getString("merName");  
    10.     int pageSize = jsonObj.getIntValue("pageSize");  
    11.     int offset = jsonObj.getIntValue("offset");  
    12.     try {  
    13.       map.put("startDate", startDateStr);  
    14.       map.put("endDate", endDateStr);  
    15.       if(merName != null && merName != "") {  
    16.         map.put("merName", merName);  
    17.       }  
    18.       PageBounds pageBounds = JSPUtil.getPagerBoundsByParameter(pageSize, offset);  
    19.       List<FChannelDivideDetails> list = channelDivideDetailsService.getChannelDivideDetails(map, pageBounds);  
    20.       if(list != null && list.size() > 0) {  
    21.         Map<String, Object> retMap =  
    22.             (Map<String, Object>) JSPUtil.pagelistToJSONMapNew((PageList<FChannelDivideDetails>) list);  
    23.         html = JSON.toJSONStringWithDateFormat(retMap, DATE_FORMATE_STR);  
    24.       }  
    25.     }  
    26.     catch(Exception e) {  
    27.       logger.error("系统异常e:{}", e);  
    28.       this.buildResponse(ErrorCode.system_1000);  
    29.     }  
    30.     return html;  
    31.   }  

    4.1这里要注意的是前端传过来的参数是json格式的,所以用@RequestBody注解后我们就能将前端传过来的参数取出来。

    4.2代码里用到了mybatis的一个分页插件mybatis-paginator,我们只需要包装出一个PageBounds,参数传入service层,插件会自动帮我们代理实现分页,就不需要我们自己再写分页代码了, mybatis-paginator的具体使用教程搜索关键字查看相关文章即可。

    包装PageBounds的代码:

    [java] view plain copy
     
    1. /** 
    2.    * 取得分页对象 
    3.    *  
    4.    * @param pageSize 
    5.    * @param offset 
    6.    * @return 
    7.    */  
    8.   @SuppressWarnings( "unused" )  
    9.   public static PageBounds getPagerBoundsByParameter( int pageSize, int offset ) {  
    10.     if(pageSize == 0) {  
    11.       return null;  
    12.     }  
    13.   
    14.     PageBounds pageBounds = new PageBounds(offset / pageSize + 1, pageSize);  
    15.     return pageBounds;  
    16.   }  

    4.3最后返回前端的json数据包括total、rows两个对象,total表示数据总数,rows表示需要显示的数据。必须按照这种格式返回才行。

    包装返回数据的代码:

    [java] view plain copy
     
    1. @SuppressWarnings( { "rawtypes", "unchecked" } )  
    2.  public static Object pagelistToJSONMapNew( PageList list ) {  
    3.    Map<String, Object> map = new HashMap<String, Object>();  
    4.    if(list != null) {  
    5.      Paginator paginator = list.getPaginator();  
    6.      map.put("total", paginator.getTotalCount());  
    7.      map.put("rows", new ArrayList(list));  
    8.    }  
    9.    return map;  
    10.  }  

    以上就实现了从前端到后端的表格分页查询。

    目前主要使用到了查询分页,具体其他的操作可以参考查询相关代码。

  • 相关阅读:
    Spark的协同过滤.Vs.Hadoop MR
    IAAS: IT公司去IOE-Alibaba系统构架解读
    八种Docker容器开发模式解析
    Docker的特性解析
    Docker的官网在线--中文教程
    三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)
    ES: 机器学习、专家系统、控制系统的数学映射
    算法设计之—常用算法之-分支界定法
    图像特征综述
    CaptCha的现状与未来
  • 原文地址:https://www.cnblogs.com/onetwo/p/6390264.html
Copyright © 2020-2023  润新知