Компоненты данных
Компоненты данных – это невизуальные элементы экрана, которые обеспечивают загрузку данных, привязку их к визуальным компонентам и сохранение измененных экземпляров обратно в хранилище данных. Существуют следующие типы компонентов данных:
-
Контейнеры обеспечивают тонкий слой между сущностями и визуальными компонентами, связанными с данными (data-aware). Разные типы контейнеров могут хранить один экземпляр или коллекцию экземпляров сущностей.
-
Загрузчики загружают данные в контейнеры.
-
DataContext отслеживает изменения сущностей и сохраняет измененные экземпляры по запросу.
Обычно компоненты данных задаются в XML-дескрипторе экрана внутри элемента <data>
:
<data readOnly="true">
<collection id="departmentsDc"
class="ui.ex1.entity.Department">
<fetchPlan extends="_base">
<property name="employees" fetchPlan="_base"/>
</fetchPlan>
<loader id="departmentsDl">
<query>
<![CDATA[select e from uiex1_Department e]]>
<condition>
<c:jpql>
<c:where>e.name like :name</c:where>
</c:jpql>
</condition>
</query>
</loader>
<collection id="employeesDc" property="employees"/>
</collection>
</data>
Компоненты данных можно инжектировать в контроллер экрана так же, как и визуальные компоненты:
@Autowired
private CollectionLoader<Department> departmentsDl;
private String departmentName;
@Subscribe
public void onBeforeShow(BeforeShowEvent event) {
departmentsDl.setParameter("name", departmentName);
departmentsDl.load();
}
Компоненты данных конкретного экрана регистрируются в объекте ScreenData
, который связан с контроллером экрана и доступен с помощью метода getScreenData()
экрана. Этот объект полезен в прикладном коде, когда необходимо загрузить все данные экрана, к примеру:
@Subscribe
public void onAfterShow(AfterShowEvent event) {
getScreenData().loadAll();
}
Используйте фасет DataLoadCoordinator для декларативного связывания загрузчиков данных с контейнерами данных, визуальными компонентами и событиями экрана. В случае, если необходимо установить некоторые параметры загрузки, можно использовать программную загрузку, как описано в разделе Использование компонентов данных. |