5.5.9. Специфика Web Client

Реализация универсального пользовательского интерфейса в блоке Web Client основана на фреймворке Vaadin. Рассмотрим основные классы, входящие в состав инфраструктуры веб клиента.

WebClientInfrastructure
Рисунок 23. Классы инфраструктуры Web Client
  • App - центральный класс инфраструктуры приложения. Позволяет получить ссылки на Connection и другие объекты инфраструктуры. Экземпляр App существует в единственном экземпляре для данной HTTP-сессии пользователя. Ссылку на App можно получить вызовом статического метода App.getInstance(). Если необходимо кастомизировать функциональность App в проекте, создайте класс, расширяющий DefaultApp в корневом пакете модуля web и зарегистрируйте его в web-spring.xml в качестве бина cuba_App, например:

    <bean name="cuba_App" class="com.company.sample.web.MyApp" scope="vaadin"/>
  • Connection - интерфейс, обеспечивающий функциональность подключения к среднему слою и хранящий пользовательскую сессию UserSession. Стандартной реализацией этого интерфейса является класс ConnectionImpl.

  • ExceptionHandlers - содержит коллекцию обработчиков исключений клиентского уровня.

  • AppUI - класс платформы, унаследованный от класса com.vaadin.ui.UI. Экземпляр данного класса соответствует одной открытой вкладке веб браузера. Содержит ссылку на реализацию интерфейса TopLevelWindow - это может быть либо окно логина, либо главное окно приложения, в зависимости от состояния подключения. Ссылку на AppUI можно получить вызовом статического метода AppUI.getCurrent().

  • AppLoginWindow - окно, отображаемое до логина пользователя. В конкретном приложении окно можно кастомизировать или создать новое с нуля, унаследовав класс от AbstractWindow и реализовав маркерный интерфейс TopLevelWindow. В Studio это можно сделать, нажав Create login window в секции Screens. Если вы переопределяете метод init(), обязательно вызовите super.init(params).

  • AppMainWindow - главное окно приложения, отображаемое после логина пользователя. В конкретном приложении окно можно кастомизировать или создать новое с нуля, унаследовав класс от AbstractMainWindow и определив нужную компоновку в XML-дескрипторе. В Studio это можно сделать, нажав Create main window в секции Screens. Если вы переопределяете метод init(), обязательно вызовите super.init(params).

    Без переопределения главного окна можно управлять некоторыми параметрами с помощью следующих свойств приложения:

    • cuba.web.foldersPaneEnabled - включает формирование панели папок.

    • cuba.web.appWindowMode - задает начальный режим главного окна: с вкладками или одноэкранный (TABBED или SINGLE). Пользователь впоследствии может задать желаемый режим через экран HelpSettings.

    • cuba.web.maxTabCount - в режиме представления главного окна с вкладками задает максимальное количество вкладок, которое может открыть пользователь. По умолчанию 7.

  • WindowManager - центральный класс, реализующий логику работы экранов системы. Ему делегируются вызовы openWindow(), openEditor(), showMessageDialog() и другие методы интерфейса Frame, реализуемого контроллерами экранов. Класс WindowManager расположен в общем модуле gui платформы и является абстрактным. В модуле web имеется конкретный класс WebWindowManager, реализующий специфику веб клиента. Ссылку на WindowManager можно получить в любой реализации интерфейса Window (например в контроллере экрана), или с помощью бина WindowManagerProvider.

Для того, чтобы обрабатывать нажатия на кнопку Back браузера, реализуйте интерфейс CubaHistoryControl.HistoryBackHandler в ваших TopLevelWindow (окно логина и главное окно). Метод onHistoryBackPerformed() этого интерфейса вызывается вместо стандартного поведения браузера, если свойство приложения cuba.web.allowHandleBrowserHistoryBack установлено в true.