我可以创建单例 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 组合框组件吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Vaadin8组合框中获得物品尺寸?

Swing组件

在 Access 中使用多个组合框作为查询条件不能一起使用,但使用一个组合框可以吗?如何使所有组合框工作?

组合框(JComboBox)的使用

单击按钮时如何删除组合框组件 flash as3

如何从数据库查询中填充组合框?