gpt4 book ai didi

java - 如何设置 DataProvider 从后端获取的元素数量?

转载 作者:行者123 更新时间:2023-12-04 01:37:34 26 4
gpt4 key购买 nike

我想将网格中的一些数据延迟加载到我的 Vaadin View 中。网格行有时非常大,所以我想限制一次加载的行数,假设为 2。

我尝试使用 DataProvider.fromCallbacks() 来做到这一点.不幸的是,我没有得到我想要的结果,我对传递给方法的两个函数有点困惑。

据我正确理解,传递的第一个函数描述了如何获取项目,第二个函数告诉 DataProvider 可以获取的最大可能项目数量。

fromCallbacks(CallbackDataProvider.FetchCallback fetchCallback, CallbackDataProvider.CountCallback countCallback) Creates a new data provider that uses callbacks for fetching and counting items from any backing store.



我尝试了以下操作,但它总是导致获取了很多项目。 (列表中的 17 个项目导致获取 17 个项目,列表中的 120 个项目导致 50 个批次)
    List<SomeObject> data = ... // filled with objects

DataProvider<CustromCell, Void> lazyLoadingProvider
= DataProvider.fromCallbacks(
query -> {
int offset = query.getOffset();
int limit = query.getLimit(); // Is this the amount of items that are fetched in one step?

if (offset + limit > data.size())
return data.stream();

List<CustromCell> cells = data.subList(offset,offset+limit);
//(offest,offset+2) crashes
return cells.stream()
},
query -> data.size() // Max possible items to fetch
);
grid.setDataProvider(lazyLoadingProvider);

具有以下行为:
Size Of Data: 219
Offset: 0
Limit: 50

Size Of Data: 219
Offset: 50
Limit: 50

Size Of Data: 219
Offset: 100
Limit: 50

Size Of Data: 219
Offset: 150
Limit: 50

Size Of Data: 219
Offset: 200
Limit: 19

我要打电话 getOffset()getLimit() Query 对象,否则抛出异常。如果我理解正确,那么限制会告诉我们应该获取多少个项目(在我的例子中目标是 2)但是对象是不可变的,所以我不能改变这个值( Query API )?

tl;博士 如何告诉 DataProvider 一次只获取网格的 2 个项目?

编辑 :我发现了与我的问题相关的 github 问题( #6072#3830 )

编辑 2 :合并了一个 github 问题,因此 getLimit() 方法的工作原理更加清晰: https://github.com/vaadin/flow/issues/6996

最佳答案

我能够为此找到解决方案。
query.getLimit()方法取决于组件的(所以网格的)页面大小。

引用 Grid API :

Grid()

Creates a new instance, with page size of 50.



我的网格是这样初始化的: Grid a = new Grid();这导致页面大小为 50。 query.getLimit()在这种情况下将返回 50。

Grid(int pageSize)

Creates a new instance, with the specified page size.



像这样初始化网格: Grid a = new Grid(5); . query.getLimit()在这种情况下现在将返回 5 和 DataProvider将只获取接下来的 5 个元素。

编辑 :关于此 SO 问题的 github 问题已合并: https://github.com/vaadin/flow/issues/6996

关于java - 如何设置 DataProvider 从后端获取的元素数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58974364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com