3.5.4.7. InputDialogFacet
用 InputDialogFacet
facet 可以预配置 输入对话框。用声明式的方法定义输入对话框,而可以替代 Dialogs.createInputDialog()
方法。InputDialogFacet
用界面 xml 描述的 facets
元素定义。
组件的 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();
}
除了 OptionDialogFacet 描述的属性之外,inputDialog
还有 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();
}