3.10.1.1. 管理动态属性

管理属性类别和描述是通过 Administration>Dynamic Attributes 菜单中提供的特定界面完成的。

类别浏览界面显示所有已注册类别的列表。

categoryBrowser
Figure 38. 类别浏览界面

类别编辑界面可以为实体创建新类别并定义一组动态属性。类别名称和相关实体类型字段是必填字段。Default 复选框表示将为实现了 Categorized 接口的新实体实例自动选择此类别。

categoryEditor
Figure 39. 类别编辑界面

如果应用程序支持多种语言,则会显示 Name localization 分组框。它允许为每个可用的语言环境设置类别的本地化名称。

categoryLocalization
Figure 40. 本地化类别名称

动态属性编辑界面可以设置属性的名称、系统代码、值类型和默认值。

runtimePropertyEditor
Figure 41. 动态属性编辑界面

对于除 Boolean 以外的所有值类型,都有一个 Width 字段可用于设置 FieldGroup 中的字段宽度(以像素为单位或百分比)。如果 Width 字段为空,则假定其值为 100%。

对于除 BooleanEnumeration 之外的所有值类型,还有一个 Is collection 复选框。允许为所选类型创建多值动态属性。

所有类型的动态属性都支持本地化:

runtimePropertyLocalization
Figure 42. 动态属性本地化

对于 Enumeration 值类型,通过列表编辑器在 Enumeration 字段中定义命名值集合。

runtimePropertyEnum
Figure 43. Enumeration 类型的动态属性编辑界面

每个枚举值也可以进行本地化显示设置。

runtimePropertyEnumLocalization
Figure 44. Enumeration 类型动态属性本地化设置

动态属性还可以设置可见性,定义在哪些界面中显示。默认情况下,动态属性在任何界面上都是不可见的。

runtimePropertyVisibility
Figure 45. 动态属性可见性设置

除了界面之外,还可以为属性指定显示组件(比如,可以在界面中,指定多个FieldGroup组件显示同一实体的字段)。

如果该属性在界面上标记为可见,则在界面上用来展示相应实体的所有字段组(FieldGroup)和表格(Table)中会自动显示该属性。

对动态属性的访问也受用户角色设置的限制。动态属性的安全设置与常规属性的安全设置类似。

要使属性和可见性设置的更改生效,请单击类别浏览界面中的 Apply settings。也可以通过在 Administration>JMX Console 中调用 app-core.cuba:type = CachingFacade 的 JMX bean 的 clearDynamicAttributesCache() 方法使更改生效。

通过可见性配置能将动态属性自动添加到界面,如下所示:

runtimePropsApplyChanges

也可以手动将动态属性添加到界面。操作步骤如下:

  • 在界面 XML 描述的 dsContext 部分,为加载实体的数据源将 loadDynamicAttributes 属性设置为 true,例如:

    <dsContext>
        <datasource id="carDs" class="com.company.sample.entity.Car" view="_local" loadDynamicAttributes="true"/>
    </dsContext>
  • 在组件定义的 property XML 属性中使用 + 前缀指定动态属性 code:

    <textField id="numberOfSeats" datasource="carDs" property="+numberOfSeats"/>