我有一个接受PAGE和SIZE参数的现有REST服务
/fetchrecords?page=0&size=10
这反过来又创建了一个与Spring Repository一起使用的Spring分页。
Pageable pageRequest = new PageRequest(page, size, Sort.Direction.DESC, "created");
我现在想使用Vaadin 8 CallbackDataProvider,但是它会产生OFFSET和LIMIT用于BackendDataProvider。
dataProvider = new CallbackDataProvider<MyPojo, Void>(
query -> service.fetchrecords(query.getOffset(), query.getLimit()).stream(),
query -> service.getCount());
当然,这不适用于offset!=page,并且限制值将根据剩余的记录数量根据偏移位置而变化。
在不重写其余部分/服务的情况下,如何正确地从DataProvider OFFSET和LIMIT转到PAGE和SIZE?
我也遇到了同样的问题。带有偏移和限制的Vaadin分页比带有页面和页面大小的分页更强大(如在您的REST服务和Spring类PageRequest中)。所以,您问题的答案是:你不能轻易地。如果您可以将您的REST服务参数更改为偏移和限制,那么您可以实现自己的可分页
,如下所示:
public class Range implements Pageable, Serializable {
private static final long serialVersionUID = 0L;
private int limit;
private long offset;
private Sort sort;
public Range(long offset, int limit, Sort sort) {
...
}
@Override
public long getOffset() {
return offset;
}
...
}
我想知道为什么这不是开箱即用的。
另一种选择是将偏移/限制映射到可能包含所需数据范围的多个页面,然后获取这些页面并仅获取必要的数据。
请注意:这不适用于Vaadin通过Spring Data Neo4j访问Neo4j时请求的最后一页。SDNv5.2.8将使用以下代码应用“跳过”进行查询
parameters.put(SKIP, pageable.getPageNumber() * pageable.getPageSize());
getPageNumber
的使用是一个问题,例如偏移100和限制23导致跳过92。提交了一个问题。
您可以使用Spring Data Provider插件。
https://vaadin.com/directory/component/spring-data-provider-add-on