使用jquery插件datatable 遇到的一点问题

     今天想找一个比较不错的表格插件,以前使用过一些,最终觉得DataTables不错,决定深入研究一下,便把官方文档的一个带数据库的事例自己亲自在eclipse做了一遍,途中非常坎坷,足足费了一个下午,还好结果比较圆满,下面做一下总结:

1、问题:加载数据问题。

官方给的事例是用Php说明动态加载数据,我是做jsp的,当然得自己做,如何用jsp生成json格式数据成了第一个问题。下面是解决方案。首先下载一个插件,json-taglib.jar 放置WEB-INF/libX下,这样就可以在eclipse中使用如下的<json:object></json:object>标记输出json数据了,注意:我现在做的是jsp输出json格式数据,不是后台servlet生成。json-taglib.jar的使用见网址:http://json-taglib.sourceforge.net/tutorial.html 本人的生成数据方式如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<%@page  import="cn.heu.po.*,cn.heu.db.*"%>
     <% 
     List<Ajax> l=new ArrayList<Ajax>();
     String sql="select * from  ajax ";
     l=DBUtil.getResults(sql); //查询数据
     pageContext.setAttribute("items",l);
    // request.setAttribute("items",l); //两种方式均可
      %> 
<json:object>
      <json:array name="aaData" items='${items}' var="item">
           <json:array>
              <json:property value="${item.engine}"></json:property> 
              <json:property value="${item.browser}"></json:property>    
              <json:property value="${item.platform}"></json:property> 
              <json:property value="${item.version}"></json:property> 
              <json:property value="${item.grade}"></json:property> 
            </json:array>
        </json:array>
     </json:object>
此文档主要是生成json格式数据, 注意生成的json格式数据必须是这样的
{ 
"aaData": 
 [
 
 ["Trident","Internet Explorer 4.0","Win 95+","4","X"],
 
  ["Trident","Internet Explorer 5.0","Win 95+","5","C"],
 
 ["Other browsers","All others","-","-","U"]
     ...
 ]
}
然后下面的网页调用该jsp显示后台数据:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" />
  
  <title>DataTables example</title>
  <style type="text/css" title="currentStyle">
   @import "css/demo_page.css";
      @import "css/demo_table.css";
      @import "css/demo_table_jui.css"
      @import "css/ui-lightness/jquery-ui-1.8.4.custom.css"
   
      
    </style>
  <script type="text/javascript" language="javascript" src="js/jquery.js"></script>
  <script type="text/javascript" language="javascript" src="js/jquery.dataTables.js"></script>
  <script type="text/javascript" charset="utf-8">
   $(document).ready(function() {
    $('#example').dataTable( {
       
     "sPaginationType": "full_numbers",
     "oLanguage": { "Search": "搜索:" },   
                     "iDisplayLength": 10, 
     "bProcessing": true,
     "bServerSide": fasle,     // 注意该属性允许通过服务端加载数据,设为true即可。现在是jsp在客户端翻译   
        "sAjaxSource": "jsp/test_dt.jsp", //实际是返回一个json字符串
           
            "oLanguage": {                          //汉化   
                        "sLengthMenu": "每页显示 _MENU_ 条记录",   
                        "sZeroRecords": "没有检索到数据",   
                        "sInfo": "当前数据为从第 _START_ 到第 _END_ 条数据;总共有 _TOTAL_ 条记录",   
                        "sInfoEmtpy": "没有数据",   
                        "sProcessing": "正在加载数据...",   
                        "oPaginate": 
                        {   
                            "sFirst": "首页",   
                            "sPrevious": "上一页",   
                            "sNext": "下一页",   
                            "sLast": "尾页"  
                        }   
                    }   
    }    
     );
   } );
  </script>
 </head>
 <body id="dt_example">
  <div id="container">
   <div class="full_width big">
    <i>DataTables</i>
   </div>
   
   <h1>Preamble</h1>
   <h1>动态加载数据</h1>
   <div id="dynamic">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
 <thead>
  <tr>
   <th width="20%">Rendering engine</th>
   <th width="25%">Browser</th>
   <th width="25%">Platform(s)</th>
   <th width="15%">Engine version</th>
   <th width="15%">CSS grade</th>
  
  </tr>
 </thead>
 <tbody>
  <tr>
   <td colspan="5" class="dataTables_empty">加载数据。。。</td>
  </tr>
 </tbody>
 <tfoot>
  <tr>
   <th>Rendering engine</th>
   <th>Browser</th>
   <th>Platform(s)</th>
   <th>Engine version</th>
   <th>CSS grade</th>
   <th></th>
   <th></th>
  </tr>
 </tfoot>
</table>
   </div>
   </div>
  </body>
</html>

 这样即可加载数据了。

问题2、出现以下问题的原因:

“当前数据为从第 1 到第 NaN 条数据;总共有 NaN 条记录 (filtered from NaN total entries)”

注意到上边的

<script type="text/javascript" charset="utf-8">
   $(document).ready(function() {
    $('#example').dataTable( {
       
     "sPaginationType": "full_numbers",
     "oLanguage": { "Search": "搜索:" },   
                     "iDisplayLength": 10, 
     "bProcessing": true,
     "bServerSide": fasle,     // 注意该属性允许通过服务端加载数据,设为true即可。现在是jsp在客户端翻译   
        "sAjaxSource": "jsp/test_dt.jsp", //实际是返回一个json字符串

 bServerSide属性值为false,因为现在是jsp作为数据源,jsp的执行是在客户端进行的,不是在服务器执行,所以设置为false,一开始我设置为true,所以出现上述错误。详细阐述主要参见官方有关该部分的说明:http://datatables.net/usage/server-side

先摘出部分如下:When using server-side processing, DataTables will make an XHR request to the server for each draw of the information on the page (i.e. when paging, sorting, filtering etc). DataTables will send a number of variables to the server to allow it to perform the required processing, and then return the data in the format required by DataTables.

这个功能主要是为了提升大数据量时使用的,正好适合我的需求。

相关推荐