2013-03-22 13 views
6

Ich versuche, die Web-Paginierung von Spring Data arbeiten zu lassen. Es ist hier beschrieben:Spring Data Web-Paginierung "Seite" -Parameter funktioniert nicht

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

Hier ist meine Java (Spring Web MVC @Controller-Handler-Methode):

@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()); 

    ... 
} 

Und hier ist meine Spring-Konfiguration:

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

(Es scheint, dass Die oben beschriebene Konfiguration ist der Weg, dies jetzt zu tun, der Konfigurationsansatz, der in der Verbindung beschrieben wird, ist veraltet.)

Wenn ich tatsächlich versuche, die Seitennummerierung mit den Parametern page und page.size zu steuern, funktioniert letzteres gut, aber ersteres nicht. Zum Beispiel, wenn ich getroffen

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

die Protokollausgabe ist

Params: pageNumber=0, pageSize=42 

So weiß ich, dass das Argument Resolver in kickt, aber nicht sicher, warum es die Seitenzahl nicht hat lösen. Ich habe eine Reihe anderer Parameternamen ausprobiert (z. B. page.number, pageNumber, page.num usw.) und keiner von ihnen funktioniert.

Funktioniert das für jeden anderen?

Antwort

7

die Seite Parameter ist eigentlich ein bisschen nicht intuitiv - page.page und nicht page, zu page.page wechseln sollte Dinge zur Arbeit zu bekommen.

+0

LOL, danke Mann. –

+6

Spring 3 razor

+0

' page.page' scheint nicht zu funktionieren. Irgendwelche Veränderungen? –

2

Blick in die PageableArgumentResolver Ich fand, dass prefix und separator konfigurierbar sind, so dass Sie die Klasse konfigurieren können, um es nicht zu haben.

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 = "."; 

in meiner @Configuration Klasse habe ich etwas anderes page mit zu erreichen, size, sort und sortDir als Standard.

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

Jetzt funktioniert das

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

0

Sie können Parameter überschreiben, wenn Sie tun möchten:

<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 - Wenn wir oneIndexedParameters auf true setzen, sollte was der pageIndex sein? – Prateek

Verwandte Themen