2017-08-16 65 views
0

我无法确定如何在维护用于查找结果的搜索条件的同时在页面之间切换页面的分页搜索结果。我有一个带有一个表单的页面,其中包含多个搜索条件的输入字段和一个用于根据提供的条件检索查询结果的按钮。在表格下方是一个显示结果的表格和一个分页栏,用于选择要在表格中显示哪一页数据。通过页码和尺寸按照标准请求数据是完美的,并且分页栏也已经工作。他们唯一的问题是,使用提交按钮将搜索条件从表单传递给控制器​​,然后当点击分页条链接切换页面时,搜索条件将被传递给控制器​​,因为当表单不被重新提交时在分页链接中使用相同的控制器方法。基本上,无论何时我使用分页链接,我都会切换页面,但是所有搜索条件都会丢失,因此我最终会在没有应用搜索条件的情况下对所有结果进行分页。如何使用分页链接切换页面时如何保留搜索条件?使用搜索标准对查询结果进行分页

Thymeleaf分页栏:

<!-- 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="https://stackoverflow.com/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, "https://stackoverflow.com/users/search"); 
    model.addAttribute("results", results); 
    model.addAttribute("page", page); 
    return "users"; 
} 

与结果的搜索页面截图:https://i.stack.imgur.com/njJ3P.png

+0

喜你能请附上几屏拍摄以供参考。 – Pradeep

+0

我刚刚在最初的帖子底部的链接后面添加了一个截图。 – user3569354

+0

从分页结果你可以使用URL传递搜索结果?和&对于多个值,例如$ {page.url?searchRes =“+您需要传递的值},然后使用请求参数 – Pradeep

回答

0

起初,我只是路过的基本URL搜索路径我的控制器方法中的PageWrapper(没有任何搜索参数)。我正在传递的这条路径正被用于构建分页栏中包含的链接。我发现,相反,我可以传递完整的当前网址,用于访问包含搜索参数的封闭控制器方法。将它传递给PageWrapper可以让分页链接包含搜索参数。 (我的问题是,我不知道我能与搜索参数检索完整当前的URL。该@CurrentUrl注释习惯和来自HttpServletRequest解决当前的URL。)

@RequestMapping(value="https://stackoverflow.com/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"; 
}