我在搜索过滤器和分页方面遇到了一些问题。过滤器运行良好,但我不能对分页说同样的话。
我有一个用户表。我可以显示所有用户或过滤器(按名称,通过电子邮件)。当我使用过滤器并尝试转到第二页时,它会返回所有用户而不进行过滤。我明白为什么会这样,因为没有过滤器参数。帮我找到解决方案。我如何保持选定的过滤器?会话的东西? 这是我的代码。
我的控制器
@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>
&#13;
答案 0 :(得分:1)
在您的情况下,将过滤器信息放入会话应该没问题。您可以创建一个过滤器枚举,例如名称,电子邮件字段。每次用户想要过滤某些内容时,在会话中存储/更新过滤器实例。
您可以将过滤器附加到您的链接(在您的案例中为页码)作为查询字符串,如下所示:
<a href="/admin/edit-user?page=${i}&filterby=${filter}">${i+1}</a>
在您的控制器中,您需要获取过滤器信息并相应地处理它(获取param 过滤器的值,这是名称或电子邮件)。如果 filterby 参数没有值,则不会选择过滤器。