spring mvc + Jquery Data Table使用记录

</pre></p><p>前言:做项目时需要用到表格插件,主要需要功能-查询、排序、分页、自适应,最最最重要当时是要美观。</p><p></p><p>选择:之前用过Jqgrid感觉外观一般,后来用了一个买回来的bootstrap框架KingAdmin里面有集成Jquery datatable和jqgrid,由于美观原因,想去研究一下Jquery datatable。</p><p>使用:有官网,但感觉介绍得不是很充足,于是上网看别人的参考,总结如下:</p><p>1、引入css和js,由于框架有集成,我就不需要重新引用,但这里还是贴出来:</p><p>      参考官方地址:http://datatables.club/manual/install.html</p><p>2、由于本次需要从后查询,因此js和后台代码很重要,贴出来:</p><p>js如下:</p><pre name="code" class="javascript">$(document).ready(function() {
			var fvTable;
			fvTable = $("#featured-datatable").dataTable({  
                "bProcessing": true, // 是否显示取数据时的那个等待提示
                "bServerSide": true,//这个用来指明是通过服务端来取数据
                "sAjaxSource": "${pageContext.request.contextPath}/cus/contentListJson.do",//这个是请求的地址
                "fnServerData": retrieveData, // 获取数据的处理函数
                "sScrollY": "100%",
            	"fnInitComplete": function() {
                    this.fnAdjustColumnSizing(true);
                 },
           		"aoColumnDefs": [
					{  "sWidth": "20px",
						"aTargets": [0]},
	       	        {
	       	           "sWidth": "45%",
	       	        	"aTargets": [1]},
       	        	{
 	       	           "sWidth": "45%",
 	       	        	"aTargets": [2]}
       	        ],
                "oLanguage": {
                    "sProcessing": "正在加载中......",
                    "sLengthMenu": "每页显示 _MENU_ 条记录",
                    "sZeroRecords": "对不起,查询不到相关数据!",
                    "sEmptyTable": "表中无数据存在!",
                    "sInfo": "当前显示 _START_ 到 _END_ 条,共 _TOTAL_ 条记录",
                    "sInfoFiltered": "数据表中共为 _MAX_ 条记录",
                    "sSearch": "搜索",
                    "oPaginate": {
                        "sFirst": "首页",
                        "sPrevious": "上一页",
                        "sNext": "下一页",
                        "sLast": "末页"
                    }
                }
            });
			$(window).resize(function () {
	            fvTable.fnAdjustColumnSizing();
	        });
        });
		// 3个参数的名字可以随便命名,但必须是3个参数,少一个都不行
        function retrieveData( sSource,aoData, fnCallback) {
            $.ajax({
                url : sSource,//这个就是请求地址对应sAjaxSource
                data : {"aoData":JSON.stringify(aoData)},//这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数
                type : 'post',
                dataType : 'json',
                async : false,
                success : function(result) {
                    fnCallback(result);//把返回的数据传给这个方法就可以了,datatable会自动绑定数据的
                },
                error : function(msg) {
                }
            });
        }


java如下:

@RequestMapping(value={"/cus/contentListJson.do"})
	@ResponseBody
	public String showContentListJson(@RequestParam String aoData){
		JSONArray jsonarray = JSONArray.fromObject(aoData);
		 
	    String sEcho = null;
	    int iDisplayStart = 0; // 起始索引
	    int iDisplayLength = 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.getInt("value");
	 
	        if (obj.get("name").equals("iDisplayLength"))
	            iDisplayLength = obj.getInt("value");
	    }
	 
	    // 生成20条测试数据
	    List<String[]> lst = new ArrayList<String[]>();
	    for (int i = 0; i < 20; i++) {
	        String[] d = {""+i, "co1_data" + i, "col2_data" + i };
	        lst.add(d);
	    }
	     
	    JSONObject getObj = new JSONObject();
	    getObj.put("sEcho", sEcho);// 不知道这个值有什么用,有知道的请告知一下
	    getObj.put("iTotalRecords", lst.size());//实际的行数
	    getObj.put("iTotalDisplayRecords", lst.size());//显示的行数,这个要和上面写的一样
	    if(iDisplayLength>lst.size()){
	    	iDisplayLength = lst.size();
	    } 
	    getObj.put("aaData", lst.subList(iDisplayStart,iDisplayStart + iDisplayLength));//要以JSON格式返回
	    return getObj.toString();
	}


3、可以正常显示数据,但有个key point,就是表格中插入checkbox,Jquery datatable竟然没有集成,需要重写js代码。


结论:感觉比较麻烦,最后还是使用jqgrid。


最后:可能我研究不够透彻,有大神用得好的,请赐教!


贴上截图:真心好看



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来解释一下具体的操作流程: 1. 在index.jsp文件中添加相应请求链接,比如: ``` <a href="add_student.jsp">添加学生信息</a> <a href="book_list.jsp">查看书籍列表</a> ``` 2. 在实体类Student中增加一个数组属性private float[] scores;,用于存放所选课程的成绩。 ``` public class Student { private int id; private String name; private float[] scores; // 省略getter和setter方法 } ``` 3. 修改add_student.jsp,添加成绩输入框,并在表单中加入scores属性。 ``` <form action="addStudent" method="post"> 姓名:<input type="text" name="name"><br> 成绩1:<input type="text" name="scores[0]"><br> 成绩2:<input type="text" name="scores[1]"><br> 成绩3:<input type="text" name="scores[2]"><br> <input type="submit" value="提交"> </form> ``` 4. 修改StudentController.java,将scores属性也加入到Student对象中,并在addStudent方法中获取scores数组。 ``` @Controller public class StudentController { @RequestMapping("/addStudent") public ModelAndView addStudent(Student student) { // 保存学生信息到数据库 // ... // 跳转到学生信息页面 ModelAndView mav = new ModelAndView("student_info"); mav.addObject("student", student); return mav; } } ``` 5. 修改student_info.jsp,将scores数组的值也显示出来。 ``` 姓名:<%= student.getName() %><br> 成绩1:<%= student.getScores()[0] %><br> 成绩2:<%= student.getScores()[1] %><br> 成绩3:<%= student.getScores()[2] %><br> ``` 6. 在pom.xml文件中添加JSON依赖,比如: ``` <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> ``` 7. 在webapp目录中创建js文件夹,将jquery-1.11.3.min.js文件复制到js中。 8. 修改spring-mvc.xml文件,加入mvc相关内容,比如: ``` <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/" /> <property name="suffix" value=".jsp" /> </bean> <mvc:annotation-driven /> ``` 9. 在WEB-INF/pages/book目录中,创建book_list.jsp文件,用于显示和添加book信息如书名,出版社,价格。要求<title>为"测试Json"。 ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>测试Json</title> <script src="../js/jquery-1.11.3.min.js"></script> <script> $(document).ready(function() { // 获取所有书籍信息 $.getJSON("bookList", function(data) { // 遍历书籍列表,将每本书的信息添加到表格中 $.each(data, function(index, book) { var tr = $("<tr></tr>"); tr.append("<td>" + book.name + "</td>"); tr.append("<td>" + book.publisher + "</td>"); tr.append("<td>" + book.price + "</td>"); $("#book_table tbody").append(tr); }); }); // 添加书籍信息 $("#add_book_form").submit(function(event) { event.preventDefault(); // 阻止表单提交 // 获取表单数据 var name = $("#name").val(); var publisher = $("#publisher").val(); var price = $("#price").val(); // 发送POST请求,将书籍信息保存到数据库 $.post("addBook", {name: name, publisher: publisher, price: price}, function(data) { if (data.success) { // 清空表单,并重新获取书籍列表 $("#name").val(""); $("#publisher").val(""); $("#price").val(""); $("#book_table tbody").empty(); $.getJSON("bookList", function(data) { $.each(data, function(index, book) { var tr = $("<tr></tr>"); tr.append("<td>" + book.name + "</td>"); tr.append("<td>" + book.publisher + "</td>"); tr.append("<td>" + book.price + "</td>"); $("#book_table tbody").append(tr); }); }); } else { alert("添加书籍失败!"); } }); }); }); </script> </head> <body> <h1>图书列表</h1> <table id="book_table" border="1"> <thead> <tr> <th>书名</th> <th>出版社</th> <th>价格</th> </tr> </thead> <tbody> <!-- 书籍列表将动态生成 --> </tbody> </table> <br> <h2>添加书籍</h2> <form id="add_book_form"> 书名:<input type="text" id="name"><br> 出版社:<input type="text" id="publisher"><br> 价格:<input type="text" id="price"><br> <input type="submit" value="添加"> </form> </body> </html> ``` 10. 在index.jsp中添加请求链接。 ``` <a href="add_student.jsp">添加学生信息</a> <a href="book_list.jsp">查看书籍列表</a> ``` 这样就完成了所有的操作。希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值