0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【JSF】アノテーションを使わず任意のデータ型の項目すべてに自動でバリデーションをかける

Last updated at Posted at 2022-10-04

ソース

このように、2つの変数を持ったバッキングビーンを用意しました。
個別にバリデーションをしたかったら @NotNullだったり@Size(min = 2, max = 5)のように指定したらよいですが、アノテーションをつけずに例えばIntegerで宣言されている変数はデフォルトで任意のバリデーションを反映させることができる。つまり、すべてのソースが対象になる。

hoge.java
@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がつく)タグを使う際にこのメッセージが表示される

messages.properties
javax.faces.converter.IntegerConverter.INTEGER=整数を記入してね
javax.faces.converter.IntegerConverter.INTEGER_detail=整数で入力してください

faces-config.xmlにバリデーションを反映させるための設定

上記で作った「messages.properties」を使える状態にする。
※このファイルはvmという名前のパッケージの中にあります。もしsrc直下に置く場合は、「vm/」は不要です。
faces-config.xmlに、以下を追加
※「パッケージ名/プロパティファイル名(拡張子なし)」

faces-config.xml
     <application> 
 		<message-bundle>
 			vm/message
 		</message-bundle> 
 	</application> 

実行結果

バリデーションのアノテーションはつけていないですが、バッキングビーンでIntegerとして定義されている場合は自動でバリデーションを適用させることができました
スクリーンショット 2022-10-04 093059.png

感想

なかなかJSFを触る人は少ないかと思うが、今回JSFを触ってみて個人的にはやりやすい。ただ、このフレームワークで慣れるとSpring、Laravelが大変になりそう(小並感)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?