我有一个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;
}
}
答案 0 :(得分:3)
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方法。