JSF / Seam验证并重定向到新页面

时间:2011-11-09 02:13:51

标签: jsf seam

我有一个JSF 1.2 / Seam 2.2.2应用程序。我有按钮,点击按钮,我在当前页面的对象上运行验证,查询一些依赖对象并运行验证。如果验证通过,那么我需要将用户重定向到新页面。否则,我需要在同一页面中显示验证错误。下面的代码工作正常,并显示错误消息。但是如何重定向到新页面?

<h:messages id="errorMsg" errorClass="errorMessages" />
<a4j:commandButton action="#{myController.shouldRedirectToNewPage()}"
                value="Button" styleClass="button" />

public void shouldRedirectToNewPage() {
    //Run validation on objects in the current page
    //Query for dependent objects and run validation
    if(validationFails) {
       facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
          "ERROR MESSAGE", null)); 
       return;
   }
}

1 个答案:

答案 0 :(得分:3)

使用ExternalContext#redirect()

public void shouldRedirectToNewPage() throws IOException {
    // ...

    if (validationFails) {
        facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR MESSAGE", null));
    } else {
        facesContext.getExternalContext().redirect("otherpage.jsf");
    }
}

以通常的方式返回导航案例字符串:

public String shouldRedirectToNewPage() {
    // ...

    if (validationFails) {
        facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR MESSAGE", null));
        return null;
    } else {
        return "otherpage";
    }
}

faces-config.xml中的以下内容:

<navigation-case>
    <from-outcome>otherpage</from-outcome>
    <to-view-id>/otherpage.jsf</to-view-id>
    <redirect/>
</navigation-case>

(请注意<redirect/>,这会使其成为重定向而非(默认)转发)


对具体问题

无关,在action方法中进行验证不一定是最佳做法。它应该由Validator完成。如果它抛出ValidatorException,那么就不会调用action方法。