javascript - 通过服务器端呈现的 DataTable 排序
问题描述
我想通过服务器端对我的数据表进行排序。当我单击要排序的列时,我会使用请求的参数到达后端,对结果进行排序并将它们返回给客户端。但在 javascript 中,数据表不会刷新排序数据。
默认排序是按第一个表列升序。您可以在 javascript 代码的末尾看到。
在 javascript 代码中,您可以看到 ajax 区域。在此区域到达时,当我单击要排序的表格的每一列时。但数据不刷新,它只显示处理标签。在浏览器的开发人员区域中,我得到了正确的排序数据。
这是我的javascript代码:
workListTable = $('#worklist-table').DataTable({
searching: false,
paging: false,
info: false,
processing: true,
serverSide: true,
ordering: true,
scrollX: true,
scrollY: "55vh",
ajax:
{
url: "search.do",
type: "POST",
data: function(d)
{
d.todo = "loadListData";
var filterArray = [];
filterArray.push({machineGroup: machineId});
filterArray.push({itemNumber: itemNumber.val()});
filterArray.push({projectNumber: projectNumber.val()});
filterArray.push({sbaFrom: sbaFrom.val()});
filterArray.push({sbaTo: sbaTo.val()});
filterArray.push({userId: userId.val()});
var orderBy = "asc";
var orderColumnName = "";
for (var i = 0; i < d.columns.length; i++)
{
for (var j = 0; j < d.order.length; j++)
{
var orderColumn = d.order[j].column;
if (i == orderColumn)
{
orderColumnName = d.columns[i].name;
orderBy = d.order[j].dir;
break;
}
}
}
var orderByObject =
{
orderColumn: orderColumnName,
orderColumnBy: orderBy
};
return $.extend({}, d, {
"filter": filterArray,
"order": orderByObject
});
},
},
columns: [/*print column data*/],
initComplete: function( settings, json )
{
$(buttonSearch).removeClass('disabled');
},
order: [[0, "desc"]]
和javacode:
@PostMapping("/search.do")
public ResponseEntity<Object> search()
{
ResponseEntity<Object> response = new ResponseEntity<Object>(null, HttpStatus.NOT_FOUND);
try
{
// get the filter parameter
final WorkListModel model = getFilterParameters(getRequest().getParameterMap());
List<WorkList> list = workListService.getWorkList(model);
if (!CollectionUtils.isNullOrEmpty(list))
list = sortList(list, getRequest().getParameterMap());
final WorkListDataObject dataTableObject = new WorkListDataObject();
dataTableObject.setData(list);
dataTableObject.setDraw(1);
dataTableObject.setRecordsFiltered(list.size());
dataTableObject.setRecordsTotal(list.size());
response = new ResponseEntity<Object>(dataTableObject, HttpStatus.OK);
}
catch (Exception e)
{
LOG.error("WorkListController.search(): Error while worklist lines.", e);
response = new ResponseEntity<Object>(message, HttpStatus.INTERNAL_SERVER_ERROR);
}
return response;
}
解决方案
我找到了问题,问题出在java代码中。我始终将绘制值设置为 1。我必须使用请求中的绘制值。之后数据表刷新了。
推荐阅读
- mysql - mysql命令行:如何让mysql提示输入用户名和密码?
- c - 知道初始地址的指针的地址
- android - 如何将垂直链中除一个视图之外的所有视图推到顶部,将最后一个视图推到底部?
- sql - SQL Server 总和基于类型
- c# - System.IO.FileNotFoundException:'无法加载文件或程序集'System.Data.SqlClient,版本 = 4.4.0.0
- java - 跨度>类>标题需要Xpath
- c++ - 通过将文本文件读入字符串/向量来计算加权/未加权 GPA
- javascript - 如何计算用户愤怒的成本
- android - 当我在多个活动中添加数据库引用时,我的应用程序在该按钮上崩溃了
- python - 如何在python中获得随机生日?