bootstrap table + spring + springmvc + mybatis 实现从前端到后端的表格分页
1.使用准备
前台需要的资源文件,主要有Bootstrap3相关css、js以及bootstrap Table相关css、js:
- <-- 样式 -->
- <link rel="stylesheet" href="bootstrap.min.css">
- <link rel="stylesheet" href="bootstrap-table.css">
- <script src="jquery.min.js"></script>
- <script src="bootstrap.min.js"></script>
- <script src="bootstrap-table.js"></script>
- <-- 表格汉化js -->
- <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.前端代码
页面代码:
- <-- 以下是一些需要的css、js -->
- <-- 样式 -->
- <link rel="stylesheet" href="bootstrap.min.css">
- <link rel="stylesheet" href="bootstrap-table.css">
- <script src="jquery.min.js"></script>
- <script src="bootstrap.min.js"></script>
- <script src="bootstrap-table.js"></script>
- <-- 表格汉化js -->
- <script src="bootstrap-table-zh-CN.js"></script>
- <-- 这是html主体代码,只需要这一个就可以了 -->
- <div ><table id="tableList" class="table table-striped"></table> </div>
以上代码省略了部分html标签,只粘贴了主要部分。
js代码:
- //通过bootstrap Table方法refresh重新加载数据
- function showData() {
- $('#tableList').bootstrapTable('refresh');
- }
- //官方使用方法的语法:<code>$('#table').bootstrapTable('method', parameter)</code>
- $('#tableList').bootstrapTable({
- columns: [{
- field: 'id',
- title: '序号',
- }, {
- field: 'year',
- title: '年度',
- }, {
- field: 'month',
- title: '月份',
- },{
- field: 'creDate',
- title: '日期',
- },{
- field: 'merBasicId',
- title: '商户id',
- },{
- field: 'merName',
- title: '商户名称',
- },{
- field: 'categoryTypeName',
- title: '商户类型',
- },{
- field: 'city',
- title: '城市',
- },{
- field: 'area',
- title: '区域',
- },{
- field: 'tradeAreaName',
- title: '商圈',
- }],//页面需要展示的列,后端交互对象的属性
- pagination: true, //开启分页
- sidePagination: 'server',//服务器端分页
- pageNumber: 1,//默认加载页
- pageSize: 20,//每页数据
- pageList: [20, 50, 100, 500],//可选的每页数据
- queryParams: function (params) {
- return {
- startDate: $("#txtStartDate").val(),
- endDate: $("#txtEndDate").val(),
- merName: $("#txtMerName").val(),
- pageSize: params.limit,
- offset: params.offset
- }
- },//请求服务器数据时的参数
- url: rootURL+'/console/finance/channelDivideDetails/data' //服务器数据的加载地址
- });
对于parameter更多的描述,具体可以参考前面发的官方文档的链接。
4.后端代码
- //根据传入的pageSize,offset参数决定查哪一页,根据其他参数决定查询哪些数据
- @RequestMapping( value = "/data", method = RequestMethod.POST, produces = "application/json;charset=UTF-8" )
- @ResponseBody
- public Object channelDivideDetailsData( HttpServletRequest request, @RequestBody JSONObject jsonObj ) {
- String html = "[]";
- Map<String, Object> map = new HashMap<String, Object>();
- String startDateStr = jsonObj.getString("startDate");
- String endDateStr = jsonObj.getString("endDate");
- String merName = jsonObj.getString("merName");
- int pageSize = jsonObj.getIntValue("pageSize");
- int offset = jsonObj.getIntValue("offset");
- try {
- map.put("startDate", startDateStr);
- map.put("endDate", endDateStr);
- if(merName != null && merName != "") {
- map.put("merName", merName);
- }
- PageBounds pageBounds = JSPUtil.getPagerBoundsByParameter(pageSize, offset);
- List<FChannelDivideDetails> list = channelDivideDetailsService.getChannelDivideDetails(map, pageBounds);
- if(list != null && list.size() > 0) {
- Map<String, Object> retMap =
- (Map<String, Object>) JSPUtil.pagelistToJSONMapNew((PageList<FChannelDivideDetails>) list);
- html = JSON.toJSONStringWithDateFormat(retMap, DATE_FORMATE_STR);
- }
- }
- catch(Exception e) {
- logger.error("系统异常e:{}", e);
- this.buildResponse(ErrorCode.system_1000);
- }
- return html;
- }
4.1这里要注意的是前端传过来的参数是json格式的,所以用@RequestBody注解后我们就能将前端传过来的参数取出来。
4.2代码里用到了mybatis的一个分页插件mybatis-paginator,我们只需要包装出一个PageBounds,参数传入service层,插件会自动帮我们代理实现分页,就不需要我们自己再写分页代码了, mybatis-paginator的具体使用教程搜索关键字查看相关文章即可。
包装PageBounds的代码:
- /**
- * 取得分页对象
- *
- * @param pageSize
- * @param offset
- * @return
- */
- @SuppressWarnings( "unused" )
- public static PageBounds getPagerBoundsByParameter( int pageSize, int offset ) {
- if(pageSize == 0) {
- return null;
- }
- PageBounds pageBounds = new PageBounds(offset / pageSize + 1, pageSize);
- return pageBounds;
- }
4.3最后返回前端的json数据包括total、rows两个对象,total表示数据总数,rows表示需要显示的数据。必须按照这种格式返回才行。
包装返回数据的代码:
- @SuppressWarnings( { "rawtypes", "unchecked" } )
- public static Object pagelistToJSONMapNew( PageList list ) {
- Map<String, Object> map = new HashMap<String, Object>();
- if(list != null) {
- Paginator paginator = list.getPaginator();
- map.put("total", paginator.getTotalCount());
- map.put("rows", new ArrayList(list));
- }
- return map;
- }
以上就实现了从前端到后端的表格分页查询。
目前主要使用到了查询分页,具体其他的操作可以参考查询相关代码。
bootstrap table + spring + springmvc + mybatis 实现从前端到后端的表格分页的更多相关文章
- Spring+SpringMVC+MyBatis整合进阶篇(四)RESTful实战(前端代码修改)
前言 前文<RESTful API实战笔记(接口设计及Java后端实现)>中介绍了RESTful中后端开发的实现,主要是接口地址修改和返回数据的格式及规范的修改,本文则简单介绍一下,RES ...
- 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍
试水 一直想去搭建个自己的个人博客,苦于自己的技术有限,然后也个人也比较懒散.想动而不能动,想动而懒得动,就这么一直拖到了现在.总觉得应该把这几年来的所学总结一番,这样才能有所成长. 不知在何时,那就 ...
- 用 eclipse 创建一个简单的 meaven spring springMvc mybatis 项目
下面是整体步骤: 1: 先创建一个Maven 项目: 选择跳过骨架: 因为要搭建的是 web 项目 所以这个地方选择 war 包; 点击完成 这样就完成 Maven项目的搭建: 接下俩 先把 Mav ...
- SSM(Spring,SpringMVC,Mybatis)框架整合项目
快速上手SSM(Spring,SpringMVC,Mybatis)框架整合项目 环境要求: IDEA MySQL 8.0.25 Tomcat 9 Maven 3.6 数据库环境: 创建一个存放书籍数据 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能
日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...
- javaweb项目-医者天下 (Spring+SpringMVC+MyBatis)
项目下载地址:http://download.csdn.net/detail/qq_33599520/9826683 项目完整结构图: 项目简介: 医者天下项目是一个基于Spring+SpringMV ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)--S ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...
随机推荐
- emouse思·睿—评论与观点整理之一
虽说我主要做的硬件,平时的兴趣爱好比较关注移动互联网,混迹于虎嗅.爱范儿.雷锋网.36Kr.cnBeta.瘾科技.i黑马.TechWeb等这类科技以及创业媒体,遗憾的是系统的去写的并不多,好在还算充分 ...
- Risc-V指令集
https://riscv.org/specifications/ Risc-V文档包括:用户层指令集文档和特权架构文档,下面这两个文件的官网链接. User-Level ISA Specificat ...
- 附9 elasticsearch-curator + Linux定时任务
官网教程入口:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html 一.下载安装 下载:sud ...
- Python调用C/C++程序
编程中会遇到调用其他语言到库,这里记录一下Python调用C++. Python底层是C, 所以调用C还是比较方便.调用C++有些麻烦. Python提供了ctypes, 方便将Python类型转为C ...
- 从 SVM 到多核学习 MKL
SVM是机器学习里面最强大最好用的工具之一,它试图在特征空间里寻找一个超平面,以最小的错分率把正负样本分开.它的强大之处还在于,当样本在原特征空间中线性不可分,即找不到一个足够好的超平面时,可以利用核 ...
- Install OpenCV-Python in Ubuntu
之前安装python版opencv,需要下载whl文件,进行安装,这是在window环境下的: 安装opencv_python,下载whl包 安装系统python下的opencv 今天发现一个简单的方 ...
- LSTM简介以及数学推导(FULL BPTT)
http://blog.csdn.net/a635661820/article/details/45390671 前段时间看了一些关于LSTM方面的论文,一直准备记录一下学习过程的,因为其他事儿,一直 ...
- Robotframework(4):创建变量的类型和使用
转载:http://www.cnblogs.com/CCGGAAG/p/7800321.html 实际的测试过程中,编写脚本时,我们需要创建一些变量来暂时或者永久性的存储数据,那么在Robotfram ...
- Docker 容器入门
1.1 容器简介 1.1.1 什么是 Linux 容器 Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件.容器提供的镜像包含了应用的所有依赖项, ...
- ActiveMQ持久化方式
ActiveMQ持久化方式 发表于8个月前(2014-09-04 15:55) 阅读(686) | 评论(0) 17人收藏此文章, 我要收藏 赞1 慕课网,程序员升职加薪神器,点击免费学习 摘要 ...