Primefaces 5.0,JSF 2.2,Wildfly 8.1

以下用例:


单击视图中的命令按钮(带有一些参数)
bean方法在数据库中查找内容-如有必要,将显示dialog1。在dialog1中,有一个窗体和一个命令按钮。
单击dialog1中的命令按钮,bean方法将在数据库中查找内容。
根据Bean方法的结果,将关闭Dialog1并显示dialog2。


bean1.java:

public void buttonClicked() {

    Map<String, Object> options = new HashMap<>();
    options.put("modal", true);
    options.put("widgetVar", "dialog1");
    options.put("id", "dlg1");

if(somethingTrue()) {
RequestContext.getCurrentInstance().openDialog("dialog1.xhtml", options, null);
    }
}


一切都很好。出现Dialog1。

dialog1.xhtml:

<h:body>
    <h:form>
        <p:commandButton value="Button" actionListener="#{bean2.dialog1ButtonClicked}" />
    </h:form>
</h:body>


bean2.java:

public void dialog1ButtonClicked() {
    Map<String, Object> options = new HashMap<>();
    options.put("modal", true);
    options.put("widgetVar", "dialog2");
    options.put("id", "dlg2");

if(somethingTrue()) {
    RequestContext.getCurrentInstance().openDialog("dialog2.xhtml", options, null);
    }
}


dialog2.xhtml:

<h:body>
    The operation was successful.
</h:body>


Dialog2出现在dialog1中!

如何关闭dialog1并在dialog1中不显示dialog2?

我尝试在打开dialog2之前用Primefaces Dialog Framework关闭dialog1:

RequestContext.getCurrentInstance().closeDialog(null);
RequestContext.getCurrentInstance().openDialog("dialog2.xhtml", options, null);


Dialog2没有出现。

我尝试在AJAX回调<p:ajax event="dialogReturn" listener="#{bean1.dialogClosed}"/>之后打开dialog2
Dialog2不显示。

我尝试了客户端Java脚本调用:onclick="PF('dialog1').hide()"

Dialog2仍显示嵌套在dialog1中。

最佳答案

使用onHide可以打开另一个这样的对话框。

<p:dialog class="userRegisterDialog" header="#{bean.dailogHeader}" modal="true" resizable="false" draggable="false" onHide="PF('dialog2').show();>
</p:dialog>


当使用转义键关闭对话框时,它也起作用。

关于jsf - Primefaces对话框框架-打开对话框-关闭它-打开另一个对话框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32897397/

10-12 22:36