JSF2.xでBeanValidationのグループを設定してValidationを切り替える

JSFの組み込み機能だけ使うとこんな感じらしい。
JSF2.xでValidationグループを設定する

<!-- ISBNコードの入力(登録時) -->
<h:inputText id="isbn" value="#{bookController.book.isbn}" label="ISBNコード">
    <f:validateBean validationGroups="validation.groups.BookEntryGroup" />
</h:inputText>

<!-- タイトルの入力(登録時) -->
<h:inputText id="title" value="#{bookController.book.title}" label="タイトル">
    <f:validateBean validationGroups="validation.groups.BookEntryGroup" />
</h:inputText>

タグごとにf:validateBeanを指定することで、Validationを行うことが出来る。
Validationを切り替えたい場合は全てのタグにf:validateBeanを記載してあげなければいけない(ギャー)

        • -

(追記)
そんなことなかった!
f:validateBeanでh:inputTextを囲んでも有効だそうです。

        • -


#OmniFaces
JSFのデフォルトだとあれな感じだったけれどもOmniFacesを使用すれば以下の様な感じでボタンにp:validateBeanを書いておけばやってくれるらしい。
http://showcase.omnifaces.org/validators/validateBean

俺達が欲しかったのはこれだ感があり。


##どうやっているのか
PhaseListenerを利用して、beforePhaseでvalidationGroupを切り替えて、afterPhaseで元に戻すということをやっているらしい。
BeanValidationEventListener


これとValidateBeanクラスを移植すればだいたい事足りるっぽいけれども、さて。