3.5.3.4.1. 声明式创建数据组件

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

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

  1. <data>
  2. <instance id="orderDc" class="com.company.sales.entity.Order" view="order-edit">
  3. <loader/>
  4. <collection id="linesDc" property="lines"/>
  5. </instance>
  6. <collection id="customersDc" class="com.company.sales.entity.Customer" view="_minimal">
  7. <loader>
  8. <query><![CDATA[select e from sales_Customer e]]></query>
  9. </loader>
  10. </collection>
  11. </data>

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

  • DataContext 实例。

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

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

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

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

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