2013-11-03 126 views
13

这是我目前PageableResolver:Spring PageableArgumentResolver已弃用,如何使用PageableHandlerMethodArgumentResolver?

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

但PageableArgumentResolver已被弃用,并链接到PageableHandlerMethodArgumentResolver,我想我们可以在没有适配器注册,像这样:

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

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

但我仍然有这个新对象的问题。当我调用没有参数的URL时(无论page.page还是page.size),分页栏的第一次加载是完美的。然后,当我想要在分页栏上移动时,我们使用2个参数调用相同的url(例如,page.page = 3 & page.size = 5),但仍显示第一页。我认为这个新的Resolver需要的不仅仅是这两个参数,所以它不会激活回退条件。你有任何想法如何使用这个PageableHandlerMethodArgumentResolver?

回答

4

我刚刚在该课程的实施中找到答案。我们现在需要对此新类别进行2次更改:

  1. 参数没有前缀“page”了。 “..?page=2&size=5”的作品。
  2. 由于页1指的是第2页。现在,我们必须重新定义我们的参数在pagination.jsp:中..?page=${item.number-1}代替..?page=${item.number}
2

你可以在你的bean定义更改参数名:

<annotation-driven> 
    <argument-resolvers> 
     <beans:bean class="org.springframework.data.web.PageableHandlerMethodArgumentResolver"> 
      <beans:property name="maxPageSize" value="7"></beans:property> 
      <beans:property name="oneIndexedParameters" value="true"></beans:property> 
      <beans:property name="pageParameterName" value="page.page"></beans:property> 
      <beans:property name="sizeParameterName" value="page.size"></beans:property> 
     </beans:bean> 
    </argument-resolvers> 
</annotation-driven> 

这将覆盖默认参数名称。

+0

这似乎并不工作设置此setOneIndexedParameters为true。查看参数解析器的文档,它说:“使用此选项不会覆盖解析处理器方法参数的内置支持。要直接定制对参数解析的内置支持,请配置RequestMappingHandlerAdapter。” – jplandrain

+0

请参阅http://stackoverflow.com/questions/23521280/spring-data-rest-configure-pagination – jplandrain

3

您可以使用以下方法更改参数名称:setPageParameterName,setSizeParameterName。

如果你的初始页面是1

@Override 
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { 
    PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver(); 
    resolver.setPageParameterName("page.page"); 
    resolver.setSizeParameterName("page.size"); 
    resolver.setOneIndexedParameters(true); 
    argumentResolvers.add(resolver); 
    super.addArgumentResolvers(argumentResolvers); 
} 
+0

像这样,您不会影响您的前端。 – user3799232