ソース
このように、2つの変数を持ったバッキングビーンを用意しました。
個別にバリデーションをしたかったら @NotNullだったり@Size(min = 2, max = 5)のように指定したらよいですが、アノテーションをつけずに例えばIntegerで宣言されている変数はデフォルトで任意のバリデーションを反映させることができる。つまり、すべてのソースが対象になる。
@Named
@RequestScoped
public class HogeBb {
private Integer num;
private String hoge;
プロパティファイルを作成し、バリデーションメッセージを書く
プロパティファイルには、以下のように書きます。
※以下の2行のどちらかで問題ありません。
-
1つ目の末尾が「INTEGER」は、概要メッセージで、xhtmlファイル側でfaceletsタグを使う場合messageタグを使う際にこのメッセージが表示される。
-
2つ目の末尾が「INTEGER.detail」は、詳細メッセージで、xhtmlファイル側でfaceletsタグを使う場合messages(messageにsがつく)タグを使う際にこのメッセージが表示される
javax.faces.converter.IntegerConverter.INTEGER=整数を記入してね
javax.faces.converter.IntegerConverter.INTEGER_detail=整数で入力してください
faces-config.xmlにバリデーションを反映させるための設定
上記で作った「messages.properties」を使える状態にする。
※このファイルはvmという名前のパッケージの中にあります。もしsrc直下に置く場合は、「vm/」は不要です。
faces-config.xmlに、以下を追加
※「パッケージ名/プロパティファイル名(拡張子なし)」
<application>
<message-bundle>
vm/message
</message-bundle>
</application>
実行結果
バリデーションのアノテーションはつけていないですが、バッキングビーンでIntegerとして定義されている場合は自動でバリデーションを適用させることができました
感想
なかなかJSFを触る人は少ないかと思うが、今回JSFを触ってみて個人的にはやりやすい。ただ、このフレームワークで慣れるとSpring、Laravelが大変になりそう(小並感)