2016-06-28 12 views
1

私は検索フィルターとページネーションにいくつか問題があります。フィルタはうまく動作しますが、ページングについても同じことは言えません。フィルタパラメータの保持方法。ページ区切り

ユーザーがいるテーブルがあります。私はすべてのユーザーまたはフィルター(名前、電子メール)で表示できます。フィルタを使用して2ページ目に移動しようとすると、フィルタリングを行わずにすべてのユーザーが返されます。なぜそれが起こるのか、私は理解しています。解決策を見つけるのを助けてください。選択したフィルタはどのように保持できますか?セッションで何か? ここに私のコード。

マイコントローラ

@Controller 
@RequestMapping(value = "/admin") 
public class AdminController { 

@Autowired 
UserService userService; 

@RequestMapping(value = "/edit-user", method = RequestMethod.GET) 
public ModelAndView editUsers(@RequestParam(value = "page", defaultValue = "0") Integer page, 
           @RequestParam(value = "pattern", required = false) String pattern, 
           @RequestParam(value = "category", required = false) String category) { 
    ModelAndView view = new ModelAndView("edit-user"); 
    if(pattern == null){ 
     Page<User> userList = userService.findAll(page); 
     view.addObject("userList", userList.getContent()).addObject("maxPage", userList.getTotalPages()); 
    }else if(category.equals("username")){ 
     Page<User> userList = userService.findByUsernameContaining(pattern, page); 
     view.addObject("userList", userList.getContent()).addObject("maxPage", userList.getTotalPages()); 
    }else { 
     Page<User> userList = userService.findByEmailContaining(pattern, page); 
     view.addObject("userList", userList.getContent()).addObject("maxPage", userList.getTotalPages()); 
    } 
    return view; 
} 
} 

JSPあなたの場合

<div class="row top-buffer"> 
 
      <div class="col-md-4 col-md-offset-4"> 
 
       <form class="form-inline text-center" role="form" method="get" action="/admin/edit-user?pattern=pattern?category=category"> 
 
        <fieldset> 
 
         <!-- Search Name --> 
 
         <div class="form-group"> 
 
          <label class="sr-only" for="item-name">Product Name</label> 
 
          <input id="item-name" name="pattern" placeholder="..." class="form-control"> 
 
         </div> 
 
         <!-- Search Category --> 
 
         <div class="form-group"> 
 
          <label class="sr-only" for="item-category">Product Category</label> 
 
          <select id="item-category" name="category" class="form-control"> 
 
           <option value="username" selected>By username</option> 
 
           <option value="email">By email</option> 
 
          </select> 
 
         </div> 
 
         <!-- Search Action --> 
 
         <div class="form-group"> 
 
          <button type="submit" class="btn btn-primary"><span 
 
            class="glyphicon glyphicon-search" aria-hidden="true"></span></button> 
 
         </div> 
 
        </fieldset> 
 
       </form> 
 
      </div> 
 
     </div> 
 
     <div class="row top-buffer"> 
 
      <div class="col-md-8 col-md-offset-2"> 
 
       <table class="table"> 
 
        <thead> 
 
        <th>Id</th> 
 
        <th>Username</th> 
 
        <th>Email</th> 
 
        <th>Password</th> 
 
        </thead> 
 
        <c:forEach var="user" items="${userList}"> 
 
         <tr> 
 
          <td>${user.id}</td> 
 
          <td>${user.username}</td> 
 
          <td>${user.email}</td> 
 
          <td>${user.password}</td> 
 
          <td> 
 
           <button type="button" class="btn btn-info btn-sm editButton" data-toggle="modal" 
 
             data-target="#myModal" data-id="${user.id}">Edit 
 
           </button> 
 
          </td> 
 
         </tr> 
 
        </c:forEach> 
 
       </table> 
 
      </div> 
 
     </div> 
 
     <div class="row"> 
 
      <div class="col-md-4 pull-right"> 
 
       <ul class="pagination"> 
 
        <c:forEach begin="0" end="${maxPage - 1}" var="i"> 
 
         <li><a href="/admin/edit-user?page=${i}">${i+1}</a></li> 
 
        </c:forEach> 
 
       </ul> 
 
      </div> 
 
     </div>

+0

ああ、もう1つ質問です。 Map のように@Requestparamを作成しようとすると、mapは常にnullです。 –

答えて

1

の私の一部は、セッション内のフィルタ情報を置くことはOKでなければなりません。 フィルタ列挙型を作成できます。 名前電子メールフィールド。 を保存/更新します。ユーザーが何かをフィルタリングするたびに、セッション中にというインスタンスがインスタンス化されます。

あなたがそうのようなクエリ文字列としてあなたのリンク(あなたのケースにページ番号)にごフィルタを添付することができます。
<a href="/admin/edit-user?page=${i}&filterby=${filter}">${i+1}</a>

あなたのコントローラでは、フィルタ情報を取得し、それに応じてそれを処理する必要があります(パラメータの値をとし、の名前またはのメール)を取得します。 filterby paramに値がない場合、フィルタは選択されません。

+0

Thx @ミンジュン。 Yのソリューション、それは私のために働く。 –

+0

ようこそ。 –

関連する問題