我无法确定如何在分页搜索结果页面之间切换,同时保持用于查找结果的搜索条件。我有一个页面,其中包含一个表单,其中包含用于多个搜索条件的输入字段,以及一个用于根据提供的条件检索查询结果的按钮。表单下方是一个显示结果的表格和一个分页栏,用于选择要在表格中显示的数据页面。按标准按页码和大小请求数据工作正常,分页栏也已经有效。他们唯一的问题是搜索条件是使用提交按钮从表单传递给控制器,然后当单击分页栏链接到切换页面时,搜索条件将被传递给控制器为空,因为表单未重新提交时从分页链接中击中相同的控制器方法。基本上,每当我使用分页链接时,我都会切换页面,但所有搜索条件都会丢失,所以我最终会在没有应用搜索条件的情况下对所有结果进行分页。如何在使用分页链接切换页面时保持搜索条件?
Thymeleaf Pagination Bar:
<!-- Pagination Bar -->
<div th:fragment='paginationbar' th:if="${results}">
<div>
<ul class='pagination pagination-centered'>
<li th:class="${page.firstPage}?'disabled':''">
<span th:if='${page.firstPage}'>← First</span>
<a th:if='${not page.firstPage}' th:href='@{${page.url}(page=0,size=${page.size})}'>← First</a>
</li>
<li th:class="${page.hasPreviousPage}? '' : 'disabled'">
<span th:if='${not page.hasPreviousPage}'>«</span>
<a th:if='${page.hasPreviousPage}' th:href='@{${page.url}(page=${page.currentNumber-2},size=${page.size})}' title='Go to previous page'>«</a>
</li>
<li th:each='item : ${page.items}' th:class="${item.current}? 'active' : ''">
<span th:if='${item.current}' th:text='${item.number}'>1</span>
<a th:if='${not item.current}' th:href='@{${page.url}(page=${item.number-1},size=${page.size})}'><span th:text='${item.number}'>1</span></a>
</li>
<li th:class="${page.hasNextPage}? '' : 'disabled'">
<span th:if='${not page.hasNextPage}'>»</span>
<a th:if='${page.hasNextPage}' th:href='@{${page.url}(page=${page.currentNumber},size=${page.size})}' title='Go to next page'>»</a>
</li>
<li th:class="${page.lastPage}? 'disabled' : ''">
<span th:if='${page.lastPage}'>Last →</span>
<a th:if='${not page.lastPage}' th:href='@{${page.url}(page=${page.totalPages - 1},size=${page.size})}'>Last →</a>
</li>
</ul>
</div>
</div>
控制器方法:
@RequestMapping(value="/users/search", method=RequestMethod.GET)
public String search(Model model, @ModelAttribute("criteria") UserSearchCriteria criteria,
@RequestParam(name="page", required=false, defaultValue="0") Integer pageNumber, @RequestParam(name="size", required=false, defaultValue="10") Integer pageSize) {
Page<User> results = userService.findUsers(criteria, new PageRequest(pageNumber, pageSize));
PageWrapper<User> page = new PageWrapper<User>(results, "/users/search");
model.addAttribute("results", results);
model.addAttribute("page", page);
return "users";
}
带搜索结果的搜索页面的屏幕截图:https://i.stack.imgur.com/njJ3P.png
答案 0 :(得分:0)
最初我只是将搜索路径的基本URL传递给我的控制器方法中的PageWrapper(没有任何搜索参数)。我传递的这条路径用于构建分页栏中包含的链接。我发现相反,我可以传递用于到达包含搜索参数的封闭控制器方法的完整当前URL。将此传递给PageWrapper允许分页链接包含搜索参数。 (我的问题是我不知道我可以使用搜索参数检索完整的当前URL。@ CurrentUrl注释是自定义的,并从HttpServletRequest中解析当前的URL。)
@RequestMapping(value="/users/search", method=RequestMethod.GET)
public String search(Model model, @ModelAttribute("criteria") UserSearchCriteria criteria, @CurrentUrl String currentUrl, Paging paging) {
Page<User> results = userService.findUsers(criteria, new PageRequest(pageNumber, pageSize));
PageWrapper<User> page = new PageWrapper<User>(results, currentUrl);
model.addAttribute("results", results);
model.addAttribute("page", page);
return "users";
}