我可以创建单例 vaadin 组合框组件吗?

buc*_*uck 3 combobox large-data vaadin

在 Vaadin 应用程序上,我在每个选项卡上实例化相同的组合框。

这些组合框包含大量信息列表。这需要服务器上的大量内存。

我有三个选项卡,因此组合框出现了三次。

我希望使用模式单例在我的应用程序上创建一个组合框。

这一组合框将由三个选项卡共享。

但是,如果我应用此模式单例,则组合框仅一次出现在一个选项卡上。

如何创建一个单例组合框并且最后出现在每个选项卡上?

提前致谢。

Tat*_*und 5

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)