我正在努力让Spring Data的网页分页工作。它在这里描述:
这是我的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>
(看来上面的配置是现在这样做的方法;链接中描述的配置方法已被弃用。)
当我实际尝试使用page
和page.size
参数控制分页时,后者工作得很好,但前者没有。例如,如果我点击
http://localhost:8080/myapp/list?page=14&page.size=42
日志输出
Params: pageNumber=0, pageSize=42
所以我知道论证解析器正在进行,但不确定为什么它不能解析页码。我尝试过其他一些param名称(例如page.number,pageNumber,page.num等),但没有一个能够工作。
这适用于其他人吗?
答案 0 :(得分:7)
页面参数实际上有点不直观 - page.page
而不是page
,更改为page.page
应该会让事情发挥作用。
答案 1 :(得分:2)
调查PageableArgumentResolver
我发现prefix
和separator
是可配置的,因此您可以将该课程配置为不具备该版本。
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类中,我使用page
,size
,sort
和sortDir
作为默认值,做了不同的事情。
@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>