我是JSF和primefaces的新手,我正在尝试执行以下操作:我必须创建一个包含两个日期的URL,然后在新页面中打开它。我正在使用primefaces,所以我创建了两个p:calendar组件和一个p:commandButton。
我的问题是,我设法验证了日历,之后打开了URL,但是在同一个窗口中。如果我将ajax =“false”设置为commandbutton,并将target =“_ blank”设置为表单,则会在新页面中打开URL,但如果日历值无效,则它还会在新页面中打开原始页面包含验证消息的页面。对于重定向,我在我的bean中使用FacesContext.getCurrentInstance()。getExternalContext()。redirect(URL)。
我还尝试使用h:outputLink重定向,并将其值设置为bean.url和target =“_ blank”。它重定向到新页面,但在这种情况下,我无法验证日历。
我该怎么做?
谢谢!
答案 0 :(得分:1)
根据验证情况,有条件地使用<h:outputScript>
呈现window.open()
:
<h:form>
<p:calendar validator="yourValidator" />
<p:calendar validator="yourValidator" />
<p:commandButton action="#{bean.submit}" update="@form" />
<h:outputScript rendered="#{facesContext.postback and not facesContext.validationFailed}">
window.open('someURL');
</h:outputScript>
</h:form>
或使用PrimeFaces'RequestContext#execute()
与window.open()
:
public void submit() {
RequestContext.getCurrentInstance().execute("window.open('someURL');");
}