2013-03-22 13 views
6

Spring DataのWebページネーションを取得しようとしています。それは、ここで説明しています:SpringデータのWebページネーション「ページ」パラメータが機能しません

http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/repositories.html#web-pagination

は、ここに私のJava(春のWeb MVC @Controllerハンドラメソッド)です。

@RequestMapping(value = "/list", method = RequestMethod.GET) 
public String list(
    @PageableDefaults(value = 50, pageNumber = 0) Pageable pageable, 
    Model model) { 

    log.debug("Params: pageNumber={}, pageSize={}", 
     pageable.getPageNumber(), pageable.getPageSize()); 

    ... 
} 

そして、ここでは私のSpring構成です:

<mvc:annotation-driven> 
    <mvc:argument-resolvers> 
     <bean class="org.springframework.data.web.PageableArgumentResolver" /> 
    </mvc:argument-resolvers> 
</mvc:annotation-driven> 

(これは、と思われます上記の設定はこれを行う方法です;このリンクで説明されている設定方法は廃止予定です)

実際にpagepage.sizeのパラメータを使用してページネーションを制御しようとすると、後者はうまく動作しますが、前者は正しく動作しません。例えば、場合、私は

http://localhost:8080/myapp/list?page=14&page.size=42 

を打つログ出力が

Params: pageNumber=0, pageSize=42 

は、だから私は、引数リゾルバがで蹴っていることを知っているが、それはページ番号を解決していない理由はわかりません。他のパラメータ名(例:page.number、pageNumber、page.numなど)を試してみましたが、どれも動作していません。

これは誰のためにも機能しますか?

答えて

7

ページパラメータは実際には直感的ではありません。page.pageで、pageではなく、page.pageに変更すると機能します。

+0

LOL、thanks man。 –

+6

Spring 3は 'page'、' size'、 'sort'を使用します – razor

+0

' page.page'は動作していないようです。変更はありますか? –

2

PageableArgumentResolverを見ると、prefixseparatorは設定可能であるため、そのクラスを持たないように設定できます。私@Configurationクラスの

public class PageableArgumentResolver implements WebArgumentResolver { 

    private static final Pageable DEFAULT_PAGE_REQUEST = new PageRequest(0, 10); 
    private static final String DEFAULT_PREFIX = "page"; 
    private static final String DEFAULT_SEPARATOR = "."; 

私はデフォルトとしてpagesizesortsortDirを使用して達成するために異なる何かをしました。

@Override 
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { 
    PageableArgumentResolver resolver = new PageableArgumentResolver(); 
    resolver.setPrefix(""); 
    resolver.setSeparator(""); 
    argumentResolvers.add(new ServletWebArgumentResolverAdapter(resolver)); 
} 

は今、この作品

ます。http://:?8080/myappに/リストページ= 14 &サイズ= 42

0

あなたが実行して欲しい場合は、パラメータを上書きすることができます:

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

Nik - oneIndexedParametersをtrueに設定した場合、pageIndexはどうすべきですか? – Prateek

関連する問題