java datatable服务器端问题

时间:2015-05-27 10:06:22

标签: java jquery datatable server-side

我正在研究从服务器端填充数据的数据,我面临的问题是它总是会给出一个显示的警告框

  

DataTables警告:table id = firmtable - 请求的未知参数   ' 1'对于第0行。有关此错误的详细信息,请参阅   http://datatables.net/tn/4我无法追查此问题的位置   是

我的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();

在客户端发生的事情是mytable没有填充 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(&#34; sEcho&#34 ;,   的Integer.parseInt(用request.getParameter(&#34; sEcho&#34)));

但没有结果,我得到同样的问题

我得到的结果是第一列的表格填充了像这样的aaData内容

[ { 大号 Ø G 一世 d 1 0 8 即第一栏中的单个字母

3 个答案:

答案 0 :(得分:2)

您使用的是哪个版本的DataTable?这些字段在较新版本中已弃用。

查看API document

现在调用字段   “画”,   “recordsTotal”   “recordsFiltered”和   “数据”

此外,我不能代表旧版本,但目前API似乎要求您为数据对象提供JSON数组数组,而不是像现在一样为对象数组提供。

试着看看你是否在提供类似

之类的东西方面取得了更大的成功
"aaData": [
    [
      "108",
      "game",
      "Status",
      "0",
      "1",
      "Update",
      "abc"
    ],
  [
      "109",
      "anothergame",
      "Status",
      "0",
      "1",
      "Update",
      "abcd"
    ],
    ...
]

你的draw / sEcho也应该是ajax请求提供的值,而不是常量。否则,DataTables将不允许您过滤/分页表服务器。

答案 1 :(得分:0)

sEcho值设置为您在请求中收到的值。

答案 2 :(得分:0)

我的问题解决了 我改变的一些事情 我现在正在使用com.google.gson.Gson用于json org.json 这解决了我的aaData中\的问题 然后我使用了更新版本的datatable并将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" },
    ]
});