【问题标题】:Converting CallbackDataProvider offset and limit to Pageable page and size将 CallbackDataProvider 偏移量和限制转换为可分页页面和大小
【发布时间】:2018-01-16 22:16:27
【问题描述】:

我有一个接受 PAGE 和 SIZE 参数的现有 REST 服务

/fetchrecords?page=0&size=10

反过来,它创建了一个 Spring Pageable 以与 Spring Repository 一起使用。

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 != 页面起作用,并且限制值会根据剩余的记录数而改变,根据偏移位置。

在不重写其余/服务的情况下,如何正确地从 DataProvider OFFSET 和 LIMIT 转到 PAGE 和 SIZE?

【问题讨论】:

  • 只需从限制中减去偏移量(这会给您 pageSize),然后您可以将偏移量除以 pageSize(页面)
  • @ByeBye 如果偏移量不在页面的开头怎么办?
  • @ByeBye Vaadin DataProvider 将始终在您滚动组件(网格)时更改限制和偏移量,因此我怀疑直接基于页面/大小是不可靠的。

标签: java spring vaadin vaadin8


【解决方案1】:

我遇到了同样的问题。带有偏移量和限制的 Vaadin 分页比带有页面和页面大小的分页更强大(如在您的 REST 服务和 Spring 类 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;
    }

    ...

}

我想知道为什么这不是开箱即用的。

另一种选择是将偏移量/限制映射到可能包含所需数据范围的多个页面,然后获取这些页面并仅获取必要的数据。

请注意:这不适用于 Vaadin 通过 Spring Data Neo4j 访问 Neo4j 时请求的最后一页。 SDN v5.2.8 将使用以下代码应用“跳过”查询

parameters.put(SKIP, pageable.getPageNumber() * pageable.getPageSize());

getPageNumber 的使用是一个问题,例如偏移量 100 和限制 23 会导致跳过 92。提交了issue

【讨论】:

  • 您可以找到可分页实现的完整工作示例here
  • @forfic,谢谢。我确实遇到了 Custom Pageable,但是我试图摆脱修改我的服务,因为其他所有东西都使用 Page,Size 目前。如果没有其他选择,我将不得不在我的 api/service 中支持 offset 和 limit
  • 正如我所提到的,另一个选项是将偏移/限制范围映射到多个页面,检索它们,然后只获取您需要的数据。当然这在某种程度上是一种资源浪费:)
【解决方案2】:

您可以使用 Spring Data Provider Add-on。

https://vaadin.com/directory/component/spring-data-provider-add-on

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 2019-09-27
    • 2021-12-20
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多