Экраны
Экран (view) — это базовый строительный блок пользовательского интерфейса приложения. Он является корнем иерархии визуальных компонентов, кроме того, он может содержать компоненты данных, действия и фасеты.
Экран определяется классом Java. Класс экрана обычно имеет соответствующий XML-файл, называемый дескриптором, который определяет содержимое экрана. Таким образом, существует четкое разделение между декларативной компоновкой элементов экрана, определенной в XML, и логикой программной инициализации и обработки событий, написанной на Java.
Классы экранов
Jmix предоставляет следующие базовые классы экранов:
StandardMainView
StandardMainView
- это корневой экран приложения, который открывается после входа пользователя в систему. Он содержит компонент AppLayout с главным меню.
StandardView
StandardView
является базовым классом для обычных экранов. Такие экраны могут отображаться либо внутри основного экрана с помощью навигации на URL экрана, либо во всплывающем диалоговом окне.
Ниже приведен стандартный экран, открытый с использованием URL /my-onboarding
:
StandardListView
StandardListView
- это базовый класс для экранов CRUD, отображающих список сущностей. Его также можно использовать в качестве экрана поиска для выбора экземпляров сущностей из списка и возврата их вызывающему объекту. В представлении списка обычно используются компоненты dataGrid или treeDataGrid.
Ниже представлен экран списка, открытый с использованием URL /departments
:
Этот же экран, открытый в диалоге для выбора сущностей:
StandardDetailView
StandardDetailView
- это базовый класс для экранов CRUD, отображающих один экземпляр сущности. Экран деталей обычно использует компонент formLayout.
Ниже приведен экран деталей, открытый с использованием идентификатора объекта в URL:
Тот же экран, открытый в диалоговом окне:
Аннотации экранов
Аннотации на классах экранов предоставляют информацию об экранах фреймворку. Некоторые аннотации применимы к любому типу экрана, некоторые из них можно использовать только в экранах списков или деталей сущностей.
Общие аннотации
@ViewController("MyOnboardingView")
@ViewDescriptor("my-onboarding-view.xml")
@Route(value = "my-onboarding", layout = MainView.class)
@DialogMode(width = "AUTO", height = "AUTO")
public class MyOnboardingView extends StandardView {
-
@ViewController
указывает, что класс является экраном. Значением аннотации является идентификатор экрана, который можно использовать для ссылки на экран из главного меню или при программном открытии экрана. -
@ViewDescriptor
соединяет класс экрана с его XML-дескриптором. Значение аннотации указывает путь к файлу дескриптора. Если значение содержит только имя файла, предполагается, что файл находится в том же пакете, что и класс экрана. -
@com.vaadin.flow.router.Route
определяет URL-путь для перехода к этому экрану. Поскольку экран должен открываться внутри основного экрана,layout
атрибут указывает класс основного экрана. -
@DialogMode
определяет параметры диалогового окна, когда экран открывается как диалог. -
@com.vaadin.flow.server.auth.AnonymousAllowed
делает экран доступным без аутентификации. По умолчанию, только экран логина доступен для неаутентифицированной сессии.Пример User Registration, показывает, как аннотация @AnonymousAllowed
используется в экране для самостоятельной регистрации пользователей.
Аннотации экранов списка
// common annotations
@ViewController("Department.list")
@ViewDescriptor("department-list-view.xml")
@Route(value = "departments", layout = MainView.class)
@DialogMode(width = "50em", height = "37.5em")
// list view annotations
@LookupComponent("departmentsTable")
@PrimaryLookupView(Department.class)
public class DepartmentListView extends StandardListView<Department> {
-
@LookupComponent
указывает идентификатор компонента UI, который будет использоваться для получения значения, возвращаемого в результате поиска. -
@PrimaryLookupView
указывает, что этот экран является экраном поиска по умолчанию для указанной сущности. Аннотация имеет больший приоритет, чем соглашение{entity_name}.lookup
/{entity_name}.list
.
Аннотации экранов деталей
// common annotations
@ViewController("Department.detail")
@ViewDescriptor("department-detail-view.xml")
@Route(value = "departments/:id", layout = MainView.class)
// detail view annotations
@EditedEntityContainer("departmentDc")
@PrimaryDetailView(Department.class)
public class DepartmentDetailView extends StandardDetailView<Department> {
-
@EditedEntityContainer
указывает контейнер данных, содержащий редактируемую сущность. -
@PrimaryDetailView
указывает, что этот экран является экраном деталей по умолчанию для указанной сущности. Аннотация имеет больший приоритет, чем соглашение{entity_name}.detail
.