不推荐使用Spring PageableArgumentResolver,如何使用PageableHandlerMethodArgumentResolver?

akc*_*soy 13 java spring spring-mvc spring-data

这是我当前的PageableResolver:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    PageableArgumentResolver resolver = new PageableArgumentResolver();
    resolver.setFallbackPageable(new PageRequest(1, 5));
    argumentResolvers.add(new ServletWebArgumentResolverAdapter(resolver));
}
Run Code Online (Sandbox Code Playgroud)

但是不推荐使用PageableArgumentResolver,并链接到PageableHandlerMethodArgumentResolver,我想我们可以在没有适配器的情况下注册,如下所示:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
    resolver.setFallbackPageable(new PageRequest(0, 5));
    argumentResolvers.add(resolver);
}
Run Code Online (Sandbox Code Playgroud)

首先,新类PageableHandlerMethodArgumentResolver的实现有点不同,因为new PageRequest(1, 5)引用2.页面所以我必须使用new PageRequest(0, 5)它才能显示第一页.

但我仍然有这个新对象的问题.当我调用没有参数的URL(page.page和page.size)时,首次加载分页栏是完美的.然后,当我想移动分页栏时,我们使用2个参数调用相同的URL(例如,page.page = 3&page.size = 5),仍然显示第一页.我认为这个新的解析器需要的不仅仅是这两个参数,因此它不会激活回退条件.您是否知道如何使用此PageableHandlerMethodArgumentResolver?

akc*_*soy 4

我刚刚在这个类的实现中找到了答案。我们现在需要对这个新类进行 2 处更改:

  1. 参数不再有前缀“page”。” ..?page=2&size=5“有效。
  2. 由于页面 1 现在引用了页面 2,因此我们必须在 pagination.jsp 中重新定义参数:..?page=${item.number-1}而不是..?page=${item.number}