0

我想从对话窗口的bean调用一个javascript,但它执行了两次!

我使用 RequestContext.getCurrentInstance().execute() 方法。如果页面不是“对话框框架”,则此方法可以完美运行,但在外部页面对话框窗口中,javascript 会执行两次。

父页面:

<h:form id="welcomeform">
  <p:commandButton  value="Welcome" actionListener="#{welcome.openhello()}" />
</h:form>

父bean:

@ManagedBean
public class Welcome {
    public void openhello() {
        Map<String,Object> options = new HashMap<String, Object>();
        options.put("modal", true);
        options.put("width", 300);
        options.put("height", 100);
        options.put("resizable", false);
        options.put("closable", true);
        RequestContext context = RequestContext.getCurrentInstance();
        context.openDialog("hello", options, null);
    }
}

对话页面:

<h:body>        
    <h:form id="helloform">
        <p:commandButton    value="Hello" actionListener="#{hello.actionhello()}" />
    </h:form>
</h:body>

对话 bean:

@ManagedBean(name = "hello")
public class Hello {
    public void actionhello() {
        RequestContext.getCurrentInstance().execute("alert('Hello World!');");
    }
}

faces-config.xml:

    <action-listener>org.primefaces.application.DialogActionListener</action-listener>
    <navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
     <view-handler>org.primefaces.application.DialogViewHandler</view-handler>

两次执行 javascript 的更大问题是 RequestContext.getCurrentInstance().closeDialog(..) 方法也关闭了两次,因为它调用了原生 PrimeFaces.closeDialog({pfdlgcid:'#{param.pfdlgcid}'}) 脚本如果您使用嵌套对话框,它也会关闭父对话框窗口,而不仅仅是子对话框。

Primefaces 版本是 6.1 服务器是 Payara,浏览器是 Chrome。

任何想法这里出了什么问题?提前致谢!

4

0 回答 0