1.使用准备

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

 


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.前端代码

页面代码:

 


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代码:



 

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. 'id',  
10. '序号',  
11.     }, {  
12. 'year',  
13. '年度',  
14.     }, {  
15. 'month',  
16. '月份',  
17.     },{  
18. 'creDate',  
19. '日期',  
20.     },{  
21. 'merBasicId',  
22. '商户id',  
23.     },{  
24. 'merName',  
25. '商户名称',  
26.     },{  
27. 'categoryTypeName',  
28. '商户类型',  
29.     },{  
30. 'city',  
31. '城市',  
32.     },{  
33. 'area',  
34. '区域',  
35.     },{  
36. 'tradeAreaName',  
37. '商圈',  
38. //页面需要展示的列,后端交互对象的属性  
39. true,  //开启分页  
40. 'server',//服务器端分页  
41. //默认加载页  
42. //每页数据  
43. //可选的每页数据  
44. function (params) {  
45. return {  
46. "#txtStartDate").val(),  
47. "#txtEndDate").val(),  
48. "#txtMerName").val(),  
49.             pageSize: params.limit,  
50.             offset: params.offset  
51.         }  
52. //请求服务器数据时的参数  
53. '/console/finance/channelDivideDetails/data' //服务器数据的加载地址  
54. });


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

4.后端代码

 


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. "[]";  
6. new HashMap<String, Object>();  
7. "startDate");  
8. "endDate");  
9. "merName");  
10. int pageSize = jsonObj.getIntValue("pageSize");  
11. int offset = jsonObj.getIntValue("offset");  
12. try {  
13. "startDate", startDateStr);  
14. "endDate", endDateStr);  
15. if(merName != null && merName != "") {  
16. "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. "系统异常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的代码:

 

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. new PageBounds(offset / pageSize + 1, pageSize);  
15. return pageBounds;  
16.   }

 

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

包装返回数据的代码:

 

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


 

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

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