2013-11-03 42 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