3.5.3.4.1. Декларативное создание компонентов данных
Самый простой способ создать компоненты данных - это определить их в XML-дескрипторе экрана внутри элемента <data>.
Рассмотрим для примера модель данных, содержащую сущности Customer, Order и OrderLine. Дескриптор экрана редактирования сущности Order может иметь следующее определение:
<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. -
Контейнер
InstanceContainerс идентификаторомorderDcиInstanceLoaderдля сущностиOrder. -
Контейнер
CollectionPropertyContainerс идентификаторомlinesDcдля сущностиOrderLines. Этот контейнер привязан к атрибуту-коллекцииOrder.lines. -
Контейнер
CollectionContainerс идентификаторомcustomersDcдля сущностиCustomer. Он загружается с помощью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 на все вложенные поля, поэтому они требуют только указания атрибута property. |
| 3 | Поля выбора имеют атрибут optionsContainer. |
| 4 | У таблиц есть только атрибут dataContainer. |