vaadin - 如何在 vaadin 流程中禁用 ComboBox 中的清除按钮?
问题描述
我相信在 Vaadin 8 中它可以用setEmptySelectionAllowed(true);
.
如何在 vaadin 10 中删除它?setAllowCustomValue(false)
没有帮助。
Java 8
Vaadin 10.0.2
解决方案
我想实现这一目标的最简单方法是使用 CSS,至少我会这样做。
您要做的是扩展VaadinComboBox
Web 组件的默认主题模块(请参阅https://github.com/vaadin/vaadin-themable-mixin/wiki/2.-Adding-Styles-to-Local-Scope),因此您可以使用以下方法:
- 首先,选择一个 CSS 类名,比如
my-combobox
- 接下来,创建一个 HTML 文件,其中将包含 VaadinComboBox Web 组件的默认主题模块的扩展名。给它起一个名字
my-combobox-theme.html
并放入src/main/resources/META-INF/resources
(是的,它是resources
两次) 将以下内容放入该 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-combobox
。clear-button
将自定义模块导入到带有
@HtmlImport("frontend://my-combobox-theme.html")
. 注意:您需要在要在其中使用修改后的 ComboBox 的所有视图中添加此注释。有关替代方法,请参见第 6 点现在你几乎都准备好了。每当您想要一个
ComboBox
没有删除按钮时,只需添加一个类名comboBox.addClassName("my-combobox")
您可能希望在多个地方使用您的 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()); // } // }); } }
推荐阅读
- nativescript - Nativescript - 插件 nativescript-ui-pro 饼图刷新
- python - 从列表一次添加一行到新对象
- node.js - 了解大查询表
- excel - 将不是数字的字符串转换为整数
- python - 我也想将用户在其他屏幕的一个屏幕上输入的文本用作标题(按钮或标签)
- exist-db - eXist-DB / XQuery StringValue 不能转换为 AnyURIValue(使用压缩:zip)
- javascript - React Props 不起作用,完全是初学者
- java - 使用 RecyclerView 自动播放视频和图像
- css - 使用 Bootstrap 4 Stacked Fixed-Top Navbars,我们如何将下拉菜单保持在前面?
- c# - Xamarin.Mac - 网络连接/断开事件