官网描述
http://www.datatables.club/manual/server-side.html#initdt
DT自动请求的参数(Sent parameters)
当开启了 服务器模式时,DataTables 会发送如下参数到服务器
ps:需要说明的是
如果你是 Java 开发者,那么使用struts2的需要注意,会有错误抛出,因为处理不了类似 columns[i][search][regex]的变量
如果是你 .net 开发者,那么可能会遇到 maxQueryStringLength 的错误
如果是你 php 开发者,那么恭喜你,php天生支持以上参数的解析,自动转为数组,好不公平啊
图片.png
显然使用java时, 特别是spring时, 在controller处理接收到的请求参数会非常复杂, 如何才能精简,让datatabe只发送想要的数据呢?
服务器需要返回的数据(Returned data)
一旦 DataTables 发送了请求,上面的参数就会传送给服务器,那么你需要接受到这些参数并做相应的逻辑处理然后按照下面的格式讲组装好的JSON数据返回 (不是每个参数都需要接受处理,根据自己的业务需要)
图片.png
定制代码如下:
js端
var table = $('#example').DataTable({
responsive: true ,
serverSide:true,
ajax: {
url: 'queryRcDetail.json',
//dataSrc: 'data',
data: function(d) {
// return JSON.stringify(d);
var str = {
"draw": d.draw,
"start": d.start,
"length": d.length,
"search": d.search.value
};
return JSON.stringify(str);
},
type: "POST",
contentType:'application/json; charset=UTF-8'
},
在ajax中, 为data添加函数, 对待发送数据进行筛选和定制。
发送的请求数据如下:
图片.png
java 端 controller
这里使用的是spring boot
@RequestMapping(value= {"queryRcDetail.json"} , method = RequestMethod.POST)
@ResponseBody
public RcDetailResponse queryRcDetail(@RequestBody RcDetailRequest req) {
RcDetailResponse res = new RcDetailResponse();
logger.debug("接收到风控明细分页查询请求:" + req.toString());
return res;
}
RcDetailRequest 的设计如下:
public class RcDetailRequest {
private int draw;
private int start;
private int length;
private String search;
...
}
java 响应端
需要根据要求返回数据
public class RcDetailResponse {
private int draw;
private int recordsTotal;
private int recordsFiltered;
private String error;
private List<RcDetailDataDo> data;