buc*_*uck 3 combobox large-data vaadin
在 Vaadin 应用程序上,我在每个选项卡上实例化相同的组合框。
这些组合框包含大量信息列表。这需要服务器上的大量内存。
我有三个选项卡,因此组合框出现了三次。
我希望使用模式单例在我的应用程序上创建一个组合框。
这一组合框将由三个选项卡共享。
但是,如果我应用此模式单例,则组合框仅一次出现在一个选项卡上。
如何创建一个单例组合框并且最后出现在每个选项卡上?
提前致谢。
Vaadin 组件一次只能附加到一个 UI 和一个布局。因此 Vaadin 组件不能是单例的。
但是,您还有许多其他选择来解决您的实际问题。
第一个也是最明显的事情是您可以在 ComboBox 中的回调中使用数据提供程序。如果信息列表很大,这是您应该做的第一件事。当您使用回调中的数据提供程序时,当用户滚动组合框时,内存中仅保留少量项目缓冲区。
DataProvider<Bean, Void> dataProvider =
DataProvider.fromCallbacks(
query -> {
List<Bean> beans = getBeansService()
.fetchBeans(query.getOffset(), query.getLimit());
return beans.stream();
},
query -> getBeansService().getBeansCount());
);
ComboBox<Bean> combo = new ComboBox<>();
combo.setDataProvider(dataProvider);
Run Code Online (Sandbox Code Playgroud)
当您像这样设置 ComboBox 时,您可以轻松拥有 ComboBox 的多个实例。
如果您仍然在内存数据提供程序中使用,您实际上可以与多个组件实例共享它。
ListDataProvider<Bean> dataProvider = DataProvider.ofCollection(items);
comboBox1.setDataProvider(dataProvider);
comboBox2.setDataProvider(dataProvider);
Run Code Online (Sandbox Code Playgroud)