ビーンバリデーション詳細
エラーメッセージを一元管理する
作成したら以下を記入します。
error.required.name=名前は必須入力です。
⇒
@NotBlank(message = "{error.required.name}")
実行すると同じ結果になりましたね。
ファイル名『ValidationMessages.properties』は固定です。
ビーンバリデーションは、このファイル名を探します。
そして『error.required.name』に一致する内容をメッセージとして認識します。
プレースホルダを設定する
でも違う画面では『数値は5以上としてください。』という項目もあったとします。
この場合、殆ど同じ内容なのに2つのメッセージを管理するのは非効率ですよね。
そこで役に立つのがプレースホルダ設定です。
これは入力された値を表示してくれます。
例えばメッセージ管理を以下の様に変更してみましょう。
error.required.name=名前は必須入力です(入力された値は「${validatedValue}」です)。 ブランクチェックだけに分かりにくいですが、半角スペースを入力すると値が挿入された事が確認できます。
そこで紹介したのが、各ビーンに用意されているプレースホルダです。
例えば『@Size』の場合は、以下の様になっていました。
@Size(min = 3, max = 10, message = "数字は{min}以上、{max}以下で入力してください") この『message』の内容をそのまま『ValidationMessages.properties』に記述できます。
バリデーションメッセージがウザい
@Size(min = 3, max = 10, message = "{error.Size.name}")
private String name = "";
error.Size.name=この項目は{min}以上、{max}以下で記入してね。入力された文字は「${validatedValue}」でした。 この設定で対象UIをブランクで送信したら当然エラーは2行でます。
しかしユーザーからしたら『いや必須の時点でもう注意喚起要らないよ!』ですよね。 これを解消するのが《@GroupSequence(グループシークェンス)》という仕組みです。
単純な解釈として、ビーンバリデーションに番号を振りましょうって事ですね。
※空のインターフェースなのでご安心を
場所は共通で使いまわすものなので、以下が良いでしょう。
ファイル名:Group1.java
ファイル名:Group2.java
ファイル名:GroupOrder.java ※作成してすぐ保存で良いですが『interface』として作成してください
package view.validator.group;
import jakarta.validation.GroupSequence;
@GroupSequence({Group1.class, Group2.class})
public interface GroupOrder {}
@Getter
@Setter
@NotBlank(message = "{error.required.name}", groups = Group1.class)
@Size(min = 3, max = 10, message = "{error.Size.name}", groups = Group2.class)
private String name;
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="jakarta.faces.core"
xmlns:h="jakarta.faces.html">
<h:head>
<title>Hello World</title>
<h:outputStylesheet library="css" name="style.css" />
</h:head>
<h:body>
<h1>おはよう世界!</h1>
<h:form id="sample_form">
<h:messages errorClass="alert-danger" warnClass="alert-warning" infoClass="alert-info" layout="list" />
<h:inputText id="inpText" value="#{sampleBean.name}">
<f:validateBean validationGroups="view.validator.group.GroupOrder" />
</h:inputText>
<BR />
<h:commandButton value="自画面繊維" action="#{sampleBean.submit()}" />
<BR />
<h:commandButton value="POST繊維" action="#{sampleBean.goPost()}" />
<BR />
<h:commandButton value="GET繊維" action="#{sampleBean.goGet()}" />
<BR />
<h:commandButton value="外部繊維" action="#{sampleBean.goYahoo()}" />
</h:form>
</h:body>
</html>
※バリデーション『@Size』は文字数です
ビューのグループ設定に注目して下さい。
view.validator.group.GroupOrder どこかで見ましたね。そうです。「パッケージ名」+「インターフェース名」の書式で設定しましょう。





何か変な文字(\u3053\u3093\u306b\u3061\u306f)になった場合は、一旦ファイルを閉じ以下を試してください。
ファイルを開き、再度入力してみましょう。[ファイルを右クリック] > [プロパティ] > [左メニュー「リソース」選択]
『テキスト・ファイル・エンコード』を【その他:UTF-8】として下さい。