Bootstrap-table每次刷新或者排序都会自动向设置好的url发送一个请求,请求中包含4个默认的参数
limit
, offset
, sort
, order
pageSize
, pageNumber
, sortName
, sortOrder
参考:
https://bootstrap-table.com/docs/api/table-options/#queryparams
然而仅凭这几个参数只能实现排序,无法实现条件查询,要想table发送请求时增加自定义参数,这时候就需要设置
data-query-params属性。
当设置table的data-query-params后
data-query-params="queryParams"
就可以通过一个js函数来在Bootstrap-table发送请求前增加参数
function queryParams(params) {
params.name = "张三";
params.age=32;
return params;
}
这时候控制器就可以接收到除4个基本参数外的两个额外自定义参数
@ResponseBody
@RequestMapping(value ="/test")
public String test(String sortName, String sortOrder, Integer pageNumber, Integer pageSize,String name,Integer age){
return "";
}
并且这时候,如果有一个实体类Student,包含name和age属性,那可以直接在控制器用Student对象来接收,变成
@ResponseBody
@RequestMapping(value ="/test")
public String test(String sortName, String sortOrder, Integer pageNumber, Integer pageSize,Student stu){
return "";
}
然而,如果Student类中有一个属性是一个复杂类型,比如ClassInfo(属性:id和name)
public ClassInfo{
private Integer id;
private String name;
//getter和setter省略
}
public Student{
private String name;
private Integer age;
private ClassInfo classinfo;
//getter和setter省略
}
这时要再想让Bootstrap-table能把一个带班级信息的学生对象传给控制器的stu参数,就不是那么容易了
因为默认的get请求会有限长的弊端,所以在研究的时候连同使用post请求一起涉及的
data-query-params-type=""
//这个post应该没用,因为最终的请求在ajaxRequest决定
data-method="post"
//post请求的数据加此设定才能被控制器接收
data-content-type="application/x-www-form-urlencoded"
//重写table发送的ajax请求
data-ajax="ajaxRequest"
因为控制器接收4个基本参数外加一个复杂类型参数,比较繁琐,所以用泛型封装一下
/**
* @program: MyClassProject2
* @description: 接受bootstraptable查询时传入的复杂参数
* @author: Bluce Young
* @create: 2019-08-06 09:13
**/
public class TableParams {
private String sortName;
private String sortOrder ;
private int pageSize;
private int pageNumber;
//查询条件类
private E data;
//getter和setter省略
}
添加@RequestBody注解
@ResponseBody
@RequestMapping(value = "stulistdata")
public PageData stulist(@RequestBody TableParams tableParams){
}
function ajaxRequest(params){
var student={
"name":"张三",
"age":"33",
"classinfo":{
"id":"3",
"name":"五年一班"
}
};
params.data.data=student;//第二个data是tools.TableParams类的泛型属性
$.ajax({
url:params.url,
data:JSON.stringify(params.data),
type:"POST",
contentType:"application/json",
dataType:"json",
success:function(data){
params.success(data);
}
});
}