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. <script src="jquery.min.js"></script>
  5. <script src="bootstrap.min.js"></script>
  6. <script src="bootstrap-table.js"></script>
  7. <-- 表格汉化js -->
  8. <script src="bootstrap-table-zh-CN.js"></script>

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

对于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. 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的代码:

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

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

包装返回数据的代码:

  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. }

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

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

bootstrap table + spring + springmvc + mybatis 实现从前端到后端的表格分页的更多相关文章

  1. Spring+SpringMVC+MyBatis整合进阶篇(四)RESTful实战(前端代码修改)

    前言 前文<RESTful API实战笔记(接口设计及Java后端实现)>中介绍了RESTful中后端开发的实现,主要是接口地址修改和返回数据的格式及规范的修改,本文则简单介绍一下,RES ...

  2. 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍

    试水 一直想去搭建个自己的个人博客,苦于自己的技术有限,然后也个人也比较懒散.想动而不能动,想动而懒得动,就这么一直拖到了现在.总觉得应该把这几年来的所学总结一番,这样才能有所成长. 不知在何时,那就 ...

  3. 用 eclipse 创建一个简单的 meaven spring springMvc mybatis 项目

    下面是整体步骤: 1: 先创建一个Maven 项目: 选择跳过骨架: 因为要搭建的是 web 项目  所以这个地方选择 war 包; 点击完成 这样就完成 Maven项目的搭建: 接下俩 先把 Mav ...

  4. SSM(Spring,SpringMVC,Mybatis)框架整合项目

    快速上手SSM(Spring,SpringMVC,Mybatis)框架整合项目 环境要求: IDEA MySQL 8.0.25 Tomcat 9 Maven 3.6 数据库环境: 创建一个存放书籍数据 ...

  5. Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能

    日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...

  6. javaweb项目-医者天下 (Spring+SpringMVC+MyBatis)

    项目下载地址:http://download.csdn.net/detail/qq_33599520/9826683 项目完整结构图: 项目简介: 医者天下项目是一个基于Spring+SpringMV ...

  7. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)--S ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...

随机推荐

  1. 全文检索(SOLR)前端应用浅析 (转)

    最近在一个关于知识管理系统中检索的一个功能方案,找到了一个很好的参考应用方案嘎要的分析一下,希望有类似应用的可以交流交流. 提起全文检索,Lucene的大名估计地球人都知道,通过这么多年的发展,外围的 ...

  2. [leetcode]Plus One @ Python

    原题地址:https://oj.leetcode.com/problems/plus-one/ 题意: Given a non-negative number represented as an ar ...

  3. [leetcode]Palindrome Partitioning @ Python

    原题地址:https://oj.leetcode.com/problems/palindrome-partitioning/ 题意: Given a string s, partition s suc ...

  4. 不用IDE写C#的Hello World

    用Visual Studio等IDE写C#的Hello World非常简单,但脱离了IDE你能不能打印出Hello World呢?这不是说工作时脱离IDE,而是学习一下CLR的执行模型. Hello ...

  5. PL/SQL Developer执行.sql文件的几种方法

    1.复制SQL 第一种方法非常常见,也非常简单,先用文本编辑器打开.sql文件,然后把sql复制到PL/SQL Developer的SQL窗口或者命令窗口中运行就行了,本来我也是这么做的,但是我将SQ ...

  6. 关于UI设计中的交互软件Axure7.0运用

    Axure RP是一个专业的快速原型设计工具.让负责定义需求和规格.设计功能和界面的人员能够快速创建应用软件或Web网站的线框图.流程图.原型和规格说明文档. 作为专业的原型设计工具,它能快速.高效的 ...

  7. 【ElasticSearch】ElasticSearch-索引优化-自定义索引

    ElasticSearch-索引优化-自定义索引 es 指定 索引 字段_百度搜索 [es]创建索引和映射 - 匡子语 - 博客园 reindex,增加字段,并新增数据 - Elastic中文社区 e ...

  8. offsetof与container_of宏[总结]

    1.前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大.offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址 ...

  9. IDEA初使用:解决搜狗输入法不跟随BUG

    IDEA初使用:解决搜狗输入法不跟随BUG https://blog.csdn.net/qq_27905183/article/details/79119237 嗯,学习了: 然而,效果不明显:

  10. 闲聊DNN CTR预估模型

    原文:http://www.52cs.org/?p=1046 闲聊DNN CTR预估模型 Written by b manongb 作者:Kintocai, 北京大学硕士, 现就职于腾讯. 伦敦大学张 ...