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

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

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

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

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

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

@Inject
private CollectionLoader<Customer> customersDl;

private String customerName;

@Subscribe
protected void onBeforeShow(BeforeShowEvent event) {
    customersDl.setParameter("name", customerName)
    customersDl.load();
}

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

@Subscribe
protected void onBeforeShow(BeforeShowEvent event) {
    getScreenData().loadAll();
}

Обратите внимание, что экраны загружают данные автоматически, если контроллер экрана снабжен аннотацией @LoadDataBeforeShow. Поэтому программно вызывать загрузку нужно только если такой аннотации на контроллере нет или ее значение - false. Обычно это требуется, когда необходимо установить некоторые параметры загрузки данных, как в примере выше.