bootstraptable框架详细讲解(源码讲解如何实现BootstrapTable静态赋值)
bootstraptable框架详细讲解(源码讲解如何实现BootstrapTable静态赋值)这是一开始进入页面加载的表格。在table上方添加了文本输入框,用于查询过滤table中的数据,因此需要根据查询条件,重新向后台向DAO层发送请求,返回新的结果。最重要的一点,写在最前面:BootstrapTable一个页面只能加载一次;想要重新加载,就必须先销毁 , 再重新初始化Bootstraptable。销毁的方法:$('#id').bootstrapTable('destroy');好了,接下来我们来看以以下具体实现方式

今天要做一个报表导入并预览的功能,使用layui的文件上传,获取表格数据,接着把表格数据返回前台,使用bootstraptable展示,实现一个预览表格数据的效果。通过后台处理后的数据bootstraptable加载数据,其实具体实现不难,今天要讲的是在实现数据加载之后,我们出现了一些问题,我会附源码讲解问题的解决方案分享给大家
通过后台处理后的数据// 数据经过处理后 真实数据已做修改
Data = [
	{JJSRBY: 6666 JJSRBYLJ: 155666 JJZCBY: 777 JJZCBYLJ: 2266633 LJJY: 151515 NCYE: 121212 SZYEBY: 11111 SZYEBYLJ: -11559 XZ: "企业职工基本养老保险" ZFNL: 22.1} 
	{JJSRBY: 6666 JJSRBYLJ: 155666 JJZCBY: 777 JJZCBYLJ: 2266633 LJJY: 151515 NCYE: 121212 SZYEBY: 11111 SZYEBYLJ: -11559 XZ: "工伤保险" ZFNL: 22.1} 
	...
];bootstraptable加载数据
    
// field 需要和 Data中每个对象中的字段名对应。
// 
$('#previewTable').bootstrapTable({
	    data : Data 
	    //toolbar: '#toolBar'  
	    striped: true  //是否显示行间隔色
	    cache: false  //是否使用缓存,默认为true,
	    //minimumCountColumns: 2  //最少允许的列数
	    clickToSelect: true  //是否启用点击选中行
	    columns: [
	   		[
	   	      {field : 'XZ'  title: '险种'  rowspan:2  align:"center"} 
	   	      {field : 'NCYE'  title: '年初余额'  rowspan:2 halign:"center" align:"right" 
	   	    	formatter: function(value  row  index) {
	   	    		let num = row.NCYE;
	  				return num.toFixed(2);
	  			}
	   	      } 
	   	      {title: '基金收入'  colspan:2 align:"center"} 
	   	      {title: '基金支出'  colspan:2 align:"center"} 
	   	      {title: '当年收支结余'  colspan:2 align:"center"} 
	   	      {field : 'LJJY' title:'累计结余'  rowspan:2 halign:"center" align:"right" 
	   	    	formatter: function(value  row  index) {
	   	    		let num = row.LJJY;
	  				return num.toFixed(2);
	  			}	
	   	      } 
	   	      {field : 'ZFNL' title: '支付能力(月)'  rowspan:2 halign:"center" align:"right" 
	   	    	formatter: function(value  row  index) {
	   	    		let num = row.ZFNL;
	  				return num.toFixed(1);
	  			}
	   	      } 
	   	    ] 
	   	    [
	   	    	{field : 'JJSRBY' title:'本月'  colspan:1 halign:"center" align:"right" 
	   	    		formatter: function(value  row  index) {
		   	    		let num = row.JJSRBY;
		  				return num.toFixed(2);
		  			}	
	   	    	} 
	   	    	{field : 'JJSRBYLJ' title:'本月止累计'  colspan:1 halign:"center" align:"right" 
	   	    		formatter: function(value  row  index) {
		   	    		let num = row.JJSRBYLJ;
		  				return num.toFixed(2);
		  			}	
	   	    	} 
	   	    	{field : 'JJZCBY' title:'本月'  colspan:1 halign:"center" align:"right" 
	   	    		formatter: function(value  row  index) {
		   	    		let num = row.JJZCBY;
		  				return num.toFixed(2);
		  			}	
	   	    	} 
	   	    	{field : 'JJZCBYLJ' title:'本月止累计'  colspan:1 halign:"center" align:"right" 
	   	    		formatter: function(value  row  index) {
		   	    		let num = row.JJZCBYLJ;
		  				return num.toFixed(2);
		  			}
	   	    	} 
	   	    	{field : 'SZYEBY' title:'本月'  colspan:1 halign:"center" align:"right" 
	   	    		formatter: function(value  row  index) {
		   	    		let num = row.SZYEBY;
		  				return num.toFixed(2);
		  			}	
	   	    	} 
	   	    	{field : 'SZYEBYLJ' title:'本月止累计'  colspan:1 halign:"center" align:"right" 
	   	    		formatter: function(value  row  index) {
		   	    		let num = row.SZYEBYLJ;
		  				return num.toFixed(2);
		  			}	
	   	    	}
	   	    ]
	    ] 
	    formatNoMatches : function() {
	    	return '<div style="color: #b8b8b8; height: 15px;"> 暂无数据 </div>';// 如果无数据则显示这个
	    }
    });
    
这个实现其实不难,但是,没想到的是,接下来的步骤出问题了,因为我们需要实现BootstrapTable重新加载,这种问题有以下两种解决方案:
原始加载的表格
解决后加载表格
最重要的一点,写在最前面:BootstrapTable一个页面只能加载一次;想要重新加载,就必须先销毁 , 再重新初始化Bootstraptable。
销毁的方法:
$('#id').bootstrapTable('destroy');
好了,接下来我们来看以以下具体实现方式
遇到此问题的情景
在table上方添加了文本输入框,用于查询过滤table中的数据,因此需要根据查询条件,重新向后台向DAO层发送请求,返回新的结果。
解决办法原始加载的表格这是一开始进入页面加载的表格。
$('#infoList').bootstrapTable({
         url: '${pageContext.request.contextPath}/xx/xxx'  //请求后台的URL(*)
         method: 'post'  //请求方式(*)
         contentType: 'application/x-www-form-urlencoded' 
         toolbar: '#toolbar'  //工具按钮用哪个容器
         striped: true  //是否显示行间隔色
         cache: false  //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
         pagination: true  //是否显示分页(*)
         sortable: false  //是否启用排序
         sortOrder: "desc"  //排序方式
         sidePagination: "server"  //分页方式:client客户端分页,server服务端分页(*)
         pageNumber: 1  //初始化加载第一页,默认第一页
         pageSize: 10  //每页的记录行数(*)
         pageList: [10  50  100]  //可供选择的每页的行数(*)
         strictSearch: true 
         showColumns: false  //是否显示所有的列
         showRefresh: false  //是否显示刷新按钮
         minimumCountColumns: 2  //最少允许的列数
         clickToSelect: true  //是否启用点击选中行
         //uniqueId: "aac147"  //每一行的唯一标识,一般为主键列
         showToggle: false  //是否显示详细视图和列表视图的切换按钮
         cardView: false  //是否显示详细视图
         detailView: false  //是否显示父子表
         queryParams: queryParams  //所需要的参数
       	 queryParamsType: "limit"  //参数格式 发送标准的RESTFul类型的参数请求
         columns: myColumns 	// 列名这里通过别处方法加载
         onClickRow: function (row  obj) {	//点击事件
             ...
         } 
         onLoadSuccess: function (data) {
         	...
         }
});
function queryParams(params) {  //配置参数
        var temp = {   //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
            pageSize: params.limit    //页面大小
            pageNumber: (params.offset / params.limit)   1   //页码
        };
        return temp;
}
1234567891011121314151617181920212223242526272829303132333435363738394041
    
想要实现的效果:
此时我需要在表格上方,加上文本输入框,并添加 查询按钮 ,点击查询按钮,把输入的条件加入到 表格参数 queryParams 中,通过数据库的查询 返回数据,并更改表格结构和内容,做到重新加载的效果。
但是失败了。
解决后加载表格需要在点击查询按钮时,首先调用 表格销毁方法
$('#infoList').bootstrapTable('destroy');
    
接着再重新加载新的表格:
$('#infoList').bootstrapTable({
url: '${pageContext.request.contextPath}/xx/xxx2'  //请求后台的URL(*)
    method: 'post'  //请求方式(*)
    contentType: 'application/x-www-form-urlencoded' 
    toolbar: '#toolbar'  //工具按钮用哪个容器
    striped: true  //是否显示行间隔色
    cache: false  //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
    pagination: true  //是否显示分页(*)
    sortable: false  //是否启用排序
    sortOrder: "desc"  //排序方式
    sidePagination: "server"  //分页方式:client客户端分页,server服务端分页(*)
    pageNumber: 1  //初始化加载第一页,默认第一页
    pageSize: 10  //每页的记录行数(*)
    pageList: [10  50  100]  //可供选择的每页的行数(*)
    strictSearch: true 
    showColumns: false  //是否显示所有的列
    showRefresh: false  //是否显示刷新按钮
    minimumCountColumns: 2  //最少允许的列数
    clickToSelect: true  //是否启用点击选中行
    showToggle: false  //是否显示详细视图和列表视图的切换按钮
    cardView: false  //是否显示详细视图
    detailView: false  //是否显示父子表
    queryParams: function(params){
    	return {
    		pageSize: params.limit    //页面大小
            pageNumber: (params.offset / params.limit)   1   //页码
            keyword: $("#search_json").val() 	// 关键词
    	};
    } 
    queryParamsType: "limit"  //参数格式 发送标准的RESTFul类型的参数请求
    columns: myColumns 
    onClickRow: function (row  obj) {
        ...
    } 
    onLoadSuccess: function (data) {
        ...
    }
});
function queryParams2(params) {  // 配置参数 有查询条件用
	    var keyword = $("#search_json").val();
	    var temp = {   //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
	    pageSize: params.limit    //页面大小
	    pageNumber: (params.offset / params.limit)   1   //页码
        keyword: keyword	// 查询关键词
    };
	return temp;
}
    
注意:具体实现代码太过庞大,所以以上代码并不完整只是提供思路。




