好的,因此我通过稍微修改发送到服务器的参数将两个3D列数组转换为2D数组来解决此问题。所以:
columns[0][search][value]=myvalue
columns[0][search][regex]=false
最终是:
columns[0][searchValue]=myvalue
columns[0][searchRegex]=false
这是在Databables中执行的操作:
$('#produtosTable').DataTable({
serverSide: true,
ajax: {
"url": "produtos-source",
"data": function(data) {
planify(data);
}
}
});
function planify(data) {
for (var i = 0; i < data.columns.length; i++) {
column = data.columns[i];
column.searchRegex = column.search.regex;
column.searchValue = column.search.value;
delete(column.search);
}
}
这样,我可以使用以下字段在模型对象中接收这些属性:
private List<Map<ColumnCriterias, String>> columns;
仅供参考,这是我的控制器:
@RequestMapping(value = "/produtos-source", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public ProdutoTable dataTableRequest(@modelattribute DataTableCriterias criterias) {
ProdutoTable produtoTable = produtosService.findProdutos();
produtoTable.setDraw(criterias.getDraw());
return produtoTable;
}
这是我的DataTableCriterias @ModelAttriute的最终版本:
public class DataTableCriterias {
private int draw;
private int start;
private int length;
private Map<SearchCriterias, String> search;
private List<Map<ColumnCriterias, String>> columns;
private List<Map<OrderCriterias, String>> order;
public enum SearchCriterias {
value,
regex
}
public enum OrderCriterias {
column,
dir
}
public enum ColumnCriterias {
data,
name,
searchable,
orderable,
searchValue,
searchRegex
}
(省略/设置)