在Vaadin应用程序上,我在每个选项卡上安装一个相同的组合框。
这些组合框包含一个大的信息列表。这占用了服务器上的大量内存。
我有三个选项卡,因此,组合框出现三次。
我希望在我的应用程序上创建一个带有模式singleton的组合框。
这一个组合框将由三个选项卡共享。
但如果我应用这个模式singleton,组合框一次只出现在一个选项卡上
如何创建一个单独的组合框,并在每个选项卡上最后显示?
提前谢谢。
Vaadin组件只能附加到一个UI,一次只能附加一个布局。因此Vaadin组件不能是singleton。
然而,你还有许多其他的选择来解决你的实际问题。
第一件也是最明显的一件事是,您可以使用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);
当你像这样设置组合框时,你可以很容易地拥有多个组合框实例。
如果您仍然使用内存中的数据提供程序,您实际上可以与多个组件实例共享它。
ListDataProvider<Bean> dataProvider = DataProvider.ofCollection(items);
comboBox1.setDataProvider(dataProvider);
comboBox2.setDataProvider(dataProvider);