首页 文章

PrimeFaces commandButton需要验证两个日历组件,然后将包含两个日历值的外部URL重定向到新页面

提问于
浏览
1

我是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” . 它重定向到新页面,但在这种情况下,我没有设法验证日历 .

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

1 回答

  • 1

    根据验证,有条件地使用 window.open() 呈现 <h:outputScript>

    <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');");
    }
    

相关问题