我想从对话框窗口的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。
任何想法在这里出了什么问题?提前谢谢!