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中后,需要主要的是要加入rowstotal字段,rows表示传回的数据,value也就是jsonArray数组,然后total表示所有数据的总数,注意,是所有的数据的总数,不是单次传回的数据的总数,否则不能翻页。最后将总的JSONObject toString就好了。注意toString的变量值的名字要和xml里面result的里面的值要一样,对应

  • 我们主要到还有一条语句是
    ServletActionContext.getResponse().setCharacterEncoding(“UTF-8”);
    这条语句的作用是将中文进行编码,之前我在返回值的时候,中文全部是????,所以就加了这句话,然后就OK了。

  • 最后的步骤:PrintWriter out;
    将要返回的值returndata进行out.println就OK了。

我们来看一下效果:
表格图片


所有的步骤也算是完了,如果还有什么疑惑的地方请大家在下面评论,知道的肯定会解答。错误的地方,请大家指出来,共同进步,谢谢。

阅读全文
0 0
原创粉丝点击