2013-03-22 43 views
6

我试图让Spring Data的网页分页工作。它在这里描述:春季数据网页分页“页面”参数不起作用

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

,这里是我的Java(Spring 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

哈哈,谢谢你。 – 2013-03-22 21:26:25

+6

Spring 3 <使用'page','size','sort' – razor 2013-11-25 12:19:30

+0

'page.page'似乎不起作用。任何变化? – 2017-11-03 03:12:08

2

调查PageableArgumentResolver我发现prefixseparator是可配置的,所以你可以配置类没有它。

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

在我@Configuration类我做了不同的使用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 2015-09-16 14:27:28