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

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

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

bServerSide的值默认为false。

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

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

 1、jsp页面

<div class="adv-table">
<table class="display table table-bordered" id="userList">
</table>
</div>

2、js代码

$(document).ready(function() {

    /*
* Initialse DataTables, with no sorting on the 'details' column
*/
var oTable = $('#userList').dataTable( {
"bLengthChange": true, //允许改变每页显示的数据条数, 默认为true
"bFilter": true, //开启搜索功能, 默认为true
"bInfo" : true, //开启Datatables信息显示
"bPaginate" : true, //允许表格分页, 默认为true "bProcessing": true, //开启读取服务器数据时显示正在加载中
//"bServerSide": true, //开启服务器模式
"iDisplayLength": 5,//每页显示15条数据 // Ajax地址
"sAjaxSource": contextPath + "/user/getUserList?time=" + new Date().getTime(),
"sAjaxDataProp" : "aaData",
"aoColumnDefs": [ //列定义配置数组
{
"bSortable": true, //开启或关闭某列的排序
"aTargets": [ 0 ] //指定一个特定的列
}
],
"aaSorting": [[0, 'asc']], // 第1列,增序
"aLengthMenu": [ [5, 15, 20, -1], [5, 15, 20, "All"] ], //改变每页显示条数列表的选项 //配置列要显示的数据
"aoColumns": [
{
"mDataProp" : "id",
"sTitle" : "<input type='checkbox' name='allbox' id='allbox' onclick='check();' />",
"sDefaultContent" : "",
"bSortable" : false,
"sClass" : "center",
"mRender" : function(data, display, row) {
return "<input type='checkbox' id='"+data+"' name='idList' value='"+data+"'/>";
}
},
{
"sTitle" : "ID",   //显示的列名
"mDataProp": "id",  //对应的数据中的字段名
"sDefaultContent" : "",
"sClass" : "center"
},
{
"sTitle" : "Name",
"mDataProp": "name",
"sDefaultContent" : "",
"sClass" : "center"
},
{
"sTitle" : "Age",
"mDataProp": "age",
"sDefaultContent" : "",
"sClass" : "center"
},
{
"sTitle" : "Update Time",
"mDataProp": "updateTime",
"sDefaultContent" : "",
"sClass" : "center",
"mRender" : function(data, display, row) { //将从数据库中查到的时间戳格式化
return new Date(data).Format("yyyy-MM-dd hh:mm:ss");
} },
{
"sTitle" : "Operate",
"mDataProp": '',
"sDefaultContent" : '<i class="fa fa-plus-square"><i class="fa fa-edit"></i><i class="fa fa-trash-o"></i>', //设置该列字段的值
"sClass" : "center"
}
],
"oLanguage": { //国际化配置
"sProcessing" : "正在获取数据,请稍后...",
"sLengthMenu" : "显示 _MENU_ 条",
"sZeroRecords" : "没有您要搜索的内容",
"sInfo" : "从 _START_ 到 _END_ 条记录 总记录数为 _TOTAL_ 条",
"sInfoEmpty" : "记录数为0",
"sInfoFiltered" : "(全部记录数 _MAX_ 条)",
"sInfoPostFix" : "",
"sSearch" : "搜索",
"sUrl" : "",
"oPaginate": {
"sFirst" : "第一页",
"sPrevious" : "上一页",
"sNext" : "下一页",
"sLast" : "最后一页"
}
}
}); /* Add event listener for opening and closing details
* Note that the indicator for showing which row is open is not controlled by DataTables,
* rather it is done here
*/
// $(document).on('click','#hidden-table-info tbody td img',function () {
// var nTr = $(this).parents('tr')[0];
// if ( oTable.fnIsOpen(nTr) )
// {
// /* This row is already open - close it */
// this.src = "images/details_open.png";
// oTable.fnClose( nTr );
// }
// else
// {
// /* Open this row */
// this.src = "images/details_close.png";
// oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' );
// }
// } );
} ); // 日期格式转换
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
}

3、后台的代码

UserController类
package com.my.springmvc.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.my.springmvc.model.User;
import com.my.springmvc.service.UserService; @Controller
@RequestMapping(
"/user")
public class UserController
{
@Autowired
private UserService userService; @RequestMapping("/toUser")
public String toUser()
{
return "main";
} @RequestMapping("/getUserList")
@ResponseBody
public Map<String, Object> getUserList(Model model)
{
List<User> userlist = userService.getUserList();
Map<String, Object> map = new HashMap<>();
map.put("aaData", userlist);
return map;
}
}
UserService类:
package com.my.springmvc.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.my.springmvc.dao.UserMapper;
import com.my.springmvc.model.User; @Service
public class UserService
{
@Autowired
private UserMapper userMapper; public List<User> getUserList()
{
return userMapper.getUserList();
}
}
UserMapper接口:
package com.my.springmvc.dao;

import java.util.List;
import com.my.springmvc.model.User; public interface UserMapper
{
// 查询所有用户
public List<User> getUserList();
}
UserMapper.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间应该是对应接口的包名+接口名 -->
<mapper namespace="com.my.springmvc.dao.UserMapper"> <!--获得所有用户 -->
<select id="getUserList" resultType="User">
SELECT
u.id, u.name, u.age, u.updateTime
FROM tbl_user u
</select> </mapper>
User实体类:
package com.my.springmvc.model;

import java.util.Date;

public class User
{
private Integer id;
private String name;
private Integer age;
private Date updateTime; @Override
public String toString()
{
return "User [id=" + id + ", name=" + name + ", age=" + age + ", updateTime=" + updateTime + "]";
}
// ...get/set方法省略
}

4、数据库表结构:

CREATE TABLE `tbl_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`updateTime` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) 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. IDEA导入jar包

    http://blog.csdn.net/a153375250/article/details/50851049

  2. cv2对图像进行旋转和放缩变换

    旋转: def get_image_rotation(image): #通用写法,即使传入的是三通道图片依然不会出错 height, width = image.shape[:2] center = ...

  3. hadoop2.7.7 测试安装 centos7

    useradd –m hadoop –s /bin/bash passwd hadoop   增加sudo权限 chmod u+w /etc/sudoers vi /etc/sudoers root ...

  4. AJAX简单实例

    越用AJAX越觉得它的强大.好用. 平常我们提交表单,是直接通过action属性,直接向后台提交数据. 我们也可以用AJAX向后台提交数据.例如: 这是一个表单,两个字段:notice,scort,保 ...

  5. nmap使用

    Nmap使用 Nmap是主机扫描工具,他的图形化界面是Zenmap,分布式框架为Dnamp. Nmap可以完成以下任务: 主机探测 端口扫描 版本检测 系统检测 支持探测脚本的编写 Nmap在实际中应 ...

  6. 1.5.7、CDH 搭建Hadoop在安装之前(定制安装解决方案---配置单用户模式)

    配置单用户模式 在传统的Cloudera Manager部署中,管理每台主机上的Hadoop进程的Cloudera Manager Agent以root用户身份运行.但是,某些环境会限制对root帐户 ...

  7. nginx反向代理:两个域名指向不同web服务端口

    一台服务器上安装了zabbix服务和jumpserver服务,两个域名zabbix.xxxx.xxxx和jumserver.xxx.xxxx 一.编辑/etc/nginx/conf.d目录下nginx ...

  8. python全栈开发 随笔 'is' 和 == 的比较知识与区别 编码和解码的内容及转换

    python 一. is 和 == 的区别; == 比较的是两边的值. a = 'alex' b = 'alex' print(a = b) #True a = 10 b = 10 print(a = ...

  9. JMeter使用中遇到的问题:Jmeter Debug - "Unrecognized VM option '+HeapDumpOnOutOfMemoryError"(转载)

    转载自 http://www.cnblogs.com/yangxia-test 启动JMeter.bat的程序时,出现以下出错信息: Unrecognized VM option '+HeapDump ...

  10. Redis 总结

    Redis官网下载地址: https://redis.io/ Redis 客户端可视化:https://redisdesktop.com/download 一.Redis 是什么? 1.key-val ...