私は
<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()"
ただし、アクションメソッドでリダイレクトを実行するだけの方がクリーンです。
public String doCalculation() {
// ...
if (success) {
return "nextPage.xhtml?faces-redirect=true";
} else {
return null;
}
}
さらにクリーンなのは、によって検証を行うことValidator
です。このように、検証が失敗したときにアクションメソッドがまったく呼び出されません。
まあ、facesContext.maximumSeverity == nullを探すだけでは十分ではなく、現在の最大重大度として警告が表示される場合があります。これもリダイレクトする必要があります。代わりに、優先度エラーの最大重大度があるかどうかを調べるメソッドを記述してください...