DataTables服务器端分页

Wol*_*fik 1 java spring datatables

我有带有客户端分页的Spring REST应用程序,DataTables默认使用它,并且一切正常。现在,我需要将其更改为服务器端分页,但我有问题,因为不知道如何从DataTables中获取客户端想要查看的页码信息。我在DT手册中找不到任何有用的内容。

MyT*_*nts 9

当您说Datatable我假设您正在考虑使用DataTables jQuery插件时。

要激活服务器端分页,您需要通过

"serverSide": true,
Run Code Online (Sandbox Code Playgroud)

像这样:

$('#example').DataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": "/your_url"
});
Run Code Online (Sandbox Code Playgroud)

执行上述操作将激活服务器端分页。但是您也需要在服务器端进行一些更改。让我们逐步了解它们。

1.标记serverSidetrue

DataTables插件使用以下信息向AJAX调用添加自定义参数

order:  asc
start:  20
length: 10

// and many more.
Run Code Online (Sandbox Code Playgroud)

您可以检查此文档链接,并在单击下一页按钮时查看请求中传递的参数。

2.同样,DataTables插件需要一些字段作为响应,以保留分页逻辑。

"draw": 3,             // unique ID
"recordsTotal": 57,    // total number of records
"recordsFiltered": 57  // total number of filtered records
Run Code Online (Sandbox Code Playgroud)

您这次可以检查相同的链接并查看响应数据。

3.现在,更改在您的API的服务器端

您需要queryParam在控制器API的POST调用中为GET和attr 添加这些参数:

order: asc
start: 20
length: 10
Run Code Online (Sandbox Code Playgroud)

4.服务层更改-数据库查询

在服务层中,您将从数据库中获取详细信息。

您需要获取记录的总数,并且在LIMIT 10, 10MySQl的情况下,在搜索查询中传递LIMIT子句。

例如:

SELECT * FROM User LIMIT 20,10;
Run Code Online (Sandbox Code Playgroud)

使用startlength计算下一组记录。

这可能会比较棘手,但是如果您理解并正确实施,那就很有趣了。


小智 5

请参阅有关 DataTables 服务器端处理的示例: https://datatables.net/examples/server_side/simple.html

更改页面后,您可以按以下格式捕获对服务器的请求: https://.../server_processing.php绘制=3 &列...&顺序=0&dir=asc&开始=20&长度=10 &搜索%5Bvalue%5D=&搜索%5Bregex%5D=假&_=1534436781912

这意味着 DataTable 请求页码 3 (draw=3),按第一列升序排列,...

在服务器端(REST),您可以通过(例如) request.getParameter("draw") 获取页码