web之家  

dataTables是一种很好用前端表格显示库。当加载大量数据时,可以用Ajax 获取数据来提高效率,增速网页加载速率。下面以一个例子作示范。

首先,需要下载jQuery以及dataTables库。这里使用的是版本是jquery v1.11.3和DataTables 1.10.9。下载网址:http://datatables.NET/。

先上网页的代码。要注意的是,table中的thead和tbody必须要有。

 

[html] view plain copy
 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  4. <head>  
  5.  <link href="http://www.zhuhaihengxin.com/libs/datatables/1.10.0/css/jquery.dataTables.css" rel="stylesheet">  
  6. <title>dataTable example</title>   
  7. <script type="text/javascript" src="jquery.js"></script>  
  8. <script type="text/javascript" src="jquery.dataTables.js"></script>  
  9. <script type="text/javascript">  
  10.   
  11.     $(document).ready(function() {  
  12.         $("#datatable").dataTable({  
  13.             "processing" : true,  
  14.             "serverSide" : true,  
  15.             "paginationType":"full_numbers",  
  16.             "ajax" : "load",  
  17.             "columns" : [   
  18.                 {"data" : "id"},  
  19.                 {"data" : "firstName"},  
  20.                 {"data" : "lastName"}  
  21.                 ]  
  22.         });  
  23.     });  
  24. </script>  
  25. <style>  
  26. h2{  
  27. text-align:center;  
  28. }  
  29. div {  
  30.     float: left;  
  31.     margin: 10px;  
  32.     padding: 4px;  
  33. }  
  34. a{  
  35. margin:5px;  
  36. }  
  37. table,tr,td,th{  
  38. border:2px solid #3aec7b;  
  39. border-collapse:collapse;  
  40. }  
  41.   
  42. </style>  
  43. </head>  
  44.     <body>  
  45.       
  46.         <TABLE id="datatable">  
  47.             <THEAD>  
  48.                 <tr>  
  49.                     <th>ID</th>  
  50.                     <th>First Name</th>  
  51.                     <th>Last Name</th>  
  52.                 </tr>  
  53.             </THEAD>  
  54.             <tbody>  
  55.             </tbody>  
  56.         </TABLE>  
  57.     </body>  
  58. </html>  


当网页加载的时候,ajax发出请求,如下所示。

 

 

[html] view plain copy
 
  1. draw=[1]  
  2. columns[0][data]=[id]  
  3. columns[0][name]=[]  
  4. columns[0][searchable]=[true]  
  5. columns[0][orderable]=[false]  
  6. columns[0][search][value]=[]  
  7. columns[0][search][regex]=[false]  
  8. columns[1][data]=[firstName]  
  9. columns[1][name]=[]  
  10. columns[1][searchable]=[true]  
  11. columns[1][orderable]=[true]  
  12. columns[1][search][value]=[]  
  13. columns[1][search][regex]=[false]  
  14. columns[2][data]=[lastName]  
  15. columns[2][name]=[]  
  16. columns[2][searchable]=[true]  
  17. columns[2][orderable]=[true]  
  18. columns[2][search][value]=[]  
  19. columns[2][search][regex]=[false]  
  20. order[0][column]=[0]  
  21. order[0][dir]=[asc]  
  22. start=[0]  
  23. length=[10]  
  24. search[value]=[]  
  25. search[regex]=[false]  
  26. _=[1441278114568]  

其中,draw是请求的序号,start是数据的偏移量,length是需要返回的最大数据条数。search[value]是查找的值。

 

服务端采用Java的servlet完成。为简单起见,这里直接采用继承HttpServlet的方式实现。数据本应该从数据库中提取,但这里为了简单,生成了静态数据集合作为数据源。每次请求都从集合中查找匹配的数据,然后转换成JSON返回。JSON库采用阿里的fastjson。

代码如下所示。

 

[java] view plain copy
 
  1. package jspTest;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.Arrays;  
  6. import java.util.Enumeration;  
  7. import java.util.LinkedList;  
  8. import java.util.Random;  
  9.   
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.annotation.WebServlet;  
  12. import javax.servlet.http.HttpServlet;  
  13. import javax.servlet.http.HttpServletRequest;  
  14. import javax.servlet.http.HttpServletResponse;  
  15.   
  16. import com.alibaba.fastjson.JSON;  
  17. import com.alibaba.fastjson.JSONObject;  
  18.   
  19. import java.util.List;  
  20. import java.util.Map;  
  21.   
  22. /** 
  23.  * Servlet implementation class DataLoad 
  24.  */  
  25.   
  26. public class DataLoad extends HttpServlet {  
  27.     private static final long serialVersionUID = 1L;  
  28.   
  29.     static class Person {  
  30.         private long id;  
  31.         private String firstName;  
  32.         private String lastName;  
  33.   
  34.         public long getId() {  
  35.             return id;  
  36.         }  
  37.   
  38.         public void setId(long id) {  
  39.             this.id = id;  
  40.         }  
  41.   
  42.         public String getFirstName() {  
  43.             return firstName;  
  44.         }  
  45.   
  46.         public void setFirstName(String firstName) {  
  47.             this.firstName = firstName;  
  48.         }  
  49.   
  50.         public String getLastName() {  
  51.             return lastName;  
  52.         }  
  53.   
  54.         public void setLastName(String lastName) {  
  55.             this.lastName = lastName;  
  56.         }  
  57.   
  58.         public boolean match(String pattern) {  
  59.             return firstName.contains(pattern) || lastName.contains(pattern) || Long.toString(id).contains(pattern);  
  60.         }  
  61.   
  62.     }  
  63.   
  64.     private static Random r = new Random();  
  65.     private static List<Person> ps = new ArrayList<Person>();  
  66.   
  67.     static {  
  68.         int size = 2512;  
  69.         for (int k = 0; k < size; ++k)  
  70.             ps.add(generatePerson());  
  71.     }  
  72.   
  73.     static Person generatePerson() {  
  74.         Person p = new Person();  
  75.         p.setId(ps.size() + 1);  
  76.         p.setFirstName(generateName());  
  77.         p.setLastName(generateName());  
  78.         return p;  
  79.     }  
  80.   
  81.     private static String generateName() {  
  82.         StringBuilder sb = new StringBuilder();  
  83.         sb.append((char) (r.nextInt(26) + 'A'));  
  84.         int len = 2 + r.nextInt(4);  
  85.         for (int k = 0; k < len; ++k)  
  86.             sb.append((char) (r.nextInt(26) + 'a'));  
  87.         return sb.toString();  
  88.     }  
  89.   
  90.     private List<Person>result;  
  91.     public List<Person>getResult(){  
  92.         return result;  
  93.     }  
  94.     /** 
  95.      * @see HttpServlet#HttpServlet() 
  96.      */  
  97.     public DataLoad() {  
  98.         super();  
  99.     }  
  100.   
  101.     /** 
  102.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
  103.      *      response) 
  104.      */  
  105.     protected void doGet(HttpServletRequest request, HttpServletResponse response)  
  106.             throws ServletException, IOException {  
  107.         int start=0;  
  108.         int length=10;  
  109.         String pattern="";  
  110.         String draw="1";  
  111.         Map<String,String[]>params=request.getParameterMap();  
  112.         for(String attr:params.keySet()){  
  113.             String[] val=params.get(attr);  
  114.             System.out.println(attr+"="+Arrays.toString(val));  
  115.             if(attr.equals("start"))  
  116.                 start=Integer.parseInt(val[0]);  
  117.             if(attr.equals("length"))  
  118.                 length=Integer.parseInt(val[0]);  
  119.             if(attr.equals("search[value]"))  
  120.                 pattern=val[0];  
  121.             if(attr.equals("draw"))  
  122.                 draw=val[0];  
  123.         }  
  124.         int total=filter(start, length, pattern);  
  125.         JSONObject obj = new JSONObject();  
  126.         obj.put("draw", draw);  
  127.         obj.put("recordsTotal", ps.size());  
  128.         obj.put("recordsFiltered", total);  
  129.         System.out.println(obj.toJSONString());  
  130.         obj.put("data", result);  
  131.         response.getWriter().println(obj.toJSONString());  
  132.     }  
  133.   
  134.     /** 
  135.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
  136.      *      response) 
  137.      */  
  138.     protected void doPost(HttpServletRequest request, HttpServletResponse response)  
  139.             throws ServletException, IOException {  
  140.         doGet(request, response);  
  141.     }  
  142.       
  143.     private int filter(int start,int length,String pattern){  
  144.         result=new LinkedList<Person>();  
  145.         int total=0;  
  146.         for(Person s:ps){  
  147.             if(!s.match(pattern))  
  148.                 continue;  
  149.             ++total;  
  150.             if(start-->0)  
  151.                 continue;  
  152.             if(length--<=0)  
  153.                 continue;  
  154.             result.add(s);  
  155.         }  
  156.         return total;  
  157.     }  
  158.   
  159.     public static void main(String[] rags) {  
  160.         System.out.println(JSON.toJSONString(ps));  
  161.         DataLoad load=new DataLoad();  
  162.         load.filter(0, 10, "");  
  163.         System.out.println(JSON.toJSONString(load.getResult()));  
  164.         load.filter(0, 10, "a");  
  165.         System.out.println(JSON.toJSONString(load.getResult()));  
  166.         load.filter(10, 10, "a");  
  167.         System.out.println(JSON.toJSONString(load.getResult()));  
  168.         load.filter(20, 10, "a");  
  169.         System.out.println(JSON.toJSONString(load.getResult()));  
  170.     }  
  171.   
  172. }  


服务端返回的JSON数据如下所示。其中draw是请求中的draw参数,data是表格中的数据。recordsFiltered是过滤后的数据总数,recordsTotal是原始数据总数。

 

 

[html] view plain copy
 
  1. {"recordsFiltered":2512,  
  2. "data":[{"firstName":"Bzf","id":1,"lastName":"Hazkm"},{"firstName":"Imxi","id":2,"lastName":"Oieb"},{"firstName":"Glyag","id":3,"lastName":"Gvqlf"},{"firstName":"Lwbhl","id":4,"lastName":"Fvvf"},{"firstName":"Audds","id":5,"lastName":"Seunp"},{"firstName":"Otbrq","id":6,"lastName":"Hnal"},{"firstName":"Loji","id":7,"lastName":"Qicn"},{"firstName":"Rjy","id":8,"lastName":"Emrygr"},{"firstName":"Gcglkd","id":9,"lastName":"Ldgrs"},{"firstName":"Txh","id":10,"lastName":"Qwe"}],  
  3. "draw":"1",  
  4. "recordsTotal":2512}  


返回数据后,网页如下所示。

 

posted on 2017-07-25 15:42  路修远而求索  阅读(13549)  评论(0编辑  收藏  举报