13

这是我当前的 PageableResolver:

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

首先,新类 PageableHandlerMethodArgumentResolver 的实现有点不同,因为它new PageRequest(1, 5)指的是 2. 页面,所以我不得不使用new PageRequest(0, 5)它来显示第一页。

但是我仍然对这个新对象有疑问。当我调用不带参数的 URL(既不是 page.page 也不是 page.size)时,分页栏的第一次加载是完美的。然后当我想在分页栏上移动时,我们用 2 个参数(例如 page.page=3&page.size=5)调用相同的 url,仍然显示第一页。我认为这个新的解析器需要的不仅仅是这两个参数,这样它就不会激活回退条件。你知道如何使用这个 PageableHandlerMethodArgumentResolver 吗?

4

3 回答 3

4

我刚刚在这个类的实现中找到了答案。我们现在需要对这个新类进行 2 处更改:

  1. 参数不再有前缀“page”。“ ..?page=2&size=5”有效。
  2. 由于第 1 页现在指的是第 2 页,所以我们必须在 pagination.jsp 中重新定义我们的参数:..?page=${item.number-1}而不是..?page=${item.number}
于 2013-11-03T19:26:09.937 回答
4

您可以使用以下方法更改参数名称:setPageParameterName、setSizeParameterName。

如果您的初始页面为 1,则将此 setOneIndexedParameters 设置为 true。

@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);
}
于 2014-07-03T13:40:05.357 回答
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>

这将覆盖默认参数名称。

于 2014-01-09T13:38:04.093 回答