2017-08-16 68 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"; 
}