3.5.1.1.2. Методы контроллеров
В данном разделе описаны некоторые методы базовых классов контроллеров экранов, которые можно вызывать или переопределять в коде приложения.
- Общие для всех экранов методы
-
-
show()
- отображает экран. Данный метод обычно вызывается после создания экрана, как описано в разделе Открытие экранов. -
close()
- закрывает экран с переданным значениемStandardOutcome
или объектомCloseAction
. Например:@Subscribe("closeBtn") public void onCloseBtnClick(Button.ClickEvent event) { close(StandardOutcome.CLOSE); }
Значение параметра доступно в BeforeCloseEvent и AfterCloseEvent, поэтому информация о причине закрытия экрана может быть получена в слушателях этих событий. Подробная информация об использовании этих слушателей приведена в разделе Выполнение кода после закрытия и возврат значений.
-
getScreenData()
- возвращает объектScreenData
, в котором зарегистрированы все компоненты данных, объявленные в XML-дескрипторе экрана. МетодloadAll()
этого объекта можно вызывать для срабатывания всех загрузчиков данных экрана:@Subscribe public void onBeforeShow(BeforeShowEvent event) { getScreenData().loadAll(); }
-
getSettings()
- возвращает объектSettings
, который может быть использован для чтения и записи специфичных настроек, ассоциированных с экраном для данного пользователя. -
saveSettings()
- сохраняет настройки экрана, представляемые объектомSettings
. Данный метод вызывается автоматически, если свойство приложения cuba.gui.manualScreenSettingsSaving установлено в false (что является значением по умолчанию).
-
- Методы StandardEditor
-
-
getEditedEntity()
- когда экран открыт, возвращает экземпляр редактируемой сущности. Это экземпляр, установленный в контейнере данных, указанном аннотацией @EditedEntityContainer.В слушателях InitEvent и AfterInitEvent данный метод возвращает null. В слушателе BeforeShowEvent данный метод возвращает экземпляр, переданный в экран для редактирования (позднее в процессе открытия экрана сущность перезагружается, и другой ее экземпляр устанавливается в контейнере данных).
Для закрытия экрана редактирования можно использовать следующие методы:
-
closeWithCommit()
- валидирует и сохраняет данные, затем закрывает экран сStandardOutcome.COMMIT
. -
closeWithDiscard()
- игнорирует несохраненные изменения и закрывает экран сStandardOutcome.DISCARD
.
Если в экране есть несохраненные изменения в DataContext, при закрытии экрана отображается соответствующее сообщение. Вид данного сообщения можно настроить с помощью свойства приложения cuba.gui.useSaveConfirmation. Если экран закрывается методом
closeWithDiscard()
илиclose(StandardOutcome.DISCARD)
то несохраненные изменения игнорируются без каких-либо сообщений.-
commitChanges()
- сохраняет изменения не закрывая экран. Данный метод можно вызвать из собственного слушателя события (например нажатия кнопки), или переопределить слушатель действияwindowCommit
, чтобы выполнить какие-либо операции после сохранения данных. Пример переопределения стандартного действияwindowCommit
:@Override protected void commit(Action.ActionPerformedEvent event) { commitChanges().then(() -> { // this flag is used for returning correct outcome on subsequent screen closing commitActionPerformed = true; // perform actions after the data has been saved }); }
Стандартная реализация метода
commit()
отображает сообщение об успешном сохранении. Ее можно отключить, вызвав методsetShowSaveNotification(false)
при инициализации экрана. -
Метод
validateAdditionalRules()
можно переопределить для выполнения дополнительной валидации перед сохранением данных. Данный метод должен сохранить информацию об ошибках валидации в переданном ему объектеValidationErrors
. Впоследствии эта информация будет отображена вместе с ошибками стандартной процедуры валидации. Например:
private Pattern pattern = Pattern.compile("\\d"); @Override protected void validateAdditionalRules(ValidationErrors errors) { if (getEditedEntity().getAddress().getCity() != null) { if (pattern.matcher(getEditedEntity().getAddress().getCity()).find()) { errors.add("City name cannot contain digits"); } } super.validateAdditionalRules(errors); }
-
- Методы MasterDetailScreen
-
-
getEditedEntity()
- когда когда находится в режиме редактирования, возвращает экземпляр редактируемой сущности. Это экземпляр, установленный в контейнере данных компонентаform
. Если экран не в режиме редактирования, данный метод выбрасываетIllegalStateException
. -
Метод
validateAdditionalRules()
можно переопределить для выполнения дополнительной валидации перед сохранением данных, как описано выше дляStandardEditor
.
-