我可以创建单例 vaadin 组合框组件吗?
Posted
技术标签:
【中文标题】我可以创建单例 vaadin 组合框组件吗?【英文标题】:Can I create singlenton vaadin combobox component? 【发布时间】:2021-12-18 19:57:15 【问题描述】:在 Vaadin 应用程序中,我在每个选项卡上实例化了相同的组合框。
这些组合框包含一个大的信息列表。这会在服务器上占用大量内存。
我有三个选项卡,因此组合框出现了 3 次。
我希望在我的应用程序上创建一个带有模式单例的组合框。
这一个组合框将由三个选项卡共享。
但如果我应用这种模式单例,组合框只会出现在一个选项卡上。
如何创建一个单例组合框并且最后出现在每个选项卡上?
提前致谢。
【问题讨论】:
【参考方案1】:Vaadin 组件一次只能附加到一个 UI 和一个布局。因此 Vaadin 组件不能是单例的。
但是,您还有许多其他选项可以解决您的实际问题。
首先也是最明显的一点是,您可以在 ComboBox 中使用data provider from callbacks。如果信息列表很大,这是您应该做的第一件事。当您使用回调中的数据提供程序时,只有少量的项目缓冲区会保存在内存中,并且当用户滚动 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);
当您像这样设置 ComboBox 时,您可以轻松拥有多个 ComboBox 实例。
如果您仍然使用内存数据提供程序,您实际上可以与多个组件实例共享它。
ListDataProvider<Bean> dataProvider = DataProvider.ofCollection(items);
comboBox1.setDataProvider(dataProvider);
comboBox2.setDataProvider(dataProvider);
【讨论】:
感谢您的建议,我将按照您的指示进行操作。以上是关于我可以创建单例 vaadin 组合框组件吗?的主要内容,如果未能解决你的问题,请参考以下文章