Компоненты данных

Компоненты данных – это невизуальные элементы экрана, которые обеспечивают загрузку данных, привязку их к визуальным компонентам и сохранение измененных экземпляров обратно в хранилище данных. Существуют следующие типы компонентов данных:

  • Контейнеры обеспечивают тонкий слой между сущностями и визуальными компонентами, связанными с данными (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 для декларативного связывания загрузчиков данных с контейнерами данных, визуальными компонентами и событиями экрана. В случае, если необходимо установить некоторые параметры загрузки, можно использовать программную загрузку, как описано в разделе Использование компонентов данных.