Spring Data web分页“page”参数不起作用

时间:2013-03-22 19:39:02

标签: java spring spring-mvc pagination spring-data

我正在努力让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

所以我知道论证解析器正在进行,但不确定为什么它不能解析页码。我尝试过其他一些param名称(例如page.number,pageNumber,page.num等),但没有一个能够工作。

这适用于其他人吗?

3 个答案:

答案 0 :(得分:7)

页面参数实际上有点不直观 - page.page而不是page,更改为page.page应该会让事情发挥作用。

答案 1 :(得分: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

答案 2 :(得分: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>