gpt4 book ai didi

java - 从网格中获取所有项目,并在 Vaadin 13 中应用当前过滤器和排序

转载 作者:行者123 更新时间:2023-12-05 02:56:45 25 4
gpt4 key购买 nike

我正在尝试导出网格中的所有项目。检索到的列表应服从所有应用的过滤器和排序。我正在使用 ListDataProvider如果重要的话。

建议的解决方案包括:

  1. 使用ListDataProvider.getItems()grid.getDataProvider().fetch(new Query<>()).collect(Collectors.toList()) ( here )
  2. 使用grid.getDataCommunicator().fetchItemsWithRange(0,grid.getDataCommunicator().getDataProviderSize()) (herehere)
  3. 使用grid.getDataCommunicator().fetchFromProvider(..) ( here )

缺点:

  1. 项目未排序/过滤。
  2. Vaadin 8 的解决方案,Vaadin 13 中不存在的方法。
  3. 提供的方法 protected ,因此无法调用。

如何使用应用过滤器和排序从网格中实际获取所有项目?

最佳答案

自从你施放 grid.getDataProviderListDataProvider<Type> ,您可以从 ListDataProvider 获取当前过滤器以用于获取查询。

但是只对查询使用Filter会忽略排序顺序。要考虑所有这些信息,您需要使用来自 dataProvider(过滤信息)和 dataCommunicator(排序信息)的信息

ListDataProvider<Type> dataProvider = (ListDataProvider<Type>) grid.getDataProvider();
int totalSize = dataProvider.getItems().size();
DataCommunicator<Type> dataCommunicator = grid.getDataCommunicator();
Stream<Type> stream = dataProvider.fetch(new Query<>(
0,
totalSize,
dataCommunicator.getBackEndSorting(),
dataCommunicator.getInMemorySorting(),
dataProvider.getFilter()));
List<Type> list = stream.collect(Collectors.toList());

编辑:您在回答中说这感觉“hacky”。我明白你的意思,但这是做到这一点的方法。我认为这种行为可以作为网格本身的公共(public) api 提供:List<Type> list = grid.getCurrentItems(); .然后网格将在内部执行此操作,因此您自己不会看到“hacky”部分。我敢肯定,当数据提供者不是 ListDataProvider 的实例时,他们知道如何做同样的事情。 .您可以在 github repo 中为此打开功能请求

关于java - 从网格中获取所有项目,并在 Vaadin 13 中应用当前过滤器和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60203253/

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