bootstrap-table的使用

一、背景

使用bootstrap框架进行页面编写的时候发现其组件中没有表格,网上查找发现有一个插件bootstrap-table,但是使用教程有些繁杂,走了一点弯路,希望写下此篇博客,让需要的人可以直接使用,避免采坑。

二、使用

bootstrap-table的使用包含客户端和服务端的使用,我这里主要说服务端的使用,因为一般数据都是从后台动态加载的。

在说如何使用之前先上一张图,看看达到的效果能不能符合你的要求

enter image description here

1、引入css/js文件

因为bootstrap-table是基于bootstrap开发的一个表格插件,所以需要引入bootstrap相关的css和js,引入bootstrap-table相关的css和js

<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-table.min.css">

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/bootstrap-table.min.js"></script>
<script type="text/javascript" src="js/bootstrap-table-zh-CN.js"></script>

目录结构如图:

enter image description here

我这里使用的是webstorm开发工具做的测试,如果使用IDEA或Eclipse,可直接将bootstrap-table下的文件拷贝到webapp目录下

2、添加table标签

在body标签内加人table标签,来动态加载表格

 <table id="table" class="table"></table>

3.通过js语法动态加载表格数据

 <script>
    $('#table').bootstrapTable({
        url: 'http://localhost:8080/user/findAllByPage', //获取数据的请求url
        method: 'get',    //请求方式GET
        dataType: "json", //返回json格式数据
        toolbar:'#toolbar',
        striped: true,
        cache: false,
        //dataField: "data",   //使用服务端这里要注释掉
        classes:'table',//边框
        undefinedText:'',//当数据为 undefined 时显示的字符
        pagination:true,//启动分页
        sortable: true,                     //是否启用排序
        sortOrder: "asc",                   //排序方式
        paginationLoop:true,
        sidePagination: "server",
        pageNumber: 1,                  //初始化加载第一页,默认第一页,并记录
        pageSize: 2,                           //每页的记录行数(*)
        pageList: [10, 25, 50, 100],       //可供选择的每页的行数(*)

        showColumns: true,  //显示下拉框勾选要显示的列
        showRefresh: true,  //显示刷新按钮
        showToggle:true,//显示一行是否改成竖着
        // height: 500,                        //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
        cardView: false,//是否显示详细视图
        showPaginationSwitch:false,//是否显示 下面的分页框
        minimumCountColumns: 2,
        search: false,   //是否显示表格搜索
        clickToSelect: true,                //是否启用点击选中行
        detailView:false,//是否显示父子表

        //得到查询的参数
        queryParams : function (params) {
            console.log(params)
            console.log(params.limit)
            //这里的键的名字和控制器的变量名必须一致,这边改动,控制器也需要改成一样的
            var temp = {
                pageSize: params.limit,                         //每页显示数量  服务端分页需要
                pageIndex:params.offset,                       //起始索引   服务端分页需要
            };
            return temp;
        },
        columns: [{
            field: 'checkbox',
            title: 'checkbox',
            checkbox:true
        }, {
            field: 'number',
            title: '序号',
            formatter: function(value,row,index){
                return index+1;
            }
        }, {
            field: 'username', //对应后台的字段名
            title: '用户名',
            align: 'center'
        }, {
            field: 'email',
            title: '邮箱',
            align: 'center'
        }, {
            field: 'phone',
            title: '手机号'
        }, {
            field: 'enable',
            title: '状态',
            formatter: function(value,row,index){
                if (value){
                    return "激活"
                }else {
                    return "不可用"
                }
            }
        },{
            title: '操作',
            field: 'caozuo',
            align: 'center',
            formatter:actionFormatter
        }],

    });
    //操作栏的格式化
    function actionFormatter(value, row, index) {
        var id = value;
        var result = "";
        result += "<a href='javascript:;' class='btn btn-xs green' onclick=\"EditViewById('" + id + "', view='view')\" title='查看'><span class='glyphicon glyphicon-search'></span></a>";
        result += "<a href='javascript:;' class='btn btn-xs blue' onclick=\"EditViewById('" + id + "')\" title='编辑'><span class='glyphicon glyphicon-pencil'></span></a>";
        result += "<a href='javascript:;' class='btn btn-xs red' onclick=\"DeleteByIds('" + id + "')\" title='删除'><span class='glyphicon glyphicon-remove'></span></a>";
        return result;
    }
</script>

其中相关配置已有说明,这里不再赘述,当没有获取到数据时显示如下:

enter image description here

4、后台java代码

@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/findAllByPage")
public Map findAllByPage(@RequestParam(value = "pageSize") Integer pageSize,
                         @RequestParam(value = "pageIndex") Integer pageIndex){
    System.out.println(pageIndex+" "+pageSize);
    Map map = new HashMap(  );
    List<User> list= new ArrayList<>(  );
    User user = new User();
    user.setEmail( "123@qq.com" );
    user.setEnable( true );
    user.setPassword( "123456" );
    user.setPhone( "13516452565" );
    user.setUsername( "张三" );
    list.add( user );

    User user2 = new User();
    user2.setEmail( "123566@qq.com" );
    user2.setEnable( true );
    user2.setPassword( "123456" );
    user2.setPhone( "13516452565" );
    user2.setUsername( "李四" );
    list.add( user2 );
    User user3 = new User();
    user3.setEmail( "123566@qq.com" );
    user3.setEnable( true );
    user3.setPassword( "123456" );
    user3.setPhone( "13516452565" );
    user3.setUsername( "王五" );
    list.add( user3 );
    User user4 = new User();
    user4.setEmail( "123566@qq.com" );
    user4.setEnable( true );
    user4.setPassword( "123456" );
    user4.setPhone( "13516452565" );
    user4.setUsername( "王五" );
    list.add( user4 );
    User user5 = new User();
    user5.setEmail( "123566@qq.com" );
    user5.setEnable( true );
    user5.setPassword( "123456" );
    user5.setPhone( "13516452565" );
    user5.setUsername( "王五" );
    list.add( user5 );

    map.put( "total", 5);
    map.put( "rows",list );
    return map;
}
}

其中

@CrossOrigin表示支持跨域 因为我这里不在一个项目中,涉及到跨域问题
@RestController 是@ResponseBody和@Controller结合的注解,表示是可以返回json格式的Controller    
@RequestMapping注解表示映射的url
@RequestParam注解表示接收前端传来的参数  value代表参数名称 后面的Integer表示接收的类型 pageSize表示把接收的值赋值给它 
pageSize表示每页显示记录数,pageIndex表示查询的起始索引

我这里没有从数据库获取数据,而是返回了固定写死的5个数据,大家可以根据需要从数据库获取数据并分页

注意,返回的数据必须包含total和rows字段才可显示在表格中,自己可以封装一下

访问我的达人课

我的微信公众号

JS组件Bootstrap Table使用方法详解 转载 2016年03月21日 15:06:09 标签: Bootstrap Table 最近客户提出需求,想将原有的管理系统,做下优化,通过手机也能很好展现,想到2个方案: a方案:保留原有的页面,新设计一套适合手机的页面,当手机访问时,进入m.zhy.com(手机页面),pc设备访问时,进入www.zhy.com(pc页面) b方案:采用bootstrap框架,替换原有页面,自动适应手机、平板、PC 设备 采用a方案,需要设计一套界面,并且要得重新写适合页面的接口,考虑到时间及成本问题,故项目采用了b方案 一、效果展示 二、BootStrap table简单介绍 bootStrap table 是一个轻量级的table插件,使用AJAX获取JSON格式的数据,其分页和数据填充很方便,支持国际化 三、使用方法 1、引入js、css [js] view plain copy <!--css样式--> <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet"> <link href="css/bootstrap/bootstrap-table.css" rel="stylesheet"> <!--js--> [removed][removed] [removed][removed] [removed][removed] [removed][removed] 2、table数据填充 bootStrap table获取数据有两种方式,一是通过table 的data-url属性指定数据源,二是通过JavaScript初始化表格时指定url来获取数据 [xhtml] view plain copy ... ... [xhtml] view plain copy $('#table').bootstrapTable({ url: 'data.json' }); 第二种方式交第一种而言在处理复杂数据时更为灵活,一般使用第二种方式来进行table数据填充。 [js] view plain copy $(function () { //1.初始化Table var oTable = new TableInit(); oTable.Init(); //2.初始化Button的点击事件 /* var oButtonInit = new ButtonInit(); oButtonInit.Init(); */ }); var TableInit = function () { var oTableInit = new Object(); //初始化Table oTableInit.Init = function () { $('#tradeList').bootstrapTable({ url: '/VenderManager/TradeList', //请求后台的URL(*) method: 'post', //请求方式(*) toolbar: '#toolbar', //工具按钮用哪个容器 striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortable: false, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: oTableInit.queryParams,//传递参数(*) sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) pageNumber:1, //初始化加载第一页,默认第一页 pageSize: 50, //每页的记录行数(*) pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) strictSearch: true, clickToSelect: true, //是否启用点击选中行 height: 460, //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 uniqueId: "id", //每一行的唯一标识,一般为主键列 cardView: false, //是否显示详细视图 detailView: false, //是否显示父子表 columns: [{ field: 'id', title: '序号' }, { field: 'liushuiid', title: '交易编号' }, { field: 'orderid', title: '订单号' }, { field: 'receivetime', title: '交易时间' }, { field: 'price', title: '金额' }, { field: 'coin_credit', title: '投入硬币' }, { field: 'bill_credit', title: '投入纸币' }, { field: 'changes', title: '找零' }, { field: 'tradetype', title: '交易类型' },{ field: 'goodmachineid', title: '货机号' },{ field: 'inneridname', title: '货道号' },{ field: 'goodsName', title: '商品名称' }, { field: 'changestatus', title: '支付' },{ field: 'sendstatus', title: '出货' },] }); }; //得到查询的参数 oTableInit.queryParams = function (params) { var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的 limit: params.limit, //页面大小 offset: params.offset, //页码 sdate: $("#stratTime").val(), edate: $("#endTime").val(), sellerid: $("#sellerid").val(), orderid: $("#orderid").val(), CardNumber: $("#CardNumber").val(), maxrows: params.limit, pageindex:params.pageNumber, portid: $("#portid").val(), CardNumber: $("#CardNumber").val(), tradetype:$('input:radio[name="tradetype"]:checked').val(), success:$('input:radio[name="success"]:checked').val(), }; return temp; }; return oTableInit; }; field字段必须与服务器端返回的字段对应才会显示出数据。 3、后台获取数据 a、servlet获取数据 [js] view plain copy BufferedReader bufr = new BufferedReader( new InputStreamReader(request.getInputStream(),"UTF-8")); StringBuilder sBuilder = new StringBuilder(""); String temp = ""; while((temp = bufr.readLine()) != null){ sBuilder.append(temp); } bufr.close(); String json = sBuilder.toString(); JSONObject json1 = JSONObject.fromObject(json); String sdate= json1.getString("sdate");//通过此方法获取前端数据 ... b、springMvc Controller里面对应的方法获取数据 [js] view plain copy public JsonResult GetDepartment(int limit, int offset, string orderId, string SellerId,PortId,CardNumber,Success,maxrows,tradetype) { ... } 4、分页(遇到问题最多的) 使用分页,server端返回的数据必须包括rows和total,代码如下: [js] view plain copy ...gblst = SqlADO.getTradeList(sql,pageindex,maxrows); JSONArray jsonData=new JSONArray(); JSONObject jo=null; for (int i=0,len=gblst.size();i<len;i++) { TradeBean tb = gblst.get(i); if(tb==null) { continue; } jo=new JSONObject(); jo.put("id", i+1); jo.put("liushuiid", tb.getLiushuiid()); jo.put("price", String.format("%1.2f",tb.getPrice()/100.0)); jo.put("mobilephone", tb.getMobilephone()); jo.put("receivetime", ToolBox.getYMDHMS(tb.getReceivetime())); jo.put("tradetype", clsConst.TRADE_TYPE_DES[tb.getTradetype()]); jo.put("changestatus", (tb.getChangestatus()!=0)?"成功":"失败"); jo.put("sendstatus", (tb.getSendstatus()!=0)?"成功":"失败"); jo.put("bill_credit", String.format("%1.2f",tb.getBill_credit()/100.0)); jo.put("changes",String.format("%1.2f",tb.getChanges()/100.0)); jo.put("goodroadid", tb.getGoodroadid()); jo.put("SmsContent", tb.getSmsContent()); jo.put("orderid", tb.getOrderid()); jo.put("goodsName", tb.getGoodsName()); jo.put("inneridname", tb.getInneridname()); jo.put("xmlstr", tb.getXmlstr()); jsonData.add(jo); } int TotalCount=SqlADO.getTradeRowsCount(sql); JSONObject jsonObject=new JSONObject(); jsonObject.put("rows", jsonData);//JSONArray jsonObject.put("total",TotalCount);//总记录数 out.print(jsonObject.toString()); ... 5、分页界面内容介绍 前端获取分页数据,代码如下: [js] view plain copy ...oTableInit.queryParams = function (params) { var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的 limit: params.limit, //第几条记录 offset: params.offset, //显示一页多少记录 sdate: $("#stratTime").val(), }; return temp; };... 后端获取分页数据,代码如下: [js] view plain copy ...int pageindex=0; int offset = ToolBox.filterInt(json1.getString("offset")); int limit = ToolBox.filterInt(json1.getString("limit")); if(offset !=0){ pageindex = offset/limit; } pageindex+= 1;//第几页... 以上就是为大家分享的Bootstrap Table使用方法,希望对大家熟练掌握Bootstrap Table使用方法有所帮助。 转自:http://www.jb51.net/article/79033.htm
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坏菠萝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值