我正在为一组表开发一个管理界面。我需要实现列表,排序,过滤和分页等功能。
我使用Spring Boot作为入门者,使用Spring Data Jpa作为存储库。我在网上搜索了一些包含所有上述功能的完整解决方案的例子。我发现的几乎包括所有这些,但显然如果有分页和排序,那么没有过滤或反之亦然。
现在我使用@ModelAttribute
将过滤器存储在会话中的应用程序对象中,但我知道现在这是一个很好的设计,因为应用程序将扩展并且变得难以维护。我还使用Page
和Pagination
进行分页,并使用Specifications
进行过滤。
我想要的是在一个请求中提交所有数据,即:搜索字段,排序字段和当前页面。当然,如果搜索字段不为空,则将重新初始化分页。
另一件事是我不想使用jQuery数据表但是纯HTML和表单提交。
以下是我发现的一些教程和示例:
提前致谢
编辑包含html表格
这是我的表格和我的分页部分的结构:
<form method=post action=someLink>
<table> -populated from controller using Thymeleaf - </table>
<div class=pagination>
<ul> - actually this div is build using the page object returned from server -
<li><a href=link/?page=;size=;>1</a></li>
<li><a href=link/?page=;size=;>2</a></li>
<li><a href=link/?page=;size=;>3</a></li>
</ul>
</div>
</form>
正如您所见,表单与我的分页div分开。当我点击页码时,会向服务器发送获取请求,并使用存储的过滤器执行查询。当我提交表格时,不考虑页码,因为页数可以改变。
所以我的问题是如何构建表单以在一次提交中包含分页。
我在思考而不是使用输入元素,所以在服务器上我可以从中读取数据。我不知道如何使用可分页属性提交该帖子请求。
由于
答案 0 :(得分:3)
您要做的第一件事是启用Spring Data Web支持。如果您使用的是Spring Boot,它可能是由Spring Boot激活的。
启用Spring Data Web支持后,您可以通过设置这些请求参数的值来指定当前页面,页面大小和排序选项:
现在,您可以通过在控制器方法中添加新的 org.springframework.data.domain.Pageable 方法参数,将请求的页面信息“注入”到控制器方法中。在您的情况下,控制器方法可能如下所示:
@RequestMapping(value = "/search", method=RequestMethod.POST)
public String search(@ModelAttribute("searchFilter") FilterDTO filter, Pageable page) {
//Add logic here
return "results";
}