3.2.3.1. Создание представлений
Представление может быть создано следующими способами:
-
Программно - созданием экземпляра
View. Как правило, таким способом создаются представления, используемые в бизнес-логике.Экземпляры представлений, включая вложенные, можно создавать с помощью конструктора:
View view = new View(Order.class) .addProperty("date") .addProperty("amount") .addProperty("customer", new View(Customer.class) .addProperty("name") );То же самое можно сделать с помощью
ViewBuilder:View view = ViewBuilder.of(Order.class) .addAll("date", "amount", "customer.name") .build();ViewBuilderможно также использовать в DataManager через его fluent interface:// explicit view builder dataManager.load(Order.class) .view(viewBuilder -> viewBuilder.addAll("date", "amount", "customer.name")) .list(); // implicit view builder dataManager.load(Order.class) .viewProperties("date", "amount", "customer.name") .list(); -
Декларативно в экранах - путем объявления внутри XML-дескриптора экрана, см. пример в разделе Декларативное создание компонентов данных. Это рекомендуемый способ при загрузке данных в экранах Generic UI для проектов, использующих CUBA 7.2+.
-
Декларативно в общем репозитории - путем объявления в файле views.xml проекта. Файл
views.xmlобрабабывается на старте приложения, созданные экземплярыViewкэшируются в репозитории представленийViewRepository. В дальнейшем в любом месте кода приложения требуемое представление можно получить вызовом репозитория с указанием класса сущности и имени представления.
Пример XML-описателя представления, которое должно обеспечить загрузку всех локальных атрибутов сущности Заказ, ассоциированного Покупателя и коллекции Пунктов заказа:
<view class="com.sample.sales.entity.Order"
name="order-with-customer"
extends="_local">
<property name="customer" view="_minimal"/>
<property name="items" view="item-in-order"/>
</view>
- Работа с репозиторием представлений
-
ViewRepositoryявляется бином Spring, доступным для всех блоков приложения. Ссылка наViewRepositoryможет быть также получена инжекцией или через статические методы классаAppBeans. Для получения экземпляраView, содержащегося в репозитории, используются методыgetView().В репозитории для каждой сущности по умолчанию доступны три представления с именами
_local,_minimalи_base:-
_localвключает в себя все локальные атрибуты сущности -
_minimalвключает в себя атрибуты, входящие в имя экземпляра сущности, и задаваемые аннотацией @NamePattern. Если аннотация@NamePatternдля сущности не указана, данное представление не включает никаких атрибутов. -
_baseвключает в себя все локальные несистемные атрибуты и атрибуты, заданные в аннотации@NamePattern(т.е. фактически_minimal+_local).
CUBA Studio автоматически создает и поддерживает в проекте один файл views.xml. Однако при необходимости можно использовать и несколько таких файлов следующим образом:
-
В модуле
globalдолжен находиться файлviews.xmlсо всеми описателями представлений, которые должны быть доступны глобально, т.е. на всех уровнях приложения. Данный файл должен быть зарегистрирован в свойстве приложения cuba.viewsConfig всех блоков, т.е. в файлеapp.propertiesмодуляcore, в файлеweb-app.propertiesмодуляwebи так далее. Это по умолчанию обеспечивает Studio. -
Если в проекте имеется много общих представлений, их можно разместить в нескольких файлах, например в стандартном
views.xmlи в дополнительныхfoo-views.xml,bar-views.xml. Все файлы должны быть зарегистрированы в свойствеcuba.viewsConfig:cuba.viewsConfig = +com/company/sales/views.xml com/company/sales/foo-views.xml com/company/sales/bar-views.xml
-
Если существуют представления, которые необходимы только какому-то одному блоку приложения, то можно определить их в аналогичном файле данного блока, например,
web-views.xml, и добавить этот файл в свойствоcuba.viewsConfigэтого блока, т.е. в данном случае в файлweb-app.properties.
Если на момент развертывания некоторого представления в репозитории уже есть представление для этого же класса сущности и с таким же именем, то новое будет проигнорировано. Для того чтобы представление заменило имеющееся в репозитории и гарантированно было развернуто, в XML-описателе должен быть явно указан атрибут
overwrite = "true".Рекомендуется давать представлениям "описательные" имена. Например, не "browse", а "customer-browse". Это упрощает поиск XML-описателей представлений по имени в процессе разработки приложения.
-