Bootstrap table的后台数据的获取
来源:互联网 发布:第二次工业革命 知乎 编辑:程序博客网 时间:2024/05/17 07:08
Bootstrap table的后台数据的获取
最近做了一个项目,牵涉到bootstrap table的使用,但是由于是第一次了解这个插件,所以对这个插件的后台数据获取有一些不了解,在网上多方查找资料后,最终才弄出来,在这里也记录一下操作流程,就当做个笔记了。
代码前提:
- 前端的bootstrap table的代码已经写好,只需要加入后台,前端代码就不再自习介绍,只是说一些简单的配置。
- 使用的是struts2框架。
现在正是开始:
由于我负责的功能是将数据库里的表单信息,通过bootstrap table传到页面上显示。所以首先考虑的就是把值传到前端。
而且我们的项目定位的是服务器,所以按照服务器的标准来配置。
首先我们先放出插件的主要代码:
url : 'firmSoftTable.action', // 请求后台的URL(*) method : 'post', // 请求方式(*)post/get contentType: "application/x-www-form-urlencoded",//post请求的话就加上这个句话 toolbar : '#toolbar', // 工具按钮用哪个容器 striped : true, // 是否显示行间隔色 cache : false, // 是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination : true, // 是否显示分页(*) sortable : false, // 是否启用排序 sortOrder : "asc", // 排序方式 queryParams : oTableInit.queryParams,// 传递参数(*) sidePagination : "server", // 分页方式:client客户端分页,server服务端分页(*) pageNumber : 1, // 初始化加载第一页,默认第一页 pageSize : 10, // 每页的记录行数(*) pageList : [ 10, 25, 50, 100 ], // 可供选择的每页的行数(*) search : false, // 是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch : true, showColumns : false, // 是否显示所有的列 showRefresh : false, // 是否显示刷新按钮 minimumCountColumns :2, // 最少允许的列数 clickToSelect : true, // 是否启用点击选中行 height : "",// 行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 uniqueId : "ID", // 每一行的唯一标识,一般为主键列 showToggle : false, // 是否显示详细视图和列表视图的切换按钮 cardView : false, // 是否显示详细视图 detailView : false, // 是否显示父子表 locale: "zh-CN", //中文支持 queryParams: function (params) {//自定义参数,这里的参数是传给后台的,我这是是分页用的 return {//这里的params是table提供的 offset: params.offset,//从数据库第几条记录开始 limit: params.limit//找多少条 }; },
其中:我们使用的是post请求方式,所以必须加上下面这句话,如果不加的话,后台可能会接受不到数据,具体的后面再介绍。
contentType: "application/x-www-form-urlencoded",
重点来了:我们怎样连接到后台的action?
在代码里面有个url的属性,而url后面的值就是要使用的action的名字。我的路径如下:
url : 'firmSoftTable.action', // 请求后台的URL(*)
由于bootstrap插件只接受JSON数据,所以我们需要重新配置一下struts2的xml文件:
<package name="firm-table" extends="json-default" namespace="/" > <action name="firmSoftTable" method="firmAdminSoft" class="firmAdminAction"> <result name="success" type="json"> <param name="root">returndata</param> </result> </action></package>
因为后台传回的是JSON数据,不能通过常规的配置来进行传输,所以我们要重新创建一个package,然后继承只“json-default”。然后在返回类型中写上type=”json”。如果常规的package直接写返回类型为json的话会报错。然后param的name为root,原因是root是表示返回对象的层级为根部。所以一般我们都写root。
然后回到后台的代码:
我们首先将数据库的数据拿出来,放在一个List的列表里,并且将每个对象设为Map类型。怎样取数据这就不罗列了。
由于我们的对象是服务端,所以我们会将数据分页,而分页的前端代码上面已经写出,值得注意的是:
queryParams: function (params) {//自定义参数,这里的参数是传给后台的,我这是是分页用的 return {//这里的params是table提供的 offset: params.offset,//从数据库第几条记录开始 limit: params.limit//找多少条 }; },
这一段代码,由于我们需要将数据分布读出来,所以我们就需要前端和后端进行协商,怎么读数据,所以这里就是关键。
- offset:表示已经读了多少条数据。
- limit:表示分页后,每页的信息个数。
我们需要将这两个数据传回后台。然后进行接收,在这里如果不加上前面的contentType这句话,是接收不到数据的。
下面是整个后台所有的信息:
public String firmAdminSoft() throws UnsupportedEncodingException{ System.out.println("------------查看所有的软件信息------------"); HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); int id=(int) session.getAttribute("id");// 登录厂商 //获取一页显示的个数 String limit1=request.getParameter("limit"); int limit=Integer.parseInt(limit1); //获取已经显示的个数,然后除以一页的个数就是页数 String offset1=request.getParameter("offset"); int offset=Integer.parseInt(offset1)/limit; //初始化最大的读取个数 int max=0; System.out.println("已经进来了..."); System.out.println("页数为"+offset); System.out.println("页面大小为"+limit); //获取数据库中所有的数据 List <SoftInfo>allsoft=this.firmAdminService.firmAdminSoft(id); // session.setAttribute("allsoft", allsoft); if(allsoft!=null){ System.out.println("成功取得"+allsoft.size()+"条数据..."); }else{ System.out.println("查询失败..."); }// System.out.println("softInfo"+allsoft); JSONArray arr=new JSONArray(); //判定最大的读取个数 if(offset*limit+limit<=allsoft.size()){ max=offset*limit+limit; }else{ max=allsoft.size(); } //读取数据 for(int i=offset*limit;i<max;i++){ JSONObject ob=new JSONObject(); //将单独的数据装进json数据 Map map=(Map)allsoft.get(i); ob.put("softid", map.get("softid")); ob.put("name", map.get("name")); ob.put("type", map.get("type")); ob.put("date", map.get("date").toString()); ob.put("serial", map.get("serial")); ob.put("username", map.get("username")); ob.put("state", map.get("state")); //装进数组 arr.add(ob); } JSONObject ob=new JSONObject(); //放置数据 ob.put("rows", arr); //放置所有的数据个数 ob.put("total", allsoft.size()); String returndata=ob.toString(); System.out.println("成功转换"+returndata.length()+"大小的数据..."); //转换编码 ServletActionContext.getResponse().setCharacterEncoding("UTF-8"); PrintWriter out; try { out=ServletActionContext.getResponse().getWriter(); out.println(returndata); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } return "success"; }
解释一下这些代码内容:
首先我们先接收前端传回的已经读取的信息个数和每页信息个数。
然后从数据库中取得数据。通过计算,来求得应该从多少条数据取到多少条数据,也就是从offset*limit——max的个数。这里也可以在开始的时候不除以limit,直接最小值就是offset。在代码中,会看到,我们将List表中所有的对象全部拿出来,单独放在JSONObject中,是因为在取对象的时候,我们已经将对象转化为Map类型,而在对象中我们有一个属性date的类型为Date,如果不通过toString的方式,直接转化为JSONObject的话,前端会出现一大串的数字,而不是时间。
当然如果没有这种特殊需求的话,可以直接将List表单转化为JSONArray数组。然后再放进JSONObject中进行返回。
服务端的注意读取数据的个数,客户端的话就不需要注意了,直接读取的最大值就是数据的总数。我们将所有数据的JSON数组放进一个JSONObject中后,需要主要的是要加入rows和total字段,rows表示传回的数据,value也就是jsonArray数组,然后total表示所有数据的总数,注意,是所有的数据的总数,不是单次传回的数据的总数,否则不能翻页。最后将总的JSONObject toString就好了。注意toString的变量值的名字要和xml里面result的里面的值要一样,对应。
我们主要到还有一条语句是
ServletActionContext.getResponse().setCharacterEncoding(“UTF-8”);
这条语句的作用是将中文进行编码,之前我在返回值的时候,中文全部是????,所以就加了这句话,然后就OK了。最后的步骤:PrintWriter out;
将要返回的值returndata进行out.println就OK了。
我们来看一下效果:
所有的步骤也算是完了,如果还有什么疑惑的地方请大家在下面评论,知道的肯定会解答。错误的地方,请大家指出来,共同进步,谢谢。
- Bootstrap table的后台数据的获取
- bootstrap table通过ajax获取后台数据展示在table
- bootstrap table post提交数据,后台无法接收的问题
- bootstrap table ajax获取后台数据后js做判断
- bootstrap table 获取数据的两种方式
- Bootstrap table的使用,与后台数据连接,可自动翻页(客户端翻页)
- bootstrap table获取选中行的值
- Bootstrap Table获取点击行的index
- bootstrap-table 获取选中的行
- bootstrap-table的post数据问题
- 通过AJAX获取ashx后台JSON数据并使用bootstrap-Table控件
- bootstrap-table的入门使用——从服务器获取数据
- 前台JS获取后台的Json数据, 动态创建table并填充数据
- bootstrap 表格列格式为进度条,并从后台获取进度的数据
- Bootstrap Table获取并展示数据列表
- Bootstrap Table 选中某几行,获取其数据
- X5 获取前台所有data数据 和后台的 table 使用
- Bootstrap table的使用方法
- 在前端调用ajax时,需要将参数传到前端,使用session赋值的方法进行传值,不能使用ModelMap或Model
- LightTools8.4 64位 全功能版\
- mysql之创建简单的论坛数据库
- 2017阅读记录
- Thinking in Java——final关键字
- Bootstrap table的后台数据的获取
- Android性能优化(一)APP启动速度优化
- 工厂模式 学习笔记
- Matlab统计工具箱中各类概率分布函数使用方法介绍
- 使用xrdp实现Windows 远程桌面 Ubuntu Linux
- ES6新特性:使用export和import实现模块化
- 【源码解析】Sharding-Jdbc模块分析
- 北漂奋斗者有福了,最具社会主义内涵的“集体租赁住房政策”出台了
- MyBatis如何防止SQL注入