Teeda の罠

 Teeda にも罠があったのでメモ。JSF の仕様ならゴメンナサイ。

 カスタムバリデータを作ろうと思って、エラーメッセージを FacesMessage オブジェクトで定義するときの罠です。

new FacesMessage("○○は△△でなければなりません")

とやると、

○○は△△でなければなりません ○○は△△でなければなりません

とメッセージが二重に表示されてしまいます。FacesMessage には summary と detail が設定できるのですが、この引数が 1 つのときのコンストラクタでは、summary にこの引数の値が入り、detail は null になります。しかし、Teeda では getDetail すると、detail が null のとき summary が返るようになっています。バリデータのエラーメッセージは、summary + detail になるので、この仕様だと summary が二重になるというわけです。ですので以下のようにすると罠を回避できます。

new FacesMessage("○○は△△でなければなりません", "")