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

スクリーンショット:私はちょうどに検索パスのベースURLを渡したhttps://i.stack.imgur.com/njJ3P.png当初

+0

こんにちはあなたはいくつかの画面を添付してくださいすることができます参照のためのショット。 – Pradeep

+0

最初の投稿の一番下にあるリンクの後ろにスクリーンショットを追加しました。 – user3569354

+0

ページネーションの結果から、URLを使用して検索結果を渡すことができますか? &$ {page.url?searchRes = "+ value from pass}のような複数の値の場合は、リクエスト・パラメーター – Pradeep

答えて

0

私のコントローラメソッド内のPageWrapper(検索パラメータなし)私が渡しているこのパスは、ページ区切りバーに含まれるリンクを構築するために使用されています。代わりに、検索パラメータを含む囲みコントローラメソッドに到達するために使用された完全な現在のURLを渡すことができることがわかりました。これを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"; 
} 
関連する問題