3.5.4.7. InputDialogFacet

InputDialogFacet – это фасет, который обеспечивает возможность предварительной настройки Input Dialog. Декларативное описание диалога ввода заменяет существующий метод Dialogs.createInputDialog(). InputDialogFacet определяется в элементе facets XML-дескриптора экрана.

XML-имя компонента: inputDialog.

Пример использования:

<facets>
    <inputDialog id="inputDialogFacet"
                 caption="msg://inputDialog"
                 onAction="dialogAction">
        <parameters>
            <booleanParameter id="boolParam"
                              caption="msg://boolParam"
                              defaultValue="true"
                              required="true"/>
            <intParameter id="intParam"
                          caption="msg://intParam"
                          required="true"/>
            <entityParameter id="userParam"
                             caption="msg://userParam"
                             entityClass="com.haulmont.cuba.security.entity.User"
                             required="true"/>
        </parameters>
    </inputDialog>
</facets>

Экран, настроенный с помощью InputDialogFacet, может быть показан явно с помощью метода show():

@Inject
protected InputDialogFacet inputDialog;

@Subscribe("showDialog")
public void onShowDialogClick(Button.ClickEvent event) {
    inputDialog.show();
}

Кроме того, фасет может быть подписан на действие (см. атрибут onAction) или кнопку (см. атрибут onButton) по идентификатору.

В дополнение к атрибутам, описанным для OptionDialogFacet, диалог ввода имеет атрибут defaultActions, который определяет набор предопределенных действий для использования в диалоговом окне. Стандартные значения:

  • OK

  • OK_CANCEL

  • YES_NO

  • YES_NO_CANCEL

Значение по умолчанию – OK_CANCEL.

элементы inputDialog:

  • элемент parameters может содержать следующие параметры:

    • stringParameter

    • booleanParameter

    • intParameter

    • doubleParameter

    • longParameter

    • bigDecimalParameter

    • dateParameter

    • timeParameter

    • dateTimeParameter

    • entityParameter

    • enumParameter

Чтобы реализовать кастомную логику для диалогового действия, нужно создать соответствующий метод-обработчик в контроллере.

Для обработки результатов, полученных в диалоге ввода, нужно создать соответствующий делегат:

@Install(to = "inputDialogFacet", subject = "dialogResultHandler")
public void handleDialogResults(InputDialog.InputDialogResult dialogResult) {
    String closeActionType = dialogResult.getCloseActionType().name();
    String values = dialogResult.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();
}
Атрибуты inputDialog

caption - contentMode - defaultActions - height - id - maximized - message - onAction - onButton - stylename - width

Элементы inputDialog

actions - parameters