首页 > 解决方案 > 如何在 vaadin 流程中禁用 ComboBox 中的清除按钮?

问题描述

我需要一个没有这个清除按钮的组合框。它使用户感到困惑。
在此处输入图像描述

我相信在 Vaadin 8 中它可以用setEmptySelectionAllowed(true);.
如何在 vaadin 10 中删除它?setAllowCustomValue(false)没有帮助。

Java 8
Vaadin 10.0.2

标签: vaadinvaadin10vaadin-flow

解决方案


我想实现这一目标的最简单方法是使用 CSS,至少我会这样做。

您要做的是扩展VaadinComboBoxWeb 组件的默认主题模块(请参阅https://github.com/vaadin/vaadin-themable-mixin/wiki/2.-Adding-Styles-to-Local-Scope),因此您可以使用以下方法:

  1. 首先,选择一个 CSS 类名,比如my-combobox
  2. 接下来,创建一个 HTML 文件,其中将包含 VaadinComboBox Web 组件的默认主题模块的扩展名。给它起一个名字my-combobox-theme.html并放入src/main/resources/META-INF/resources(是的,它是resources两次)
  3. 将以下内容放入该 HMTL 文件中:

    <dom-module id="my-combobox-theme" theme-for="vaadin-combo-box">
        <template>
            <style>
                :host(.my-combobox) [part="clear-button"] {
                    display:none !important
                }
            </style>
        </template>
    </dom-module>
    

在第一行中,您声明以下 CSS 应该补充为 VaadinComboBox Web 组件定义的任何样式。

然后,唯一的 CSS 规则定义,只要有一个具有 CSS 类的 VaadinComboBox,就不应该显示 Web 组件的一部分my-comboboxclear-button

  1. 将自定义模块导入到带有@HtmlImport("frontend://my-combobox-theme.html"). 注意:您需要在要在其中使用修改后的 ComboBox 的所有视图中添加此注释。有关替代方法,请参见第 6 点

  2. 现在你几乎都准备好了。每当您想要一个ComboBox没有删除按钮时,只需添加一个类名comboBox.addClassName("my-combobox")

  3. 您可能希望在多个地方使用您的 ComboBox,因此创建自己的类是一个好主意。这为您提供了一个可重用的组件,并确保始终为自定义样式正确导入 HTML:

    @HtmlImport("frontend://my-combobox-theme.html")
    public class MyCombobox extends ComboBox {
    
        public MyCombobox() {
            addClassName("my-combobox");
    
            // Adding the following code registers a listener which
            // resets the old value in case the user clears the
            // combo box editor manually, e.g. by entering "".
            //
            // addValueChangeListener(listener -> {
            //     if(listener.getValue() == null) {
            //         setValue(listener.getOldValue());
            //     }
            // });
        }
    
    }
    

推荐阅读