【发布时间】:2015-03-17 14:14:58
【问题描述】:
我的数据表(jquery 数据表 1.10.5)具有服务器端处理功能。除了分页之外,一切都在这里工作。这是 jsfiddle http://jsfiddle.net/e9btzpox/5/ .我搜索了很多帖子,到处都说“recordsTotal”和“recordsFiltered”应该相等,但这也不起作用。
这是我的代码示例:
$table.dataTable({
"serverSide": true,
"processing": true,
"processing": true,
"columns": [
["data", 1],
["data", 2]
],
"ajax": {
"url": "/test/0",
"dataSrc": function (json) {
var data = json.aaData;
return data;
}
},
"createdRow": function (row, data, index) {
var chk_name = 'chk_' + data[0].id;
$('td:eq(0)', row)
.html('<input name="' + chk_name + '" type="checkbox" value="1">');
var select_name = 'select_' + data[0].id;
html =
'<select name="' + select_name + '">' + '<option value="">Select one</option>' + '<option>' + data[2].operation[0] + '</option>' + '<option>' + data[2].operation[1] + '</option>'; + '</select>';
$('td:eq(1)', row).html(html);
},
});
这是 json 响应的示例:-
{"draw": 1,
"recordsTotal": "11",
"recordsFiltered": "11",
"aaData": [
[{
"id": 1
}, {
"chk": "on"
}, {
"operation": ["Modify", "Delete"]
}]
}
使用服务器端代码更新:-
public class DataTableObject {
int draw;
String recordsTotal;
String recordsFiltered;
List<Student> data;
public int getDraw() {
return draw;
}
public void setDraw(int draw) {
this.draw = draw;
}
public String getRecordsTotal() {
return recordsTotal;
}
public void setRecordsTotal(String recordsTotal) {
this.recordsTotal = recordsTotal;
}
public String getRecordsFiltered() {
return recordsFiltered;
}
public void setRecordsFiltered(String recordsFiltered) {
this.recordsFiltered = recordsFiltered;
}
public List<Student> getData() {
return data;
}
public void setData(List<Student> data) {
this.data = data;
}
public List<Student> getAaData() {
return data;
}
public void setAaData(List<Student> aaData) {
this.data = aaData;
}
}
json 响应正在准备为:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
List<Students> listOfStudent= getStudentList();
DataTableObject dataTableObject = new DataTableObject();
dataTableObject.setDraw((Integer.valueOf(request.getParameter("draw"))));
dataTableObject.setRecordsTotal("2000");
dataTableObject.setRecordsFiltered("2000");
dataTableObject.setAaData(listOfStudent);
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(dataTableObject);
out.print(json);
}
public List<Students> getListOfStudents(){
List<Students> listOfStudent = new ArrayList<Students>();
for (int i = 1; i <= 200; i++) {
aStudent = new Student();
String [] names= new String [3];
names[0] = "Sandeep"+i;
names[1] = "Jaspal"+i;
names[2] = "Harpal"+i;
aStudent.setId(""+i);
aStudent.setChk("off");
aStudent.setOperation(new String[]{"modify","delete"});
listOfStudent.add(aStudent);
}
return listOfStudents;
}
【问题讨论】:
-
分页不起作用,因为您需要在服务器端代码中对数据进行分页。参数
iDisplayLength和iDisplayStart传递给/test/0,您需要在查询中使用它们,否则将返回所有数据。您还没有添加任何服务器端代码,所以这只是一个猜测...... -
@markpsmith :感谢您在这里帮助我,我将使用服务器端代码更新帖子,请看一下。我有点卡在这里。
-
您需要将分页参数合并到您的查询中,虽然看起来您实际上并没有使用数据库,但原理应该是相同的。在服务器端代码中设置断点并检查
Request["iDisplayLength"]和Request["iDisplayStart"]。 -
@markpsmith :我的请求中有这些参数:- "draw","start","length", search[value], search[regex], draw, columns[0][data ], columns[0][name], columns[0][searchable], columns[0][orderable], columns[0][search][value], columns[0][search][regex], columns[ 1][数据],列[1][名称],列[1][可搜索],列[1][可排序],列[1][搜索][值],列[1][搜索] [regex], order[0][column],,order[0][dir],但问题是如何在服务器端使用这些参数进行分页工作??
-
你需要的参数大概是
start和length。我对 v1.10 不是很熟悉,所以您可能需要查看文档来确认。当您翻阅结果时,您能看到start的值发生变化吗?
标签: jquery pagination jquery-datatables