1

我是 JSF 和 primefaces 的新手,我正在尝试执行以下操作:我必须创建一个包含两个日期的 URL,然后在新页面中打开它。我使用的是 primefaces,所以我创建了两个 p:calendar 组件和 ap:commandButton。

我的问题是,我设法验证了日历,然后打开了 URL,但在同一个窗口中。如果我将 ajax="false" 设置为命令按钮,并将 target="_blank" 设置为表单,那么它会在新页面中打开 URL,但如果日历值无效,那么它也会在新页面中打开原始页面带有验证消息的页面。对于重定向,我在我的 bean 中使用 FacesContext.getCurrentInstance().getExternalContext().redirect(URL)。

我还尝试使用 h:outputLink 重定向并将其值设置为 bean.url 和 target="_blank"。它重定向到一个新页面,但在这种情况下,我没有设法验证日历。

我怎样才能做到这一点?
谢谢!

4

1 回答 1

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>

RequestContext#execute()或使用PrimeFaces' window.open()

public void submit() { 
    RequestContext.getCurrentInstance().execute("window.open('someURL');");
}
于 2012-07-16T13:20:11.803 回答