S2JSFでバリデーションエラーがあったかどうかを判定したい(その2

higaさま、yone098さまにアドバイスを頂きつつ再検討してみました。

まずはフォーム画面にHiddenを置く。
hogeEditInitActionにvalidというクラス変数は置かず、よって初期値は空文字となる。

■hogeEdit.html
<html lang="ja" xmlns:m="http://www.seasar.org/maya"
m:action="#{hogeEditInitAction.initialize}">
..(略)
<input type="hidden" id="valid" m:value="#{valid}" />

<input id="title" type="text" m:value="#{hogeDto.title}" m:required="true" />
<span m:inject="h:message" m:for="title" m:class="error"/>
<input id="btnCheck" type="button" m:action="#{hogeEditAction.goCheck}" value="内容確認へ" />

S2JSFの動きだと、バリデーションエラーがある場合はhogeEditAction#goCheck()まで処理が到達しないので、
hiddenに入っているvalid値は、空文字のままとなる。

バリデーションエラーが無い場合は、hogeEditAction#goCheck()まで処理が到達するので、
以下のようにコードを書く。

■hogeEditAction.java
private String valid = ""; // 入力検証完了通知用

public String goCheck() {
valid = "OK"; //検証が完了した
return null; //もう一度入力フォームへ戻す
}

hogeEditAction#goCheck()
のあとは、
hiddenに入っているvalid値が"OK"となるため、バリデーションを通過したことがJavaScriptから判定できるようになる。

こんな感じでいかがでしょうか?

hogeEditInitAction#initializeの中で、
javax.faces.context.FacesContext@getCurrentInstance().getMessages().hasNext()
を使って判定しようとしていたのですが、一度hiddenに入ってしまった値は書き換えることができなかったので、
上記のような方法にしてみました。やり方がまずかったのでしょうか...