jakaruta.doc_023
R e i - D r e a m
for Laravel
TOP > Jakarta_EE10 > ビーンバリデーション詳細
Guest
login

最終投稿日:2026年07月26日

ビーンバリデーション詳細
エラーメッセージを一元管理する
一元管理用ファイル『src/main/resources/ValidationMessages.properties』を作成します。
作成したら以下を記入します。
    error.required.name=名前は必須入力です。
ポイント

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

ファイルを開き、再度入力してみましょう。

設定が出来たらJAVAへ戻り、先ほどのビーンバリデーションを以下の様に変更しましょう。
@NotBlank(message = "名前は必須入力です")

@NotBlank(message = "{error.required.name}")
どうですか?
実行すると同じ結果になりましたね。
ポイント

ファイル名『ValidationMessages.properties』は固定です。
ビーンバリデーションは、このファイル名を探します。
そして『error.required.name』に一致する内容をメッセージとして認識します。

プレースホルダを設定する
例えばメッセージで『数値は10以上としてください。』と設定します。
でも違う画面では『数値は5以上としてください。』という項目もあったとします。
この場合、殆ど同じ内容なのに2つのメッセージを管理するのは非効率ですよね。
そこで役に立つのがプレースホルダ設定です。
○ 全てのビーンで使えるプレースホルダ
${validatedValue}
『$』が付いてるのが特徴的です。
これは入力された値を表示してくれます。
例えばメッセージ管理を以下の様に変更してみましょう。
    error.required.name=名前は必須入力です(入力された値は「${validatedValue}」です)。
ブランクチェックだけに分かりにくいですが、半角スペースを入力すると値が挿入された事が確認できます。
○ 個々のビーンに用意されているプレースホルダ
以前の ビーンバリデーションの種類 を覚えていますか?
そこで紹介したのが、各ビーンに用意されているプレースホルダです。
例えば『@Size』の場合は、以下の様になっていました。
    @Size(min = 3, max = 10, message = "数字は{min}以上、{max}以下で入力してください")
この『message』の内容をそのまま『ValidationMessages.properties』に記述できます。
バリデーションメッセージがウザい
例えば以下の様にビーンバリデーションを設定します。
@NotBlank(message = "{error.required.name}")
@Size(min = 3, max = 10, message = "{error.Size.name}")
private String name = "";
あ、『ValidationMessages.properties』にも記述して下さいね。
    error.Size.name=この項目は{min}以上、{max}以下で記入してね。入力された文字は「${validatedValue}」でした。
この設定で対象UIをブランクで送信したら当然エラーは2行でます。
しかしユーザーからしたら『いや必須の時点でもう注意喚起要らないよ!』ですよね。
これを解消するのが《@GroupSequence(グループシークェンス)》という仕組みです。
単純な解釈として、ビーンバリデーションに番号を振りましょうって事ですね。
○ グループ作成
番号に該当するグループインターフェースを作成します。
    ※空のインターフェースなのでご安心を
場所は共通で使いまわすものなので、以下が良いでしょう。
パッケージ:view.validator.group
ファイル名:Group1.java
ファイル名:Group2.java
ファイル名:GroupOrder.java
※作成してすぐ保存で良いですが『interface』として作成してください
『GroupOrder』は以下の様に修正します。
GroupOrder.java

package view.validator.group;

import jakarta.validation.GroupSequence;

@GroupSequence({Group1.class, Group2.class})
public interface GroupOrder {}

○ ビーンバリデーションにグループを設定する
先ほどのバッキングビーンに戻り、グループを追加してみましょう。
SampleBean.java

@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;

○ ビュー側との連携設定
バッキングビーンに設定したルールを『.xhtml』側にも伝える必要があります。 該当項目を以下の様に修正します。
sample.xhtml

<!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>

これで1個づつエラー表示されます。
    ※バリデーション『@Size』は文字数です
ポイント

ビューのグループ設定に注目して下さい。

    view.validator.group.GroupOrder
どこかで見ましたね。
そうです。「パッケージ名」+「インターフェース名」の書式で設定しましょう。

レンズモード 【新規購入限定用】
ログインしてコメントを残そう!!


きっぷる