将 CallbackDataProvider 偏移量和限制转换为可分页页面和大小
Converting CallbackDataProvider offset and limit to Pageable page and size
我有一个接受 PAGE 和 SIZE 参数的现有 REST 服务
/fetchrecords?page=0&size=10
这反过来会创建一个 Spring 可分页以与 Spring 存储库一起使用。
Pageable pageRequest = new PageRequest(page, size, Sort.Direction.DESC, "created");
我现在想使用 Vaadin 8 CallbackDataProvider,但它会生成用于 BackendDataProvider 的 OFFSET 和 LIMIT。
dataProvider = new CallbackDataProvider<MyPojo, Void>(
query -> service.fetchrecords(query.getOffset(), query.getLimit()).stream(),
query -> service.getCount());
当然这不会像 offset != page 那样起作用,并且限制值会根据 offset 位置根据剩余的记录数而变化。
在不重写 rest/service 的情况下,我如何才能正确地从 DataProvider OFFSET 和 LIMIT 转到 PAGE 和 SIZE?
我遇到了同样的问题。具有偏移量和限制的 Vaadin 分页比具有页面和页面大小的分页更强大(如在您的 REST 服务和 spring class PageRequest 中)。所以,你的问题的答案是:你不能轻易。如果您可以将 REST 服务参数更改为偏移和限制,那么您可以实现自己的 Pageable
,例如:
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;
}
...
}
我想知道为什么这不是开箱即用的。
另一种选择是将 offset/limit 映射到可能包含所需数据范围的多个页面,然后获取这些页面并仅获取必要的数据。
请注意: 当通过 Spring Data Neo4j 访问 Neo4j 时,这不适用于 Vaadin 请求的最后一页。 SDN v5.2.8 将使用以下代码将“skip”应用于查询
parameters.put(SKIP, pageable.getPageNumber() * pageable.getPageSize());
使用getPageNumber
是个问题,例如偏移 100 和限制 23 导致跳过 92。提交 issue.
您可以使用 Spring 数据提供程序 Add-on。
https://vaadin.com/directory/component/spring-data-provider-add-on
我有一个接受 PAGE 和 SIZE 参数的现有 REST 服务
/fetchrecords?page=0&size=10
这反过来会创建一个 Spring 可分页以与 Spring 存储库一起使用。
Pageable pageRequest = new PageRequest(page, size, Sort.Direction.DESC, "created");
我现在想使用 Vaadin 8 CallbackDataProvider,但它会生成用于 BackendDataProvider 的 OFFSET 和 LIMIT。
dataProvider = new CallbackDataProvider<MyPojo, Void>(
query -> service.fetchrecords(query.getOffset(), query.getLimit()).stream(),
query -> service.getCount());
当然这不会像 offset != page 那样起作用,并且限制值会根据 offset 位置根据剩余的记录数而变化。
在不重写 rest/service 的情况下,我如何才能正确地从 DataProvider OFFSET 和 LIMIT 转到 PAGE 和 SIZE?
我遇到了同样的问题。具有偏移量和限制的 Vaadin 分页比具有页面和页面大小的分页更强大(如在您的 REST 服务和 spring class PageRequest 中)。所以,你的问题的答案是:你不能轻易。如果您可以将 REST 服务参数更改为偏移和限制,那么您可以实现自己的 Pageable
,例如:
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;
}
...
}
我想知道为什么这不是开箱即用的。
另一种选择是将 offset/limit 映射到可能包含所需数据范围的多个页面,然后获取这些页面并仅获取必要的数据。
请注意: 当通过 Spring Data Neo4j 访问 Neo4j 时,这不适用于 Vaadin 请求的最后一页。 SDN v5.2.8 将使用以下代码将“skip”应用于查询
parameters.put(SKIP, pageable.getPageNumber() * pageable.getPageSize());
使用getPageNumber
是个问题,例如偏移 100 和限制 23 导致跳过 92。提交 issue.
您可以使用 Spring 数据提供程序 Add-on。
https://vaadin.com/directory/component/spring-data-provider-add-on