propertyFilter 属性过滤器

propertyFilter 可以基于某个 entity 属性定义一个过滤器条件。

该组件可以在 genericFilter 组件内使用或者独立使用。

  • XML 元素:propertyFilter

  • Java 类:PropertyFilter

基本用法

一般情况下,propertyFilter 包含一个实体属性标题的标签、一个运算符标签或者选择器(=containsin> 等)以及一个用于编辑条件值的字段。

property filter basics

下面示例演示了 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>

dataLoaderpropertyoperation 都是必需属性。

一个视图中可以使用多个 propertyFilter 组件连接至同一个数据加载器,此时,加载器会按照多个条件对数据进行过滤。

XML 属性

autoApply

设置该过滤器的条件值改变时,是否会自动在 DataLoader 应用新条件。默认为 true

dataLoader

dataLoader 是一个必需属性。设置与当前 propertyFilter 关联的 数据加载器

defaultValue

设置过滤条件的默认值。

label

设置该过滤器的自定义名称。如果未指定,则根据实体属性名和运算符名自动生成。

如果设置了 label 属性。运算符标签或选择器将会隐藏。

labelPosition

labelPosition 属性定义过滤器名称的位置:

  • TOP - 名称展示在属性过滤器的上方。

  • ASIDE - 名称展示在属性过滤器的旁边。

默认值为 ASIDE

labelVisible

设置 label 是否可见。默认值为 true

labelWidth

设置 label 的宽度。宽度值需要能被浏览器解析,例如,"100px""2.5em"

operation

operation 是必需属性,设置过滤运算符。有下列类型:

  • EQUAL 适合字符串、数字、布尔、日期/时间、引用、枚举属性。结果中的实体实例要满足:其属性列与过滤器中的条件值匹配。

  • NOT_EQUAL 适合字符串、数字、布尔、日期/时间、引用、枚举属性。结果中的实体实例要满足:其属性列与过滤器中的条件值不匹配。

  • GREATER 适合数字和日期属性。结果中的实体实例要满足:其属性列大于过滤器中的条件值。

  • GREATER_OR_EQUAL 适合数字和日期属性。结果中的实体实例要满足:其属性列大于等于过滤器中的条件值。

  • LESS 适合数字和日期/时间属性。结果中的实体实例要满足:其属性列小于过滤器中的条件值。

  • LESS_OR_EQUAL 适合数字和日期/时间属性。结果中的实体实例要满足:其属性列小于等于过滤器中的条件值。

  • CONTAINS 适合字符串属性。结果中的实体实例要满足:其属性列包含过滤器中的条件值。

  • NOT_CONTAINS 适合字符串属性。结果中的实体实例要满足:其属性列不包含过滤器中的条件值。

  • STARTS_WITH 适合字符串属性。结果中的实体实例要满足:其属性列以过滤器中的条件值开头。

  • ENDS_WITH 适合字符串属性。结果中的实体实例要满足:其属性列以过滤器中的条件值结尾。

  • IS_SET 适合字符串、数字、布尔、日期/时间、引用、枚举属性。该运算符仅检测属性列的数据不是 null。为该运算符生成的 comboBox 仅包含两个值:YesNo。如果用户选择 Yes,结果包含实体实例满足:该列有数据。否则,结果包含该列没有数据的实体实例。

operationEditable

设置运算符选择器是否展示。可能值 truefalse(默认为 false)。如果设置 operationEditable = true,运算符字段支持在运行时选择运算符。根据属性类型决定可选的运算符列表。

operationTextVisible

operationTextVisible 属性定义运算符标签是否可见。可能值 truefalse(默认为 true)。

parameterName

parameterName 属性设置关联的查询语句中条件使用的参数名称。如果未定义,则随机生成。

property

设置关联的实体属性名称或属性路径(例如,nameorderorder.date)。

事件和处理器

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

OperationChangeEvent

当运算符属性变更时发送 OperationChangeEvent

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");
}

XML 内部元素