select 单选

select 支持用户从列表中选择单一值。

  • XML 元素:select

  • Java 类:JmixSelect

基本用法

selectcomboBox 类似。

当不需要用户输入对选项进行过滤时,请使用 select

select 最基本的用法就是从枚举中选择值:

<select itemsEnum="com.company.onboarding.entity.DayOfWeek"
        label="Select the day of week"/>
select basics

数据绑定

可以将组件与 数据容器 中的实体和属性绑定。

如需将 select 与实体属性绑定:

  1. 使用 dataContainer 属性指定数据容器。

  2. 使用 property 属性指定实体的属性。

  3. 使用 itemsContainer 属性指定选项列表的数据容器。

<data>
    <instance class="com.company.onboarding.entity.User"
              id="userDc"> (1)
        <fetchPlan extends="_base"> (2)
            <property name="department" fetchPlan="_base"/>
        </fetchPlan>
        <loader id="userDl"/>
    </instance>
    <collection class="com.company.onboarding.entity.Department"
                id="departmentsDc"> (3)
        <fetchPlan extends="_base"/>
        <loader id="departmentsDl">
            <query>
                <![CDATA[select e from Department e]]>
            </query>
        </loader>
    </collection>
</data>
<layout>
    <select dataContainer="userDc"
            property="department"
            itemsContainer="departmentsDc"/> (4)
</layout>
1 User 实体的 InstanceContainer
2 数据容器中的内嵌 fetch plan。
3 Department 实体的 CollectionContainer
4 select 使用 departmentsDc 作为选项容器,以展示部门列表。

XML 属性

emptySelectionAllowed

设置是否允许用户选择空值。当设置为 true 时,选项列表中会显示一个空白选项。 默认为 false

空选项可以通过 emptySelectionCaption 属性进行自定义。

emptySelectionCaption

emptySelectionAllowed = true 时,设置空白选项的标题。用于在选项列表中显示。

当选择空白选项时,组件显示的值为 itemLabelGenerator 提供的 null 选项值,或者由 placeholder 属性设置的占位符,当占位符也没设置时,则显示空白。

事件和处理器

在 Jmix Studio 生成处理器桩代码时,可以使用 Jmix UI 组件面板的 Handlers 标签页或者视图类顶部面板的 Generate Handler 添加,也可以通过 CodeGenerate 菜单(Alt+Insert / Cmd+N)生成。

InvalidChangeEvent

com.vaadin.flow.component.select.Select.InvalidChangeEvent 当组件的无效状态变化时发送。

OpenedChangeEvent

com.vaadin.flow.component.select.Select.OpenedChangeEvent 当组件的选项弹窗打开或关闭时发送。

itemEnabledProvider

itemEnabledProvider 作用于每个选项,用于判断该选项是否启用(true)或禁用(false)。禁用的选项显示为灰色,用户无法选择。默认所有选项都启用。

@Install(to = "select", subject = "itemEnabledProvider")
private boolean selectItemEnabledProvider(final Department department) {
    if (department != null) {
        return department.getHrManager() != null;
    }
    return true;
}

XML 内部元素

参考