2013-11-03 18 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); 
} 

ファーストnew PageRequest(1, 5)は2ページを参照するので、新しいクラスPageableHandlerMethodArgumentResolverの実装は少し異なります。最初のページを表示するにはnew PageRequest(0, 5)を使用しなければなりませんでした。

しかし、私はまだこの新しいオブジェクトに問題があります。ページングバーの最初の読み込みは、パラメータなしでURLを呼び出すと完璧です(page.pageもpage.sizeもありません)。そして、私はページ区切りバーを移動したいとき、2つのパラメータ(page.page = 3 & page.size = 5など)で同じURLを呼び出していますが、最初のページはまだ表示されています。私は、この新しいリゾルバは、これらの2つのパラメータ以上のものを必要としているため、フォールバック条件がアクティブにならないと思います。このPageableHandlerMethodArgumentResolverの使い方を知っていますか?

答えて

4

私はこのクラスの実装で答えを見つけました。

  1. パラメータには、もはや接頭辞「ページ」がありません。 "..?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

これは動作していないようであればtrueに、このsetOneIndexedParametersを設定します。 "このオプションを使用しても、ハンドラメソッドの引数を解決するビルトインサポートがオーバーライドされることはありません。引数解決のビルトインサポートをカスタマイズするには、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