官方网站:http://www.datatables.net/

(1)未开启服务器数据模式(即"bServerSide" : false),数据会从后台直接全部获取,然后在前台全部渲染,分页是框架自己完成的。

(2)开启服务器数据模式(即"bServerSide" : true),数据从后台查询,接着在前台将查询到的所有数据全部渲染到一页上,所以需要在后台分页后传到前台。

bServerSide的值默认为false。

建议:在数据量非常大的情况下建议在后台分页,即开启服务器数据模式。

本次以未开启服务器数据模式为例

 1、jsp页面

  1. <div class="adv-table">
  2. <table class="display table table-bordered" id="userList">
  3. </table>
  4. </div>

2、js代码

  1. $(document).ready(function() {
  2.  
  3. /*
  4. * Initialse DataTables, with no sorting on the 'details' column
  5. */
  6. var oTable = $('#userList').dataTable( {
  7. "bLengthChange": true, //允许改变每页显示的数据条数, 默认为true
  8. "bFilter": true, //开启搜索功能, 默认为true
  9. "bInfo" : true, //开启Datatables信息显示
  10. "bPaginate" : true, //允许表格分页, 默认为true
  11.  
  12. "bProcessing": true, //开启读取服务器数据时显示正在加载中
  13. //"bServerSide": true, //开启服务器模式
  14. "iDisplayLength": 5,//每页显示15条数据
  15.  
  16. // Ajax地址
  17. "sAjaxSource": contextPath + "/user/getUserList?time=" + new Date().getTime(),
  18. "sAjaxDataProp" : "aaData",
  19. "aoColumnDefs": [ //列定义配置数组
  20. {
  21. "bSortable": true, //开启或关闭某列的排序
  22. "aTargets": [ 0 ] //指定一个特定的列
  23. }
  24. ],
  25. "aaSorting": [[0, 'asc']], // 第1列,增序
  26. "aLengthMenu": [ [5, 15, 20, -1], [5, 15, 20, "All"] ], //改变每页显示条数列表的选项
  27.  
  28. //配置列要显示的数据
  29. "aoColumns": [
  30. {
  31. "mDataProp" : "id",
  32. "sTitle" : "<input type='checkbox' name='allbox' id='allbox' onclick='check();' />",
  33. "sDefaultContent" : "",
  34. "bSortable" : false,
  35. "sClass" : "center",
  36. "mRender" : function(data, display, row) {
  37. return "<input type='checkbox' id='"+data+"' name='idList' value='"+data+"'/>";
  38. }
  39. },
  40. {
  41. "sTitle" : "ID",   //显示的列名
  42. "mDataProp": "id",  //对应的数据中的字段名
  43. "sDefaultContent" : "",
  44. "sClass" : "center"
  45. },
  46. {
  47. "sTitle" : "Name",
  48. "mDataProp": "name",
  49. "sDefaultContent" : "",
  50. "sClass" : "center"
  51. },
  52. {
  53. "sTitle" : "Age",
  54. "mDataProp": "age",
  55. "sDefaultContent" : "",
  56. "sClass" : "center"
  57. },
  58. {
  59. "sTitle" : "Update Time",
  60. "mDataProp": "updateTime",
  61. "sDefaultContent" : "",
  62. "sClass" : "center",
  63. "mRender" : function(data, display, row) { //将从数据库中查到的时间戳格式化
  64. return new Date(data).Format("yyyy-MM-dd hh:mm:ss");
  65. }
  66.  
  67. },
  68. {
  69. "sTitle" : "Operate",
  70. "mDataProp": '',
  71. "sDefaultContent" : '<i class="fa fa-plus-square"><i class="fa fa-edit"></i><i class="fa fa-trash-o"></i>', //设置该列字段的值
  72. "sClass" : "center"
  73. }
  74. ],
  75. "oLanguage": { //国际化配置
  76. "sProcessing" : "正在获取数据,请稍后...",
  77. "sLengthMenu" : "显示 _MENU_ 条",
  78. "sZeroRecords" : "没有您要搜索的内容",
  79. "sInfo" : "从 _START_ 到 _END_ 条记录 总记录数为 _TOTAL_ 条",
  80. "sInfoEmpty" : "记录数为0",
  81. "sInfoFiltered" : "(全部记录数 _MAX_ 条)",
  82. "sInfoPostFix" : "",
  83. "sSearch" : "搜索",
  84. "sUrl" : "",
  85. "oPaginate": {
  86. "sFirst" : "第一页",
  87. "sPrevious" : "上一页",
  88. "sNext" : "下一页",
  89. "sLast" : "最后一页"
  90. }
  91. }
  92. });
  93.  
  94. /* Add event listener for opening and closing details
  95. * Note that the indicator for showing which row is open is not controlled by DataTables,
  96. * rather it is done here
  97. */
  98. // $(document).on('click','#hidden-table-info tbody td img',function () {
  99. // var nTr = $(this).parents('tr')[0];
  100. // if ( oTable.fnIsOpen(nTr) )
  101. // {
  102. // /* This row is already open - close it */
  103. // this.src = "images/details_open.png";
  104. // oTable.fnClose( nTr );
  105. // }
  106. // else
  107. // {
  108. // /* Open this row */
  109. // this.src = "images/details_close.png";
  110. // oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' );
  111. // }
  112. // } );
  113. } );
  114.  
  115. // 日期格式转换
  116. Date.prototype.Format = function (fmt) { //author: meizz
  117. var o = {
  118. "M+": this.getMonth() + 1, //月份
  119. "d+": this.getDate(), //日
  120. "h+": this.getHours(), //小时
  121. "m+": this.getMinutes(), //分
  122. "s+": this.getSeconds(), //秒
  123. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  124. "S": this.getMilliseconds() //毫秒
  125. };
  126. if (/(y+)/.test(fmt)) {
  127. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  128. }
  129. for (var k in o) {
  130. if (new RegExp("(" + k + ")").test(fmt)) {
  131. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  132. }
  133. }
  134. return fmt;
  135. }

3、后台的代码

UserController类
  1. package com.my.springmvc.controller;
  2.  
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6.  
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11.  
  12. import com.my.springmvc.model.User;
  13. import com.my.springmvc.service.UserService;
  14.  
  15. @Controller
  16. @RequestMapping("/user")
  17. public class UserController
  18. {
  19. @Autowired
  20. private UserService userService;
  21.  
  22. @RequestMapping("/toUser")
  23. public String toUser()
  24. {
  25. return "main";
  26. }
  27.  
  28. @RequestMapping("/getUserList")
  29. @ResponseBody
  30. public Map<String, Object> getUserList(Model model)
  31. {
  32. List<User> userlist = userService.getUserList();
  33. Map<String, Object> map = new HashMap<>();
  34. map.put("aaData", userlist);
  35. return map;
  36. }
  37. }
UserService类:
  1. package com.my.springmvc.service;
  2.  
  3. import java.util.List;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7.  
  8. import com.my.springmvc.dao.UserMapper;
  9. import com.my.springmvc.model.User;
  10.  
  11. @Service
  12. public class UserService
  13. {
  14. @Autowired
  15. private UserMapper userMapper;
  16.  
  17. public List<User> getUserList()
  18. {
  19. return userMapper.getUserList();
  20. }
  21. }
UserMapper接口:
  1. package com.my.springmvc.dao;
  2.  
  3. import java.util.List;
  4. import com.my.springmvc.model.User;
  5.  
  6. public interface UserMapper
  7. {
  8. // 查询所有用户
  9. public List<User> getUserList();
  10. }
UserMapper.xml文件:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <!--命名空间应该是对应接口的包名+接口名 -->
  4. <mapper namespace="com.my.springmvc.dao.UserMapper">
  5.  
  6. <!--获得所有用户 -->
  7. <select id="getUserList" resultType="User">
  8. SELECT
  9. u.id, u.name, u.age, u.updateTime
  10. FROM tbl_user u
  11. </select>
  12.  
  13. </mapper>
User实体类:
  1. package com.my.springmvc.model;
  2.  
  3. import java.util.Date;
  4.  
  5. public class User
  6. {
  7. private Integer id;
  8. private String name;
  9. private Integer age;
  10. private Date updateTime;
  11.  
  12. @Override
  13. public String toString()
  14. {
  15. return "User [id=" + id + ", name=" + name + ", age=" + age + ", updateTime=" + updateTime + "]";
  16. }
  17. // ...get/set方法省略
  18. }

4、数据库表结构:

  1. CREATE TABLE `tbl_user` (
  2. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  3. `name` varchar(50) DEFAULT NULL,
  4. `age` int(11) DEFAULT NULL,
  5. `updateTime` datetime DEFAULT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

5、前台页面图:

dataTables的学习笔记 -- 未开启服务器数据模式的更多相关文章

  1. R学习笔记(4): 使用外部数据

    来源于:R学习笔记(4): 使用外部数据 博客:心内求法 鉴于内存的非持久性和容量限制,一个有效的数据处理工具必须能够使用外部数据:能够从外部获取大量的数据,也能够将处理结果保存.R中提供了一系列的函 ...

  2. .NET MVC 学习笔记(六)— 数据导入

    .NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...

  3. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  4. openresty 学习笔记二:获取请求数据

    openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...

  5. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  6. 并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理

    1. AQS共享模式 前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码. 首先还是从顶级接口acquireShared()方法入手: public fin ...

  7. MyCat 学习笔记 第十篇.数据分片 之 ER分片

    1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...

  8. MyCat 学习笔记 第八篇.数据分片 之 求摸运算分片

    1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值取摸应该是最简单的一种. 优点:数据离散概率较为平均,可以有效的提高应用的数据吞吐. 缺点:比较明显,后期数据运维与迁移比较困难.好在M ...

  9. MyCat 学习笔记 第七篇.数据分片 之 按数据范围分片

    1 应用场景 Mycat 其实自带了2个数据范围分片的方案,一个是纯数据范围的分片,比如 1至 10000 号的数据放到分片1 ,10001 至 20000号数据放到分片2里. 另一个是数据常量形式的 ...

随机推荐

  1. H5做的商城客户端,效果很不错

    H5做的商城客户端,效果很不错 H5做的商城客户端,效果和android原生客户端没多大区别,现在h5是越来越火了, android的小伙伴们又遇到一个新的挑战了.本项目只能学习一下WebViewAc ...

  2. yii gii配置ip限制使用gii

    <?php $config = [ 'components' => [ 'request' => [ // !!! insert a secret key in the follow ...

  3. vue --轮播图

    轮播图,可以使用mint-ui中的swipe HTML: <Swipe :auto="4000"> <SwipeItem v-for="item in ...

  4. JVM不稳定参数

    -XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性.当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及 ...

  5. 2017秋季面向对象程序设计(Java)教材、教学纲要、考核要求

    教材简况 凯 S.霍斯特曼 (Cay S. Horstmann)(作者), 周立新(译者), Java核心技术(卷1):基础知识(原书第10版) , 2016年9月1出版 本书包括两卷,选做教材的是卷 ...

  6. Socket通讯-Netty框架实现Java通讯

    Netty简介 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...

  7. 1.3.1、CDH 搭建Hadoop在安装之前(端口---Cloudera Manager和Cloudera Navigator使用的端口)

    下图概述了Cloudera Manager,Cloudera Navigator和Cloudera Management Service角色使用的一些端口: Cloudera Manager和Clou ...

  8. git库初次下载

    1.右键Git Batch Here==>输入 git config --list 确认2.再次输入ssh-keygen -t rsa -C “修改后的邮箱” 3.回车多次 找到 生成序列目录 ...

  9. CSSの変数を使う

    この文章はhttps://developer.mozilla.org/ja/docs/Web/CSS/Using_CSS_variablesを参考します. これは実験段階の機能です.この機能は複数のブ ...

  10. js中函数的 this、arguments 、caller,call(),apply(),bind()

    在函数内部有两个特殊的对象,arguments 和 this,还有一个函数对象的属性caller. arguments对象 arguments是一个类似数组的对象,包含着传入函数的所有参数. func ...