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-описателей представлений по имени в процессе разработки приложения.
-