Primefaces以编程方式打开可关闭对话框

Dho*_*LEM 5 dialog primefaces

我想从支持bean动态创建一个primefaces对话框.我写了上面的代码:

public void showDialog(){
    UIComponent panelGroup = facesContext.getViewRoot().findComponent("form1");
    System.out.println("found or not??"+ panelGroup.toString());
    Dialog dialog = new Dialog();
    dialog.setId("sample");
    dialog.setWidgetVar("widget");
    dialog.setHeader("Sample");
    dialog.setVisible(true);
    dialog.setMinimizable(true);

    dialog.setDynamic(true);
    dialog.setHideEffect("fade");
    dialog.setFooter("footer");

    dialog.setDraggable(true);
    dialog.setMinWidth(600);
    dialog.setClosable(true);
    dialog.setModal(true);
    dialog.setAppendToBody(false);

    panelGroup.getChildren().add(dialog);

    RequestContext requestContext = RequestContext.getCurrentInstance();
    requestContext.openDialog("widget");
    requestContext.update("form1");
}
Run Code Online (Sandbox Code Playgroud)

在我的jsf页面中:我有

 <h:form id="form1" >
        <h:commandButton value="show Dialog" action="#{createDialog.showDialog()}" />

 </h:form>
Run Code Online (Sandbox Code Playgroud)

问题是,当我将它设置为可见时,我得到了对话框,但我都无法关闭(我没有得到关闭图标,也没有我可以拖动它)!

ale*_*der 5

您需要替换此行:

requestContext.openDialog("widget");
Run Code Online (Sandbox Code Playgroud)

对此:

requestContext.execute("PF('widget').show()");     
Run Code Online (Sandbox Code Playgroud)

RequestContext.openDialog() 方法引用 Primefaces Dialog Framework API,它不同于 p:dialog 组件。

来自primefaces用户指南:

对话框框架 (DF) 用于在运行时动态生成的对话框中打开外部 xhtml 页面。

因此, RequestContext.openDialog() 期望您提供 xhtml 页面的路径作为参数。

并且 p:dialog 组件有 javascript api show() 和 hide() 方法与之交互。