【发布时间】:2018-08-16 16:04:55
【问题描述】:
我正在使用带有客户端分页的 Spring REST 应用程序,默认由 DataTables 提供,并且一切正常。现在我需要将它更改为服务器端分页我有问题,因为不知道如何从 DataTables 获取信息客户端想要查看的页码。我在 DT 手册中找不到任何有用的东西。
【问题讨论】:
标签: java spring datatables
我正在使用带有客户端分页的 Spring REST 应用程序,默认由 DataTables 提供,并且一切正常。现在我需要将它更改为服务器端分页我有问题,因为不知道如何从 DataTables 获取信息客户端想要查看的页码。我在 DT 手册中找不到任何有用的东西。
【问题讨论】:
标签: java spring datatables
当你说Datatable 我假设你在谈论DataTables jQuery 插件。
要激活服务器端分页,您需要通过
"serverSide": true,
像这样:
$('#example').DataTable( {
"processing": true,
"serverSide": true,
"ajax": "/your_url"
});
执行上述操作将激活您的服务器端分页。但是您也需要在服务器端进行一些更改。让我们一步一步来看看。
serverSide 标记为true 时会发生什么
DataTables 插件将自定义参数添加到 AJAX 调用中,其中包含如下信息
order: asc
start: 20
length: 10
// and many more.
您可以检查此demo link 并在单击下一页按钮时查看 request 中传递的参数。
"draw": 3, // unique ID
"recordsTotal": 57, // total number of records
"recordsFiltered": 57 // total number of filtered records
这次你可以检查this demo link并查看响应数据。
您需要在控制器 API 的 POST 调用中将这些参数添加为 queryParam 以用于 GET 和 attr:
order: asc
start: 20
length: 10
从数据库获取详细信息的服务层。
如果是 MySQL,您需要获取记录总数并在搜索查询中传递一个 LIMIT 子句LIMIT 10, 10。
例如:
SELECT * FROM User LIMIT 20,10;
使用start 和length 计算下一组记录。
这可能比较棘手,但如果你理解并正确实施它会很有趣。
阅读更多详细信息here,其中还包含代码和现场演示。
【讨论】:
请参阅有关 DataTables 服务器端处理的示例: https://datatables.net/examples/server_side/simple.html
更改页面后,您可以将请求捕获到服务器,格式如下: https://.../server_processing.php?draw=3&columns...&order=0&dir=asc&start=20&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1534436781912
这意味着DataTable请求第3页(draw=3),按第一列升序排列,....
在服务器端(REST),您可以通过(例如)request.getParameter("draw")获取页码
【讨论】: