Методы контроллеров
В данном разделе описаны некоторые методы базовых классов контроллеров экранов, которые можно вызывать или переопределять в коде приложения.
Методы всех экранов
-
show()- отображает экран. Данный метод обычно вызывается после создания экрана, как описано в разделе Открытие экранов. -
close()- закрывает экран с переданным enum значением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(); }
Методы StandardEditor
-
getEditedEntity()- когда экран открыт, возвращает экземпляр редактируемой сущности. Это экземпляр, установленный в контейнере данных, указанном аннотацией @EditedEntityContainer.В слушателях InitEvent и AfterInitEvent данный метод возвращает
null. В слушателе BeforeShowEvent данный метод возвращает экземпляр, переданный в экран для редактирования (позднее в процессе открытия экрана сущность перезагружается, и другой ее экземпляр устанавливается в контейнере данных).
Для закрытия экрана редактирования можно использовать следующие методы:
-
closeWithCommit()- валидирует и сохраняет данные, затем закрывает экран сStandardOutcome.COMMIT. -
closeWithDiscard()- игнорирует несохраненные изменения и закрывает экран сStandardOutcome.DISCARD.
Если в экране есть несохраненные изменения в DataContext, при закрытии экрана отображается соответствующее сообщение. Вид данного сообщения можно настроить с помощью свойства приложения jmix.ui.screen.use-save-confirmation. Если экран закрывается методом closeWithDiscard() или close(StandardOutcome.DISCARD) то несохраненные изменения игнорируются без каких-либо сообщений.
-
commitChanges()- сохраняет изменения не закрывая экран. Данный метод можно вызвать из собственного слушателя события (например нажатия кнопки), или переопределить слушатель действияwindowCommit, чтобы выполнить какие-либо операции после сохранения данных, например:@Override protected void commit(Action.ActionPerformedEvent event) { commitChanges().then(() -> { commitActionPerformed = true; (1) // ... (2) }); }1 Этот флажок используется для возврата правильного результата при последующем закрытии экрана. 2 Вы можете выполнять действия после сохранения данных. -
validateAdditionalRules()можно переопределить для выполнения дополнительной валидации перед сохранением данных. Данный метод должен сохранить информацию об ошибках валидации в переданном ему объектеValidationErrors. Впоследствии эта информация будет отображена вместе с ошибками стандартной процедуры валидации. Например:private Pattern pattern = Pattern.compile("\\s"); @Override protected void validateAdditionalRules(ValidationErrors errors) { if (getEditedEntity().getNum() != null) { if (pattern.matcher(getEditedEntity().getNum()).find()) { errors.add("Number cannot contain whitespaces"); } } super.validateAdditionalRules(errors); }
-
preventUnsavedChanges()вызывается при закрытии экрана для предотвращения потери несохраненных данных. Стандартная реализация вызывает либо методshowUnsavedChangesDialog(), либоshowSaveConfirmationDialog()бина ScreenValidation, в зависимости от значения свойства jmix.ui.screen.use-save-confirmation.
Методы MasterDetailScreen
-
getEditedEntity()- когда экран находится в режиме редактирования, возвращает экземпляр редактируемой сущности. Это экземпляр, установленный в контейнере данных компонентаform. Если экран не в режиме редактирования, данный метод выбрасываетIllegalStateException. -
Метод
validateAdditionalRules()можно переопределить для выполнения дополнительной валидации перед сохранением данных, как описано выше дляStandardEditor.