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
实体创建的使用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 | 单独的控件具有 dataContainer 和 property 属性。 |
2 | form 会将 dataContainer 传递给 form 的字段,所以字段只需要 property 属性。 |
3 | 查找字段有 optionsContainer 属性。 |
4 | 表格只有 dataContainer 属性。 |