java 数据表服务器端问题
java datatable server side issue
我正在处理从服务器端填充数据的 datable,我面临的问题是它总是给出一个显示
的警告框
DataTables warning: table id=firmtable - Requested unknown parameter
'1' for row 0. For more information about this error, please see
http://datatables.net/tn/4 i am unable to trace where this issue might
be
我的json
{
"sEcho":"3",
"iTotalRecords":10,
"iTotalDisplayRecords":10,
"aaData":
"[
{\"LogId\":\"108\",
\"tableName \":\"game\",
\"columnName\":\"Status\",
\"oldValue\":\"0\",
\"newValue\":\"1\",
\"changeTypeText\":\"Update \",
\"changedByName\":\"abc\"}
]"
}
这就是我在服务器端的工作方式
Iterator<LogInfo> i = logList.iterator();
int row = 0;
JsonObject returnObj = new JsonObject();
JsonArray dataArray = new JsonArray();
while (i.hasNext()) {
LogInfo logInfo = (LogInfo) i.next();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("logId", logInfo.getLogId());
jsonObject.addProperty("tableName", logInfo.getTableName());
jsonObject.addProperty("columnName", logInfo.getColumnName());
jsonObject.addProperty("oldValue", logInfo.getOldValue());
jsonObject.addProperty("newValue", logInfo.getNewValue());
jsonObject.addProperty("changeTypeText", logInfo.getChangeTypeText());
jsonObject.addProperty("changedByName", logInfo.getChangedByName());
row++;
dataArray.add(jsonObject.getAsJsonObject());
}
returnObj.addProperty("sEcho", "3");
returnObj.addProperty("iTotalRecords", row);
returnObj.addProperty("iTotalDisplayRecords", row);
returnObj.addProperty("aaData", dataArray.toString());
PrintWriter out = response.getWriter();
Gson gson = null;
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(JarolConstants.AJAX_DATE_FORMAT);
gson = builder.create();
String resultStr = gson.toJson(returnObj);
out.print(resultStr);
out.close();
客户端发生了什么,我的table没有被填充
html代码
脚本
$(document).ready(function() {
$('#firmtable').dataTable({
"bProcessing" : true,
bServerSide : true,
sAjaxSource : "./log!list.action",
sServerMethod : "POST"
});
}); </script>
<table id="firmtable">
<thead>
<tr class="detail">
<th><s:property value="getText('auditLog.jsp.transactionId')" /></th>
<th><s:property value="getText('auditLog.jsp.tableName')" /></th>
<th><s:property value="getText('auditLog.jsp.columnName')" /></th>
<th><s:property value="getText('auditLog.jsp.oldValue')" /></th>
<th><s:property value="getText('auditLog.jsp.newValue')" /></th>
<th><s:property value="getText('auditLog.jsp.changeTypeId')" /></th>
<th><s:property value="getText('auditLog.jsp.changeBy')" /></th>
<th><s:property value="getText('auditLog.jsp.changeOn')" /></th>
<th class="edit"><s:property value="getText('global.action')" /></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
编辑
我也尝试过将 sEcho 值设置为
returnObj.addProperty("sEcho",
Integer.parseInt(request.getParameter("sEcho")));
但没有结果,我遇到了同样的问题
我得到的结果是 table 第一列填充了这样的 aaData 内容
[
{
大号
o
G
我
d
1个
0
8个
即第一列中的单个字母
将您的 sEcho
值设置为您在请求中收到的值。
您使用的是哪个版本的 DataTables?这些字段在较新版本中已弃用。
看看API document。
字段现在称为
"draw",
"recordsTotal",
"recordsFiltered" 和
"data"
此外,我不能代表旧版本,但目前 API 似乎要求您为 JSON 提供数据对象数组,而不是对象数组就像你现在一样。
尝试看看通过提供类似
的东西是否更成功
"aaData": [
[
"108",
"game",
"Status",
"0",
"1",
"Update",
"abc"
],
[
"109",
"anothergame",
"Status",
"0",
"1",
"Update",
"abcd"
],
...
]
另外你的draw/sEcho应该是ajax请求提供的值,而不是常量。否则 DataTables 将不允许您 filter/page table 服务器端。
我的问题解决了
我改变的几件事
我在 json 中使用 com.google.gson.Gson
,现在我在使用 org.json
解决了我的 aaData 中 \
的问题
然后我使用了更新版本的数据表并将 jsonObject.put("DT_RowId", row);
添加到我的 aaData
现在我的json如下
{
"recordTotal":10,
"draw":"3",
"recordsFiltered":10,
"data":[
{
"LogId":"112",
"changeTypeText":"Update",
"changedOn":"2015-05-27 18:05:43.113",
"newValue":"1000.00",
"changedByName":"Lalit Singh1",
"tableName":"Game",
"DT_RowId":0,
"columnName":"jackpot_Amount",
"oldValue":"1500.00"
}]
我在 javascript 代码中添加了
$('#LogTable').dataTable({
"bProcessing" : true,
bServerSide : true,
sAjaxSource : "./log!lList.action",
sServerMethod : "POST",
"columns": [
{ "data": "LogId" },
{ "data": "tableName" },
{ "data": "columnName" },
{ "data": "oldValue" },
{ "data": "newValue" },
{ "data": "changeTypeText" },
{ "data": "changedByName" },
{ "data": "changedOn" },
]
});
我正在处理从服务器端填充数据的 datable,我面临的问题是它总是给出一个显示
的警告框DataTables warning: table id=firmtable - Requested unknown parameter '1' for row 0. For more information about this error, please see http://datatables.net/tn/4 i am unable to trace where this issue might be
我的json
{
"sEcho":"3",
"iTotalRecords":10,
"iTotalDisplayRecords":10,
"aaData":
"[
{\"LogId\":\"108\",
\"tableName \":\"game\",
\"columnName\":\"Status\",
\"oldValue\":\"0\",
\"newValue\":\"1\",
\"changeTypeText\":\"Update \",
\"changedByName\":\"abc\"}
]"
}
这就是我在服务器端的工作方式
Iterator<LogInfo> i = logList.iterator();
int row = 0;
JsonObject returnObj = new JsonObject();
JsonArray dataArray = new JsonArray();
while (i.hasNext()) {
LogInfo logInfo = (LogInfo) i.next();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("logId", logInfo.getLogId());
jsonObject.addProperty("tableName", logInfo.getTableName());
jsonObject.addProperty("columnName", logInfo.getColumnName());
jsonObject.addProperty("oldValue", logInfo.getOldValue());
jsonObject.addProperty("newValue", logInfo.getNewValue());
jsonObject.addProperty("changeTypeText", logInfo.getChangeTypeText());
jsonObject.addProperty("changedByName", logInfo.getChangedByName());
row++;
dataArray.add(jsonObject.getAsJsonObject());
}
returnObj.addProperty("sEcho", "3");
returnObj.addProperty("iTotalRecords", row);
returnObj.addProperty("iTotalDisplayRecords", row);
returnObj.addProperty("aaData", dataArray.toString());
PrintWriter out = response.getWriter();
Gson gson = null;
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(JarolConstants.AJAX_DATE_FORMAT);
gson = builder.create();
String resultStr = gson.toJson(returnObj);
out.print(resultStr);
out.close();
客户端发生了什么,我的table没有被填充 html代码
脚本
$(document).ready(function() {
$('#firmtable').dataTable({
"bProcessing" : true,
bServerSide : true,
sAjaxSource : "./log!list.action",
sServerMethod : "POST"
});
}); </script>
<table id="firmtable">
<thead>
<tr class="detail">
<th><s:property value="getText('auditLog.jsp.transactionId')" /></th>
<th><s:property value="getText('auditLog.jsp.tableName')" /></th>
<th><s:property value="getText('auditLog.jsp.columnName')" /></th>
<th><s:property value="getText('auditLog.jsp.oldValue')" /></th>
<th><s:property value="getText('auditLog.jsp.newValue')" /></th>
<th><s:property value="getText('auditLog.jsp.changeTypeId')" /></th>
<th><s:property value="getText('auditLog.jsp.changeBy')" /></th>
<th><s:property value="getText('auditLog.jsp.changeOn')" /></th>
<th class="edit"><s:property value="getText('global.action')" /></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
编辑 我也尝试过将 sEcho 值设置为
returnObj.addProperty("sEcho", Integer.parseInt(request.getParameter("sEcho")));
但没有结果,我遇到了同样的问题
我得到的结果是 table 第一列填充了这样的 aaData 内容
[ { 大号 o G 我 d 1个 0 8个 即第一列中的单个字母
将您的 sEcho
值设置为您在请求中收到的值。
您使用的是哪个版本的 DataTables?这些字段在较新版本中已弃用。
看看API document。
字段现在称为 "draw", "recordsTotal", "recordsFiltered" 和 "data"
此外,我不能代表旧版本,但目前 API 似乎要求您为 JSON 提供数据对象数组,而不是对象数组就像你现在一样。
尝试看看通过提供类似
的东西是否更成功"aaData": [
[
"108",
"game",
"Status",
"0",
"1",
"Update",
"abc"
],
[
"109",
"anothergame",
"Status",
"0",
"1",
"Update",
"abcd"
],
...
]
另外你的draw/sEcho应该是ajax请求提供的值,而不是常量。否则 DataTables 将不允许您 filter/page table 服务器端。
我的问题解决了
我改变的几件事
我在 json 中使用 com.google.gson.Gson
,现在我在使用 org.json
解决了我的 aaData 中 \
的问题
然后我使用了更新版本的数据表并将 jsonObject.put("DT_RowId", row);
添加到我的 aaData
现在我的json如下
{
"recordTotal":10,
"draw":"3",
"recordsFiltered":10,
"data":[
{
"LogId":"112",
"changeTypeText":"Update",
"changedOn":"2015-05-27 18:05:43.113",
"newValue":"1000.00",
"changedByName":"Lalit Singh1",
"tableName":"Game",
"DT_RowId":0,
"columnName":"jackpot_Amount",
"oldValue":"1500.00"
}]
我在 javascript 代码中添加了
$('#LogTable').dataTable({
"bProcessing" : true,
bServerSide : true,
sAjaxSource : "./log!lList.action",
sServerMethod : "POST",
"columns": [
{ "data": "LogId" },
{ "data": "tableName" },
{ "data": "columnName" },
{ "data": "oldValue" },
{ "data": "newValue" },
{ "data": "changeTypeText" },
{ "data": "changedByName" },
{ "data": "changedOn" },
]
});