3.5.3.4.1. 声明式创建数据组件
为界面创建数据组件的最简单方法就是在界面的 XML 描述中的 <data> 元素中进行声明式的定义。
考虑包含 Customer 、 Order 和 OrderLine 实体的数据模型。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实体创建的使用customersDcid 的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 | 单独的控件具有 dataContainer 和 property 属性。 |
| 2 | form 会将 dataContainer 传递给 form 的字段,所以字段只需要 property 属性。 |
| 3 | 查找字段有 optionsContainer 属性。 |
| 4 | 表格只有 dataContainer 属性。 |