jQuery Datatables

学习完整课程请移步 互联网 Java 全栈工程师

DataTables 是一款 jQuery 表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。

  • 中文网站:http://www.datatables.club/
  • 实例索引:http://www.datatables.club/example/
  • 参考手册:http://www.datatables.club/manual/
  • 帮助文档:http://www.datatables.club/reference/

页面引用

CSS 部分



JS 部分




使用,启用 0 配置模式

$('#dataTable').DataTable();

分页查询案例

服务端

MyBatis 映射文件关键代码

DataTables 分页需要提供查询数据的总笔数,以下为查询总笔数的关键代码:


这里我们使用 MySQL 作为数据库,由于需要传入分页参数,这里我们还使用了 Map 作为查询参数类型,以下为 MySQL 分页查询的关键代码:


定义数据访问接口

/**
 * 分页查询
 * @param params
 * @return
 */
List page(Map params);

/**
 * 查询笔数
 * @return
 */
int count();

定义通用的分页展示对象

创建一个名为 PageInfo 的分页数据展示对象,代码如下:

package com.funtl.my.shop.commons.dto;

import com.funtl.my.shop.commons.persistence.BaseEntity;

import java.io.Serializable;
import java.util.List;

/**
 * 分页展示对象
 * 

Title: PageInfo

*

Description:

* * @author Lusifer * @version 1.0.0 * @date 2018/6/21 5:17 */ public class PageInfo implements Serializable { private int draw; private int recordsTotal; private int recordsFiltered; private List data; private String error; public int getDraw() { return draw; } public void setDraw(int draw) { this.draw = draw; } public int getRecordsTotal() { return recordsTotal; } public void setRecordsTotal(int recordsTotal) { this.recordsTotal = recordsTotal; } public int getRecordsFiltered() { return recordsFiltered; } public void setRecordsFiltered(int recordsFiltered) { this.recordsFiltered = recordsFiltered; } public List getData() { return data; } public void setData(List data) { this.data = data; } public String getError() { return error; } public void setError(String error) { this.error = error; } }

业务逻辑层关键代码

@Override
public PageInfo page(Map params) {
    PageInfo pageInfo = new PageInfo<>();

    int count = tbUserDao.count();
    List tbUsers = tbUserDao.page(params);

    pageInfo.setRecordsTotal(count);
    pageInfo.setRecordsFiltered(count);
    pageInfo.setData(tbUsers);

    return pageInfo;
}

控制器层关键代码

/**
 * 分页查询
 *
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(value = "page", method = RequestMethod.GET)
public PageInfo page(HttpServletRequest request) {
    String draw = request.getParameter("draw");
    int start = Integer.parseInt(request.getParameter("start"));
    int length = Integer.parseInt(request.getParameter("length"));

    Map params = new HashMap<>();
    params.put("page", start);
    params.put("pageSize", length);

    PageInfo pageInfo = tbUserService.page(params);
    pageInfo.setDraw(draw == null ? 0 : Integer.parseInt(draw));
    return pageInfo;
}

客户端

使用 DataTables 分页功能,需要开启一些列的相关配置,分页的数据结果是由 Ajax 请求获取并解析 JSON 格式数据自动封装进表格的,代码如下:

$("#dataTable").DataTable({
    // 是否开启本地分页
    "paging": true,
    // 是否开启本地排序
    "ordering": false,
    // 是否显示左下角信息
    "info": true,
    // 是否允许用户改变表格每页显示的记录数
    "lengthChange": false,
    // 是否显示处理状态(排序的时候,数据很多耗费时间长的话,也会显示这个)
    "processing": true,
    // 是否允许 DataTables 开启本地搜索
    "searching": false,
    // 是否开启服务器模式
    "serverSide": true,
    // 控制 DataTables 的延迟渲染,可以提高初始化的速度
    "deferRender": true,
    // 增加或修改通过 Ajax 提交到服务端的请求数据
    "ajax": {
        "url": "/user/page"
    },
    // 分页按钮显示选项
    "pagingType": "full_numbers",
    // 设置列的数据源
    "columns": [
        {
            "data": function (row, type, val, meta) {
                return '';
            }
        },
        {"data": "id"},
        {"data": "username"},
        {"data": "phone"},
        {"data": "email"},
        {"data": "updated"},
        {
            "data": function (row, type, val, meta) {
                return ' 查看   ' +
                    ' 编辑   ' +
                    ' 删除'
            }
        }
    ],
    // 表格重绘的回调函数
    "drawCallback": function (settings) {
        App.initCheckbox();
    },
    // 国际化
    "language": {
        "sProcessing": "处理中...",
        "sLengthMenu": "显示 _MENU_ 项结果",
        "sZeroRecords": "没有匹配结果",
        "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
        "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
        "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
        "sInfoPostFix": "",
        "sSearch": "搜索:",
        "sUrl": "",
        "sEmptyTable": "表中数据为空",
        "sLoadingRecords": "载入中...",
        "sInfoThousands": ",",
        "oPaginate": {
            "sFirst": "首页",
            "sPrevious": "上页",
            "sNext": "下页",
            "sLast": "末页"
        },
        "oAria": {
            "sSortAscending": ": 以升序排列此列",
            "sSortDescending": ": 以降序排列此列"
        }
    }
})

参考以下文档完成

  • 配置选项:http://www.datatables.club/reference/option/
  • 服务器处理:http://www.datatables.club/manual/server-side.html
  • 设置列的数据源:https://datatables.net/reference/option/columns.data
  • 国际化:http://www.datatables.club/manual/i18n.html

你可能感兴趣的:(jQuery Datatables)