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 . |