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. Для каждого параметра будет создан соответствующий визуальный компонент для ввода значения.

Параметр Визуальный компонент

bigDecimalParameter

TextField с data type decimal

dateParameter

DateField с resolution DAY

dateTimeParameter

DateField с resolution MIN

doubleParameter

TextField с data type double

intParameter

TextField с data type int

longParameter

TextField с data type long

stringParameter

TextField

timeParameter

TimeField

Все описанные выше параметры имеют атрибут 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().

Все XML-атрибуты

Вы можете просматривать и редактировать применимые к фасету атрибуты с помощью панели инспектора Jmix UI в дизайнере экранов Studio.