将CallbackDataProvider偏移量和限制转换为Pageable页面和大小

时间:2017-08-09 06:58:40

标签: java spring vaadin vaadin8

我有一个接受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,但它会产生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?

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。具有偏移量和限制的Vaadin分页比具有页面和页面大小的分页更强大(如在REST服务和Spring类PageRequest中)。所以,你的问题的答案是:你不能轻易。如果您可以将REST服务参数更改为offset和limit,那么您可以实现自己的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;
    }

    ...

}

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

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

答案 1 :(得分:-1)

您可以使用Spring Data Provider加载项。

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