5.5.1.3.2. AbstractWindow
AbstractWindow
является наследником AbstractFrame
, и определяет следующие собственные методы:
-
getDialogOptions()
- получить объектDialogOptions
для управления геометрией и поведением экрана когда он открывается в режиме диалога (WindowManager.OpenType.DIALOG
). Эти параметры могут быть заданы при инициализации экрана, а также могут изменяться на лету.Установка ширины и высоты:
@Override public void init(Map<String, Object> params) { getDialogOptions().setWidth("480px").setHeight("320px"); }
Установка положения диалога на экране:
getDialogOptions() .setPositionX(100) .setPositionY(100);
Возможность закрыть диалог кликом по окружающей области:
getDialogOptions().setModal(true).setCloseOnClickOutside(true);
Указание того, что диалог должен быть немодальным и с изменяемыми размерами:
@Override public void init(Map<String, Object> params) { getDialogOptions().setModal(false).setResizable(true); }
Указание того, что диалог должен быть развёрнут во весь экран:
getDialogOptions().setMaximized(true);
Указание того, что экран должен всегда открываться в режиме диалога, независимо от того, какой
WindowManager.OpenType
был выбран в вызывающем коде:@Override public void init(Map<String, Object> params) { getDialogOptions().setForceDialog(true); }
-
setContentSwitchMode()
- определяет режим переключения вкладок главного TabSheet для вкладки, содержащей данное окно: скрывать содержимое или полностью выгружать его.Доступны следующие режимы:
-
DEFAULT
- режим переключения определяется режимом главного TabSheet, установленном в свойстве приложения cuba.web.managedMainTabSheetMode. -
HIDE
- содержимое вкладки должно быть только скрыто, независимо от режима главного TabSheet. -
UNLOAD
- содержимое вкладки должно быть выгружено, независимо от режима главного TabSheet.
-
-
saveSettings()
- сохраняет настройки экрана для текущего пользователя в базе данных при закрытии экрана.К примеру, на экране имеется чекбокс showPanel, управляющий отображением некой панели. Мы переопределяем метод
saveSettings()
: создаём в нём XML-элемент для этого чекбокса, добавляем ему атрибутshowPanel
, содержащий текущее значение чекбокса, а затем сохраняем элементsettings
в XML-файл для текущего пользователя в базе данных.@Inject private CheckBox showPanel; @Override public void saveSettings() { boolean showPanelValue = showPanel.getValue(); Element xmlDescriptor = getSettings().get(showPanel.getId()); xmlDescriptor.addAttribute("showPanel", String.valueOf(showPanelValue)); super.saveSettings(); }
-
applySettings()
- восстанавливает настройки экрана для текущего пользователя из базы данных при открытии экрана.Переопределим метод для восстановления настроек из предыдущего примера. Получаем XML-элемент чекбокса, проверяем, что нужный нам атрибут
showPanel
не равенnull
, а затем восстанавливаем для чекбокса предыдущее сохранённое значение:@Override public void applySettings(Settings settings) { super.applySettings(settings); Element xmlDescriptor = settings.get(showPanel.getId()); if (xmlDescriptor.attribute("showPanel") != null) { showPanel.setValue(Boolean.parseBoolean(xmlDescriptor.attributeValue("showPanel"))); } }
Другой пример управления настройками экрана можно увидеть на стандартном экране Server Log в меню Administration приложения CUBA, который автоматически сохраняет и восстанавливает последние открытые пользователем лог-файлы.
-
ready()
- шаблонный метод, который можно имплементировать в контроллере для перехвата момента открытия экрана. Методready()
вызывается фреймворком после методаinit()
непосредственно перед показом экрана в главном окне приложения.
-
validateAll()
- валидация экрана. Реализация по умолчанию вызывает методvalidate()
у всех компонентов экрана, реализующих интерфейсComponent.Validatable
, накапливает информацию об исключениях, и если таковые имеются, выводит соответствующее сообщение и возвращаетfalse
, иначе возвращаетtrue
.Данный метод следует переопределять только в том случае, если необходимо полностью заменить стандартную процедуру валидации экрана. Если же нужно только дополнить ее, достаточно определить специальный шаблонный метод
postValidate()
.
-
postValidate()
- шаблонный метод, который можно имплементировать в контроллере для дополнительной валидации экрана. Получаемый методом объектValidationErrors
используется для добавления информации об ошибках валидации, которая будет отображена совместно с ошибками стандартной валидации. Например:private Pattern pattern = Pattern.compile("\\d"); @Override protected void postValidate(ValidationErrors errors) { if (getItem().getAddress().getCity() != null) { if (pattern.matcher(getItem().getAddress().getCity()).find()) { errors.add("City name can't contain digits"); } } }
-
showValidationErrors()
- метод, который отображает сообщение об ошибках валидации экрана. Чтобы изменить поведение стандартных сообщений, метод можно переопределить. Тип уведомления определяется свойством приложения cuba.gui.validationNotificationType.@Override public void showValidationErrors(ValidationErrors errors) { super.showValidationErrors(errors); }
-
close()
- закрыть данный экран.Метод принимает строковое значение, передаваемое далее в шаблонный метод
preClose()
и слушателямCloseListener
. Таким образом, заинтересованный код может получить информацию о причине закрытия экрана от кода, инициирующего закрытие. В частности, в экранах редактирования сущностей при закрытии экрана после коммита изменений рекомендуется использовать константуWindow.COMMIT_ACTION_ID
, без коммита изменений - константуWindow.CLOSE_ACTION_ID
.Если какой-либо из источников данных содержит несохраненные изменения, перед закрытием экрана будет выдано диалоговое окно с соответствующим предупреждением. Тип предупреждения можно выбрать с помощью свойства приложения
cuba.gui.useSaveConfirmation
.Вариант метода
close()
с параметромforce = true
закрывает экран без вызоваpreClose()
и без предупреждения, независимо от наличия несохраненных изменений.Метод
close()
возвращаетtrue
, если экран был успешно закрыт, иfalse
- если закрытие было прервано.
-
preClose()
- шаблонный метод, который можно имплементировать в контроллере для перехвата момента закрытия экрана. Метод получает строковое значение, указанное инициатором закрытия при вызове методаclose()
.Если метод
preClose()
возвращаетfalse
, то процесс закрытия экрана прерывается.
-
addBeforeCloseWithCloseButtonListener()
- добавляет слушатель, который отслеживает закрытие окна одним из следующих способов: кнопка закрытия окна, панель breadcrumbs или действия для закрытия вкладокTabSheet
(Close, Close All, Close Others). Чтобы предотвратить случайное закрытие окна пользователем, можно вызвать методpreventWindowClose()
событияBeforeCloseEvent
:addBeforeCloseWithCloseButtonListener(BeforeCloseEvent::preventWindowClose);
-
addBeforeCloseWithShortcutListener
- добавляет слушатель, который отслеживает закрытие окна горячими клавишами (например, нажатиемEsc
). Чтобы предотвратить случайное закрытие окна пользователем, можно вызвать методpreventWindowClose()
событияBeforeCloseEvent
:addBeforeCloseWithShortcutListener(BeforeCloseEvent::preventWindowClose);