InputDialogFacet
InputDialogFacet
предоставляет вам альтернативный способ настройки и открытия диалогового окна ввода. Вместо использования метода Dialogs.createInputDialog()
в контроллере экрана вы можете настроить InputDialogFacet
в XML-дескрипторе с помощью визуального дизайнера Studio.
XML-имя компонента: inputDialog
.
Атрибуты
InputDialogFacet
определяется в элементе facets
XML-дескриптора экрана и имеет следующие атрибуты:
-
dialogActions
- позволяет добавлять в диалоговое окно наиболее часто используемые действия с соответствующими кнопками. Возможны следующие значения:-
OK_CANCEL
- добавляет кнопки OK и Cancel. Значение по умолчанию. -
OK
- добавляет кнопку OK. -
YES_NO
- добавляет кнопки Yes и No. -
YES_NO_CANCEL
- добавляет кнопки Yes, No, и Cancel.
-
-
onAction
- определяет id действия, который должен вызвать открытие диалогового окна. -
onButton
- определяет id кнопки, которая должна вызвать открытие диалогового окна.
Параметры
Чтобы добавить поля ввода в диалоговое окно, создайте перечисленные ниже вложенные элементы внутри элемента parameters
. Для каждого параметра будет создан соответствующий визуальный компонент для ввода значения.
Параметр | Визуальный компонент |
---|---|
|
|
|
DateField с resolution |
|
DateField с resolution |
|
|
|
|
|
|
|
|
|
Все описанные выше параметры имеют атрибут defaultValue
для установки значения по умолчанию для соответствующего поля.
<parameters>
<bigDecimalParameter id="bigDecimalParameter"
caption="Big Decimal Parameter"
defaultValue="55.753"
required="false"/>
</parameters>
-
Используйте
entityParameter
для отображения EntityPicker. Чтобы определить класс сущности для соответствующего поля, используйте атрибутentityClass
.<parameters> <entityParameter caption="Entity Parameter" entityClass="ui.ex1.entity.City" id="entityParameter" required="true"/> </parameters>
-
Используйте
enumParameter
для отображения ComboBox. Чтобы определить класс enum для соответствующего поля, используйте атрибутenumClass
.<parameters> <enumParameter caption="Enum Parameter" enumClass="ui.ex1.entity.Hobby" id="enumParameter"/> </parameters>
События и слушатели
Чтобы сгенерировать заглушку слушателя в Jmix Studio, выберите фасет в XML-дескрипторе экрана или на панели иерархии Jmix UI и используйте вкладку Handlers на панели инспектора Jmix UI. В качестве альтернативы вы можете воспользоваться кнопкой Generate Handler на верхней панели контроллера экрана. |
InputDialogCloseEvent
InputDialogCloseEvent
отправляется при закрытии диалогового окна. С помощью метода InputDialogCloseEvent.closedWith()
можно отслеживать, как был закрыт диалог:
@Autowired
private Notifications notifications;
@Subscribe("inputDialog")
public void onInputDialogInputDialogClose(InputDialog.InputDialogCloseEvent event) {
if (event.closedWith(DialogOutcome.OK)) {
notifications.create()
.withCaption("The order will be displayed in your profile within 5 minutes")
.show();
}
}
Чтобы создать слушателя события программно, используйте метод addCloseListener()
.
DialogResultHandler
Метод делегата DialogResultHandler
позволяет обрабатывать результаты диалогового окна ввода:
@Autowired
private Notifications notifications;
@Install(to = "inputDialog", subject = "dialogResultHandler")
private void inputDialogDialogResultHandler(InputDialog.InputDialogResult inputDialogResult) {
String closeActionType = inputDialogResult.getCloseActionType().name();
String values = inputDialogResult.getValues().entrySet()
.stream()
.map(entry -> String.format("%s = %s", entry.getKey(), entry.getValue()))
.collect(Collectors.joining(", "));
notifications.create(Notifications.NotificationType.HUMANIZED)
.withCaption("InputDialog Result Handler")
.withDescription("Close Action: " + closeActionType +
". Values: " + values)
.show();
}
Чтобы использовать его программно, вызовите метод setDialogResultHandler()
.
Validator
Метод делегата Validator
позволяет проверять входные значения. Он принимает определенный InputDialog.ValidationContext
, содержащий введенные значения. Метод должен возвращать экземпляр ValidationErrors
, который включает описания ошибок. Эти ошибки будут показаны в уведомлении с другими исключениями проверки.
@Install(to = "inputDialog", subject = "validator")
private ValidationErrors inputDialogValidator(InputDialog.ValidationContext validationContext) {
String phone = validationContext.getValue("phoneField");
String address = validationContext.getValue("addressField");
if (Strings.isNullOrEmpty(phone) && Strings.isNullOrEmpty(address)) {
return ValidationErrors.of("Phone or Address must be filled");
}
return ValidationErrors.none();
}
Чтобы использовать его программно, вызовите метод setValidator()
.