3.5.1.6. Корневые экраны
Корневой экран - это экран Generic UI, который отображается непосредственно во вкладке веб-браузера. Существует два типа таких экранов: экран логина и главный экран. Помимо обычных компонентов, любой корневой экран может содержать компонент WorkArea
, который позволяет открывать другие экраны приложения во внутренних вкладках. Если корневой экран не содержит WorkArea
, то экраны приложения могут быть открыты только в режиме DIALOG
.
- Экран логина
-
Экран логина отображается до регистрации пользователя в системе. Данный экран можно кастомизировать с помощью расширения существующего экрана, предоставляемого фреймворком, либо создать новый экран с нуля.
Для расширения существующего экрана используйте шаблон Login screen в мастере создания экранов Studio. В результате Studio создаст экран, расширяющий стандартный. Этот экран будет использоваться вместо стандартного, так как он будет имеет такой же идентификатор: см. значение
login
в аннотации@UiController
.Для создания нового экрана используйте шаблон Blank screen. Пример кода минималистичного экрана логина:
my-login-screen.xml<window xmlns="http://schemas.haulmont.com/cuba/screen/window.xsd" caption="Login" messagesPack="com.company.sample.web"> <layout> <label value="Hello World"/> <button id="loginBtn" caption="Login"/> </layout> </window>
MyLoginScreen.javapackage com.company.sample.web; import com.haulmont.cuba.gui.Route; import com.haulmont.cuba.gui.components.Button; import com.haulmont.cuba.gui.screen.*; import com.haulmont.cuba.security.auth.LoginPasswordCredentials; import com.haulmont.cuba.web.App; @UiController("myLogin") @UiDescriptor("my-login-screen.xml") @Route(path = "login", root = true) public class MyLoginScreen extends Screen { @Subscribe("loginBtn") private void onLoginBtnClick(Button.ClickEvent event) { App.getInstance().getConnection().login( new LoginPasswordCredentials("admin", "admin")); } }
Для использования данного экрана вместо дефолтного, установите его id в свойстве приложения
cuba.web.loginScreenId
в файлеweb-app.properties
:cuba.web.loginScreenId = myLogin
Вместо регистрации нового экрана в свойстве приложения, можно просто дать новому экрану дефолтный идентификатор
login
.
- Главный экран
-
Главный экран - это корневой экран, отображаемый после регистрации пользователя в системе. Стандартный главный экран с боковым меню предоставляется фреймворком и имеет идентификатор
main
.Studio содержит несколько шаблонов для создания кастомного главного экрана. Все они используют класс
MainScreen
в качестве базового класса контроллеров.-
Main screen with side menu создает расширение стандартного главного экрана с идентификатором
main
. -
Main screen with responsive side menu создает похожий экран, но боковое меню является responsive и сворачивается на узких экранах. Экран будет иметь собственный id, который необходимо зарегистрировать в
web-app.properties
:cuba.web.mainScreenId = respSideMenuMainScreen
-
Main screen with top menu создает экран с верхним меню и возможностью использования панели папок слева. Экран будет иметь собственный id, который необходимо зарегистрировать в
web-app.properties
:cuba.web.mainScreenId = topMenuMainScreen
Следующие специальные компоненты могут быть использованы в главном экране в дополнение к стандартным UI-компонентам:
-
AppMenu
– главное меню. -
FoldersPane
– панель папок поиска и папок приложения. -
AppWorkArea
– рабочая область, обязательный компонент для работы с экранами в режимахTHIS_TAB
,NEW_TAB
иNEW_WINDOW
. -
UserIndicator
– поле, отображающее имя текущего пользователя, а при наличии замещаемых пользователей позволяет переключаться между ними.Метод
setUserNameFormatter()
используется для отображения имени пользователя в виде, отличном от стандартного имени экземпляра сущностиUser
:userIndicator.setUserNameFormatter(value -> value.getName() + " - [" + value.getEmail() + "]");
-
NewWindowButton
– кнопка открытия нового окна приложения.
-
UserActionsButton
– если сессия не аутентифицирована, отображает ссылку на экран логина. В противном случае, отображает меню со ссылкой на экран настроек пользователя и возможностью выйти из системы.Вы можете использовать обработчики событий
LoginHandler
илиLogoutHandler
в контроллере главного экрана для реализации кастомной логики:@Install(to = "userActionsButton", subject = "loginHandler") private void loginHandler(UserActionsButton.LoginHandlerContext ctx) { // do custom logic } @Install(to = "userActionsButton", subject = "logoutHandler") private void logoutHandler(UserActionsButton.LogoutHandlerContext ctx) { // do custom logic }
-
LogoutButton
– кнопка выхода из приложения. -
TimeZoneIndicator
– надпись, которая отображает часовой пояс пользователя. -
FtsField
– поле полнотекстового поиска.
Следующие свойства приложения могут влиять на главный экран:
-
cuba.web.appWindowMode - задает начальный режим главного окна: с вкладками или одноэкранный (
TABBED
илиSINGLE
). Пользователь впоследствии может задать желаемый режим через экран Settings, доступный через UserActionsButton. -
cuba.web.maxTabCount - в режиме представления главного окна с вкладками задает максимальное количество вкладок, которое может открыть пользователь. По умолчанию 7.
-
cuba.web.foldersPaneEnabled - включает отображение панели папок для экрана, созданного по шаблону Main screen with top menu.
-
cuba.web.defaultScreenId - задает экран по умолчанию, который должен быть открыт в главном экране автоматически.
-
cuba.web.defaultScreenCanBeClosed - указывает, может ли пользователь закрыть экран по умолчанию.
-
cuba.web.useDeviceWidthForViewport - определяет ширину области просмотра (viewport). Если установлено значение
true
, за ширину области просмотра будет принята ширина устройства. Также может быть полезно свойство cuba.web.pageInitialScale.
-