3.5.3.4.1. 声明式创建数据组件

为界面创建数据组件的最简单方法就是在界面的 XML 描述中的 <data> 元素中进行声明式的定义。

考虑包含 CustomerOrderOrderLine 实体的数据模型。Order 实体的编辑界面可以用下面的 XML 定义:

<data>
    <instance id="orderDc" class="com.company.sales.entity.Order" view="order-edit">
        <loader/>

        <collection id="linesDc" property="lines"/>
    </instance>

    <collection id="customersDc" class="com.company.sales.entity.Customer" view="_minimal">
        <loader>
            <query><![CDATA[select e from sales_Customer e]]></query>
        </loader>
    </collection>
</data>

这个例子中,会创建下列数据组件:

  • DataContext 实例。

  • 使用 orderDc 作为 id 的 InstanceContainer 以及 InstanceLoader ,用来加载 Order 实体。

  • OrderLines 实体创建的使用 linesDc 作为 id 的 CollectionPropertyContainer。绑定到 Order.lines 集合属性。

  • Customer 实体创建的使用 customersDc id 的 CollectionContainer。通过 CollectionLoader 使用指定的查询语句加载。

数据容器可以在可视化组件中这样使用:

<layout>
    <dateField dataContainer="orderDc" property="date"/> (1)
    <form id="form" dataContainer="orderDc"> (2)
        <column>
            <textField property="amount"/>
            <lookupPickerField id="customerField" property="customer"
                               optionsContainer="customersDc"/> (3)
        </column>
    </form>
    <table dataContainer="linesDc"> (4)
        <columns>
            <column id="product"/>
            <column id="quantity"/>
        </columns>
    </table>
1 单独的控件具有 dataContainerproperty 属性。
2 form 会将 dataContainer 传递给 form 的字段,所以字段只需要 property 属性。
3 查找字段有 optionsContainer 属性。
4 表格只有 dataContainer 属性。