【问题标题】:java datatable server side issuejava数据表服务器端问题
【发布时间】:2015-08-09 08:29:30
【问题描述】:

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

DataTables 警告:表 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("sEcho", Integer.parseInt(request.getParameter("sEcho")));

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

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

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

【问题讨论】:

    标签: java jquery datatable server-side


    【解决方案1】:

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

    看看API document

    这些字段现在被称为 “画”, "记录总数", “记录过滤”和 “数据”

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

    试着看看你是否在提供类似的东西方面取得了更大的成功

    "aaData": [
        [
          "108",
          "game",
          "Status",
          "0",
          "1",
          "Update",
          "abc"
        ],
      [
          "109",
          "anothergame",
          "Status",
          "0",
          "1",
          "Update",
          "abcd"
        ],
        ...
    ]
    

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

    【讨论】:

    • 它是一个 php 示例,我正在研究 java...datatables.net/examples/server_side/simple.html.. 我现在正在关注这个示例.. 对于数据表版本.. 等等我会告诉你.. 我正在尝试将其转换为数据对象的数组数组可能会解决我的问题
    【解决方案2】:

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

    【讨论】:

    • 我已经这样做了 returnObj.addProperty("sEcho", Integer.parseInt(request.getParameter("sEcho")));但仍然是同样的问题
    • 尽量不要解析成整数。
    • 我不认为 sEcho 有任何问题,我认为 aaData 有问题,因为它添加了 \
    • 是的,正确,检查一下 returnObj.addProperty("aaData", dataArray)
    • 由于您的 aaData 不是 json 数组,因此它会导致问题。所以我认为删除 tostring 会解决你的问题
    【解决方案3】:

    我的问题解决了 我改变的几件事 我在 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" },
        ]
    });
    

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2018-06-19
      相关资源
      最近更新 更多