如何保存过滤器参数。分页

时间:2016-06-28 19:46:42

标签: java spring jsp spring-mvc pagination

我在搜索过滤器和分页方面遇到了一些问题。过滤器运行良好,但我不能对分页说同样的话。

我有一个用户表。我可以显示所有用户或过滤器(按名称,通过电子邮件)。当我使用过滤器并尝试转到第二页时,它会返回所有用户而不进行过滤。我明白为什么会这样,因为没有过滤器参数。帮我找到解决方案。我如何保持选定的过滤器?会话的东西? 这是我的代码。

我的控制器

@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

的一部分

&#13;
&#13;
<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;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

在您的情况下,将过滤器信息放入会话应该没问题。您可以创建一个过滤器枚举,例如名称电子邮件字段。每次用户想要过滤某些内容时,在会话中存储/更新过滤器实例。

您可以将过滤器附加到您的链接(在您的案例中为页码)作为查询字符串,如下所示:
<a href="/admin/edit-user?page=${i}&filterby=${filter}">${i+1}</a>

在您的控制器中,您需要获取过滤器信息并相应地处理它(获取param 过滤器的值,这是名称电子邮件)。如果 filterby 参数没有值,则不会选择过滤器。