Luiggi has answered the POST matter. If the report is however available by a GET request, then there are other ways.
Use window.open()
in oncomplete
.
<h:form>
...
<p:commandButton action="#{bean.submit}" update="@form"
oncomplete="if (args && !args.validationFailed) window.open('reportURL')" />
</h:form>
Or conditionally render a <h:outputScript>
with window.open()
.
<h:form>
...
<p:commandButton action="#{bean.submit}" update="@form" />
<h:outputScript rendered="#{facesContext.postback and not facesContext.validationFailed}">
window.open('reportURL');
</h:outputScript>
</h:form>
Or use PrimeFaces Primefaces#execute()
with window.open()
.
public void submit() {
// ...
PrimeFaces.current().executeScript("window.open('reportURL');");
}
The first way requires the URL to be already definied before submit, the latter two ways allows you to use a dynamic URL like so window.open('#{bean.reportURL}')
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…