haker-chen

实现技术要点:Spring MVC,jquery dataTable 

具体代码:

1.controller类

package cn.luhui.wiseaqua.controller;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; 
 
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

@Controller
@RequestMapping("/demo")
public class DemoController {
   
 
    // 测试案例
    @RequestMapping("tableDemoAjax")
    @ResponseBody
    public String tableDemoAjax(@RequestParam String aoData) { 
        JSONArray jsonarray = JSONArray.parseArray(aoData); // .fromObject(aoData);
        
        // 生成20条测试数据
        List<String[]> lst = new ArrayList<String[]>();
        String sEcho = null;
        String sSearch = null; // 搜索
        int iDisplayStart = 0; // 起始索引
        int iDisplayLength = 0; // 每页显示的行数 
        int total = 0;
     
        for (int i = 0; i < jsonarray.size(); i++) {
            JSONObject obj = (JSONObject) jsonarray.get(i);
            if (obj.get("name").equals("sEcho"))
            {
                      sEcho = obj.get("value").toString();
            }  
            if (obj.get("name").equals("iDisplayStart"))
            {
                 iDisplayStart = obj.getIntValue("value");
            } 
            if (obj.get("name").equals("iDisplayLength"))
            {
                  iDisplayLength = obj.getIntValue("value");
            }
            if (obj.get("name").equals("sSearch"))
            {
                sSearch = obj.getString("value");
            } 
        } 
      for (int i = 0; i < 20; i++) {
        String[] d = { "co1_data" + i, "col2_data" + i };
        lst.add(d);
     } 
       // 执行搜索,把不属于关键字部分内容remove掉
       if(sSearch != null  && !sSearch.equals(""))
       {
           Iterator it = lst.iterator();
           while(it.hasNext())
           {
               String[] s = (String[])it.next();
               if(!s[0].contains(sSearch) || !s[1].contains(sSearch))
               {
                   it.remove();
               } 
           }
       } 
        total = lst.size();
        JSONObject getObj = new JSONObject();
        getObj.put("sEcho", sEcho);// 不知道这个值有什么用,有知道的请告知一下
        getObj.put("iTotalRecords", lst.size());//实际的行数
        getObj.put("iTotalDisplayRecords", lst.size());//显示的行数,这个要和上面写的一样

        System.out.println("------"+ sEcho+ ",total:" + total   + 
                                    ", pageSize:"+iDisplayLength+"," +
                                    "----------iDisplayStart:" + iDisplayStart +
                                    "---------\n" + aoData);
        if(iDisplayLength < total)
        {
                   getObj.put("aaData", lst.subList(iDisplayStart,iDisplayStart + iDisplayLength));//要以JSON格式返回 
        }else{
                    getObj.put("aaData", lst);//要以JSON格式返回
        }
        return getObj.toString();
    }
    
     
}

 

 

2.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  
 <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"> 
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="css/jquery.dataTables.css">
<title>listView</title>
     <link rel="stylesheet" type="text/css" href="./media/css/jquery.dataTables.css">
    <link rel="stylesheet" type="text/css" href="../media/syntax/shCore.css">
    <link rel="stylesheet" type="text/css" href="../media/demo.css">
    </head>
    
 
 
<body class="dt-example">
    <div class="container">
    <table id="tb" class="display">
        <thead>
            <tr>
                <th>col1</th>
                <th>col2</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
     
    <script type="text/javascript" src="media/js/jquery.js"></script>
    <script type="text/javascript" src="media/js/jquery.dataTables.js"></script>
     
    <script type="text/javascript">
        $(document).ready(function() {
            $("#tb").dataTable({  
                "bProcessing": false, // 是否显示取数据时的那个等待提示
                "bServerSide": true,//这个用来指明是通过服务端来取数据
                "sAjaxSource": "demo/tableDemoAjax.do",//这个是请求的地址
                "fnServerData": retrieveData // 获取数据的处理函数
            });
        });
         
        // 3个参数的名字可以随便命名,但必须是3个参数,少一个都不行
        function retrieveData( sSource111,aoData111, fnCallback111) {
            $.ajax({
                url : sSource111,//这个就是请求地址对应sAjaxSource
                data : {"aoData":JSON.stringify(aoData111)},//这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数
                type : \'post\',
                dataType : \'json\',
                async : false,
                success : function(result) {
                    fnCallback111(result);//把返回的数据传给这个方法就可以了,datatable会自动绑定数据的
                },
                error : function(msg) {
                   aler("ajax Error");
                }
            });
        }
    </script>
    </div>
    </body>
   </html>
   

 

分类:

技术点:

相关文章:

  • 2018-12-02
  • 2021-10-20
  • 2022-12-23
  • 2022-02-03
  • 2021-09-27
  • 2021-11-03
猜你喜欢
  • 2022-01-01
  • 2021-11-09
  • 2022-01-17
  • 2021-10-16
相关资源
相似解决方案