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:
-
элемент
actions
представляет собой список диалоговых действий.
-
элемент
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();
}