jQuery Datatables

jQuery Datatables

DataTables 是一款 jQuery 表格插件。它是一個(gè)高度靈活的工具,可以將任何HTML表格添加高級(jí)的交互功能。

頁(yè)面引用

CSS部分

<!-- DataTables -->
<link rel="stylesheet" href="/static/assets/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">

JS部分

<!-- DataTables -->
<script src="/static/assets/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
<script src="/static/assets/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>

使用,啟動(dòng)0模式

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

分頁(yè)查詢的案例

服務(wù)端

Mybatis映射文件關(guān)鍵代碼

DataTables 分頁(yè)需要提供查詢數(shù)據(jù)的總筆數(shù),以下為查詢總筆數(shù)的關(guān)鍵代碼:

    <!--查詢總記錄數(shù)-->
    <select id="count" resultType="java.lang.Integer">
        select count(*) from tb_user
    </select>

這里我們使用 MySQL 作為數(shù)據(jù)庫(kù),由于需要傳入分頁(yè)參數(shù),這里我們還使用了 Map 作為查詢參數(shù)類型,以下為 MySQL 分頁(yè)查詢的關(guān)鍵代碼:

    <!--分頁(yè)查詢-->
    <select id="page" resultType="TbUser" parameterType="java.util.Map">
        SELECT
        <include refid="tbUserColumns"/>
        FROM
        tb_user AS a LIMIT #{start},#{length}
    </select>

定義數(shù)據(jù)訪問接口

    /*
     * @Author: 小小熒
     * @Description:分頁(yè)查詢,參數(shù)代表的是分頁(yè)起始頁(yè)碼,和每頁(yè)的數(shù)
     * @Date: 2019/7/4
     * @time: 21:56
     * @param: []
     * @return: java.util.List<top.xxytime.my.shop.domain.TbUser>
     */
    public List<TbUser> page(Map<String, Object> params);

    /**
     * @Author: 小小熒
     * @Description: 查詢總記錄數(shù)
     * @Date: 2019/7/5
     * @time: 17:56
     * @param: []
     * @return: int
     */
    public int count();

定義一個(gè)通用的分頁(yè)展示對(duì)象

創(chuàng)建一個(gè)名為 PageInfo 的分頁(yè)數(shù)據(jù)展示對(duì)象,代碼如下:

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

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

/**
 * 分頁(yè)展示對(duì)象
 * <p>Title: PageInfo</p>
 * <p>Description: </p>
 *
 * @author Lusifer
 * @version 1.0.0
 * @date 2018/6/21 5:17
 */
public class PageInfo<T extends BaseEntity> implements Serializable {
    private int draw;
    private int recordsTotal;
    private int recordsFiltered;
    private List<T> 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<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }
}

業(yè)務(wù)關(guān)鍵層邏輯代碼

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

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

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

    return pageInfo;
}

控制層關(guān)鍵代碼

/**
 * 分頁(yè)查詢
 *
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(value = "page", method = RequestMethod.GET)
public PageInfo<TbUser> page(HttpServletRequest request) {
    String draw = request.getParameter("draw");
    int start = Integer.parseInt(request.getParameter("start"));
    int length = Integer.parseInt(request.getParameter("length"));

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

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

客戶端

使用 DataTables 分頁(yè)功能,需要開啟一些列的相關(guān)配置,分頁(yè)的數(shù)據(jù)結(jié)果是由 Ajax 請(qǐng)求獲取并解析 JSON 格式數(shù)據(jù)自動(dòng)封裝進(jìn)表格的,代碼如下:

$("#dataTable").DataTable({
    // 是否開啟本地分頁(yè)
    "paging": true,
    // 是否開啟本地排序
    "ordering": false,
    // 是否顯示左下角信息
    "info": true,
    // 是否允許用戶改變表格每頁(yè)顯示的記錄數(shù)
    "lengthChange": false,
    // 是否顯示處理狀態(tài)(排序的時(shí)候,數(shù)據(jù)很多耗費(fèi)時(shí)間長(zhǎng)的話,也會(huì)顯示這個(gè))
    "processing": true,
    // 是否允許 DataTables 開啟本地搜索
    "searching": false,
    // 是否開啟服務(wù)器模式
    "serverSide": true,
    // 控制 DataTables 的延遲渲染,可以提高初始化的速度
    "deferRender": true,
    // 增加或修改通過 Ajax 提交到服務(wù)端的請(qǐng)求數(shù)據(jù)
    "ajax": {
        "url": "/user/page"
    },
    // 分頁(yè)按鈕顯示選項(xiàng)
    "pagingType": "full_numbers",
    // 設(shè)置列的數(shù)據(jù)源
    "columns": [
        {
            "data": function (row, type, val, meta) {
                return '<input id="' + row.id + '" type="checkbox" class="minimal" />';
            }
        },
        {"data": "id"},
        {"data": "username"},
        {"data": "phone"},
        {"data": "email"},
        {"data": "updated"},
        {
            "data": function (row, type, val, meta) {
                return '<a href="#" type="button" class="btn btn-sm btn-default"><i class="fa fa-search"></i> 查看</a>&nbsp;&nbsp;&nbsp;' +
                    '<a href="#" type="button" class="btn btn-sm btn-primary"><i class="fa fa-edit"></i> 編輯</a>&nbsp;&nbsp;&nbsp;' +
                    '<a href="#" type="button" class="btn btn-sm btn-danger"><i class="fa fa-trash-o"></i> 刪除</a>'
            }
        }
    ],
    // 表格重繪的回調(diào)函數(shù)
    "drawCallback": function (settings) {
        App.initCheckbox();
    },
    // 國(guó)際化
    "language": {
        "sProcessing": "處理中...",
        "sLengthMenu": "顯示 _MENU_ 項(xiàng)結(jié)果",
        "sZeroRecords": "沒有匹配結(jié)果",
        "sInfo": "顯示第 _START_ 至 _END_ 項(xiàng)結(jié)果,共 _TOTAL_ 項(xiàng)",
        "sInfoEmpty": "顯示第 0 至 0 項(xiàng)結(jié)果,共 0 項(xiàng)",
        "sInfoFiltered": "(由 _MAX_ 項(xiàng)結(jié)果過濾)",
        "sInfoPostFix": "",
        "sSearch": "搜索:",
        "sUrl": "",
        "sEmptyTable": "表中數(shù)據(jù)為空",
        "sLoadingRecords": "載入中...",
        "sInfoThousands": ",",
        "oPaginate": {
            "sFirst": "首頁(yè)",
            "sPrevious": "上頁(yè)",
            "sNext": "下頁(yè)",
            "sLast": "末頁(yè)"
        },
        "oAria": {
            "sSortAscending": ": 以升序排列此列",
            "sSortDescending": ": 以降序排列此列"
        }
    }
})

實(shí)現(xiàn)效果截圖

image

參考以下文檔完成

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容