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

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

  • Контейнеры обеспечивают тонкий слой между сущностями и визуальными компонентами, связанными с данными (data-aware). Разные типы контейнеров могут хранить один экземпляр или коллекцию экземпляров сущностей.

  • Загрузчики загружают данные в контейнеры.

  • DataContext отслеживает изменения сущностей и сохраняет измененные экземпляры по запросу.

Обычно компоненты данных задаются в XML-дескрипторе экрана внутри элемента <data>:

<data readOnly="true">
    <collection id="departmentsDc"
                class="com.company.onboarding.entity.Department">
        <fetchPlan extends="_base">
            <property name="hrManager" fetchPlan="_base"/>
        </fetchPlan>
        <loader id="departmentsDl">
            <query>
                <![CDATA[select e from Department e]]>
            </query>
        </loader>
    </collection>
</data>

Компоненты данных можно инжектировать в контроллер экрана так же, как и визуальные компоненты:

@ViewComponent
private CollectionContainer<Department> departmentsDc;

Компоненты данных конкретного экрана регистрируются в объекте ViewData, который связан с контроллером экрана и доступен с помощью метода getViewData(). Этот объект полезен в прикладном коде, когда необходимо загрузить все данные экрана, к примеру:

@Subscribe
public void onReady(final ReadyEvent event) {
    getViewData().loadAll();
}
Используйте фасет DataLoadCoordinator для декларативного связывания загрузчиков данных с контейнерами данных, визуальными компонентами и событиями экрана.