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" },
    ]
});