【发布时间】:2011-07-27 12:38:29
【问题描述】:
我有一个
<a4j:commandButton action="#{myBean.doCalculation}"
oncomplete="redirectBrowser()" />
但是,如果myBean.doCalculation() 出现错误,则始终调用oncomplete 属性。如何让它取决于操作方法的结果?
【问题讨论】:
我有一个
<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;
}
}
更简洁的方法是通过Validator 进行验证。这样,当验证失败时,操作方法根本不会被调用。
【讨论】:
好吧,仅仅寻找 facesContext.maximumSeverity == null 是不够的,可能会有一个警告作为当前最大严重性,它也应该重定向。相反,编写一个方法来查看是否有任何最大严重性的优先级错误...
【讨论】: