我有一个
<a4j:commandButton action="#{myBean.doCalculation}"
oncomplete="redirectBrowser()" />
但是,如果在 处出现错误myBean.doCalculation()
,则oncomplete
始终调用属性。如何让它取决于操作方法的结果?
您可以检查 oncomplete 事件中的错误并在未找到错误时重定向。可以这样做
oncomplete="#{facesContext.maximumSeverity == null ? 'redirectBrowser()' : 'doSomethingElse()'}"
如果您使用的是 JSF 2.0,则可以使用FacesContext#isValidationFalied()
来检查验证是否失败:
oncomplete="if (#{not facesContext.validationFailed}) redirectBrowser()"
但是,仅在 action 方法中执行重定向更干净:
public String doCalculation() {
// ...
if (success) {
return "nextPage.xhtml?faces-redirect=true";
} else {
return null;
}
}
更干净的是只通过 a 进行验证Validator
。这样,当验证失败时,根本不会调用 action 方法。
好吧,仅仅寻找 facesContext.maximumSeverity == null 是不够的,可能会有一个警告作为当前的最大严重性,它也应该重定向。相反,编写一个方法来查看是否存在任何最大严重性的优先级错误......