Либо используйте 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/>
, это делает его перенаправлением вместо (по умолчанию) вперед)
Не связано с конкретной проблемой, выполнение проверки внутри метода действия не обязательно является наилучшей практикой.Это должно быть сделано Validator
.Если он выдает ValidatorException
, то метод действия просто не будет вызываться.