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.
-