propertyFilter 属性过滤器
propertyFilter 可以基于某个 entity 属性定义一个过滤器条件。
该组件可以独立使用或作为 genericFilter 的一部分使用。
-
XML 元素:
propertyFilter -
Java 类:
PropertyFilter
基本用法
最简单的情况下,propertyFilter 有一个输入控件,前面显示要过滤的属性名称和运算符。
<propertyFilter dataLoader="usersDl"
operation="EQUAL"
property="department"/> (1)
| 1 | dataLoader、operation 和 property 都是必需属性。 |
该组件可以对加载到数据容器的数据进行过滤。通常与绑定到同一数据容器的 dataGrid 数据网格 或 treeDataGrid 树形数据网格 结合使用。可以精确控制表格中显示的内容。
过滤运算符
组件支持多种过滤 运算符。可以限制仅使用某个运算符,也可以通过 operationEditable 属性让用户在运行时选择运算符。
<propertyFilter dataLoader="usersDl"
operation="EQUAL"
property="department"
operationEditable="true"/>
组件根据属性类型决定可用的运算符。
数据绑定
数据绑定是指将组件与数据容器进行关联。可视化组件或相应数据容器中的更改可以触发彼此的更新。有关详细信息,请参阅 使用数据组件。
集合容器
下面的示例展示配置 propertyFilter 对集合容器进行过滤:
<data>
<collection class="com.company.onboarding.entity.User" id="usersDc">
<fetchPlan extends="_base">
<property name="department" fetchPlan="_base"/>
</fetchPlan>
<loader id="usersDl">
<query>
<![CDATA[select e from User e]]>
</query>
</loader>
</collection>
</data>
<layout>
<propertyFilter dataLoader="usersDl"
operation="EQUAL"
property="department"/>
</layout>
键值对集合容器
下面的示例展示配置 propertyFilter 对键值对集合容器进行过滤:
<data>
<keyValueCollection id="statusesDc">
<loader id="statusesDl">
<query>
<![CDATA[select e.username, e.onboardingStatus, COUNT(e.onboardingStatus)
from User e
group by e.username, e.onboardingStatus]]>
</query>
</loader>
<properties>
<property name="username" datatype="string"/>
<property name="onboardingStatus" datatype="int"/>
<property name="count" datatype="int"/>
</properties>
</keyValueCollection>
</data>
<layout>
<propertyFilter dataLoader="statusesDl"
operation="CONTAINS"
property="username"/>
</layout>
多重过滤
将多个 propertyFilter 组件绑定到单一数据容器可以同时使用多个过滤条件。例如,使用两个组件支持按部门和姓氏进行过滤:
<hbox>
<propertyFilter dataLoader="usersDl"
operation="EQUAL"
property="department"/>
<propertyFilter dataLoader="usersDl"
operation="CONTAINS"
property="lastName"/>
</hbox>
自定义
还可以显式设置作为输入控件的组件,并设置其属性。这样就可以更改 propertyFilter 的默认外观,并使用其他组件提供的额外功能。例如:
<propertyFilter id="nameFilter"
dataLoader="usersDl" property="username"
operation="CONTAINS"
labelVisible="false"
width="100%" maxWidth="30em">
<textField id="nameFilterField"
placeholder="Find a user..."
clearButtonVisible="true">
<prefix>
<icon icon="SEARCH"/>
</prefix>
</textField>
</propertyFilter>
动态属性
该组件也支持通过 动态属性 进行过滤。此时,视图中不需要包含 dynamicAttributes facet。
如需指定动态属性,需以 + 开头:
<propertyFilter
property="+passengerNumberOfSeats"
operation="EQUAL"
dataLoader="carsDl"/>
| 如果动态属性是一个实体,则不能通过该实体的属性进行过滤。 |
XML 属性
id - alignSelf - ariaLabel - ariaLabelledBy - autoApply - classNames - colspan - css - dataLoader - defaultValue - enabled - errorMessage - focusShortcut - height - helperText - invalid - label - labelPosition - labelVisible - labelWidth - maxHeight - maxWidth - minHeight - minWidth - operation - operationEditable - operationTextVisible - parameterName - property - readOnly - required - requiredMessage - tabIndex - themeNames - visible - width
dataLoader
dataLoader 是一个必需属性。设置与当前 propertyFilter 关联的 数据加载器。
labelVisible
设置 label 是否可见。默认值为 true。
labelWidth
设置 label 的宽度。宽度值需要能被浏览器解析,例如,"100px" 或 "2.5em"。
operation
指定过滤运算符。
运算符 |
描述 |
属性类型 |
EQUAL |
等于。对于日期/时间属性,请使用 DATE_EQUALS。 |
数值、布尔值、字符串、日期/时间、时间、UUID、URI、实体、枚举 |
NOT_EQUAL |
不等于。 |
数值、布尔值、字符串、日期/时间、时间、UUID、URI、实体、枚举 |
IS_SET |
为空或不为空。 |
数值、布尔值、字符串、日期/时间、时间、UUID、URI、实体、枚举 |
IN_LIST |
检查值是否在列表中。 |
数值、字符串、日期/时间、时间、UUID、URI、实体、枚举 |
NOT_IN_LIST |
检查值是否不在列表中。 |
数值、字符串、日期/时间、时间、UUID、URI、实体、枚举 |
IS_COLLECTION_EMPTY |
检查集合是否为空。 |
实体( |
MEMBER_OF_COLLECTION |
属于集合。 |
实体( |
NOT_MEMBER_OF_COLLECTION |
不属于集合。 |
实体( |
CONTAINS |
包含子字符串。 |
字符串 |
NOT_CONTAINS |
不包含子字符串。 |
字符串 |
STARTS_WITH |
以…开头。 |
字符串 |
ENDS_WITH |
以…结尾。 |
字符串 |
GREATER |
大于。 |
数值、日期/时间、时间 |
GREATER_OR_EQUAL |
大于或等于。 |
数值、日期/时间、时间 |
LESS |
小于。 |
数值、日期/时间、时间 |
LESS_OR_EQUAL |
小于或等于。 |
数值、日期/时间、时间 |
IN_INTERVAL |
属于用户通过 日期区间 对话框指定的区间。 |
日期/时间、时间 |
DATE_EQUALS |
等于日期。仅比较日期,忽略时间。参见 示例。 |
日期/时间 |
事件和处理器
AttachEvent - BlurEvent - ComponentValueChangeEvent - DetachEvent - FocusEvent - OperationChangeEvent - validator
|
在 Jmix Studio 生成处理器桩代码时,可以使用 Jmix UI 组件面板的 Handlers 标签页或者视图类顶部面板的 Generate Handler 添加,也可以通过 Code → Generate 菜单(Alt+Insert / Cmd+N)生成。 |
validator
为组件添加 validator 实例。当值无效时,验证器需要抛出 ValidationException 异常。示例:
如果预定义的验证器不能满足需要,可以添加自定义的验证器实例:
@Install(to = "propertyFilter", subject = "validator")
private void propertyFilterValidator(String value) {
if (value != null && value.length() != 6)
throw new ValidationException("Zip must be of 6 digits length");
}