JSF 2.0で検証エラーメッセージをカスタマイズする

JSF 2.0で検証エラーメッセージをカスタマイズする

標準のJSF変換および検証エラーメッセージは、技術的またはいつか詳細すぎるため、実際には人間が読むことはできません。 この記事では、JSF 2.0で標準の変換または検証エラーメッセージをカスタマイズする方法を示します。

まとめガイド

  1. jsf-api-2.x.jarの「Messages.properties」ファイルからメッセージキーを見つけます。

  2. 独自のプロパティファイルを作成し、上記の「Messages.properties」ファイルで見つかった同じメッセージキーを配置し、カスタムエラーメッセージで上書きします。

  3. プロパティファイルを「faces-config.xml」に登録し、アプリケーションレベルとして配置します。

  4. 完了しました。

1. Messages.properties

すべてのJSF標準の変換および検証エラーメッセージは、「Messages.properties」ファイルに保存されます。このファイルは、jsf-api-2.x.jar、「javax aces\Messages.properties」から見つけることができます。次の図を参照してください。

jsf2-Custom-Validation-Error-Example-1

この「Messages.properties」ファイルの一部を参照してください

...
# ===================================================================
# Converter Errors
# ===================================================================
javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' could not be understood as a date.
javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' could not be understood as a date. Example: {1}
...
# ====================================================================
# Validator Errors
# ====================================================================
javax.faces.validator.LengthValidator.MAXIMUM={1}: Validation Error: Length is greater than allowable maximum of ''{0}''
javax.faces.validator.LengthValidator.MINIMUM={1}: Validation Error: Length is less than allowable minimum of ''{0}''
...

たとえば、
1. <f:validateLength minimum=”5″ maximum=”10″ />
最大長の検証に失敗した場合、JSFは「javax.faces.validator.LengthValidator.MAXIMUM」を取得します。
最小長の検証に失敗した場合、JSF 「javax.faces.validator.LengthValidator.MINIMUM」を取得します。

2. <f:convertDateTime pattern=”d-M-yyyy” />
日付の検証に失敗した場合、JSFは「javax.faces.converter.DateTimeConverter.DATE_detail」を取得します。

Note
どのキーがどのバリデータタグに一致するかわからない場合は、エラーメッセージを一度表示して「Messages.properties」と比較するだけで、オーバーライドするキーがわかります。

2. カスタムエラーメッセージ

MyMessage.properties」という名前のプロパティファイル(任意の名前を付けることができます)を作成し、メッセージキーとカスタムエラーメッセージをその中に入れます。 後で、このプロパティファイルをプロジェクトリソースフォルダーに配置します。

MyMessage.properties

javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' could not be understood as a date.
javax.faces.converter.DateTimeConverter.DATE_detail=Invalid date format.

javax.faces.validator.LengthValidator.MINIMUM=Minimum length of ''{0}'' is required.

次に、「javax.faces.validator.LengthValidator.MINIMUM」の検証エラーメッセージと「javax.faces.converter.DateTimeConverter.DATE_detail」の変換エラーメッセージをカスタマイズします。

Note
XXX_detailメッセージキーの場合、その親キー(要約メッセージ)もオーバーライドする必要があります。これは、後ろに「_detail」がないXXXです。それ以外の場合、JSFは新しいカスタムエラーメッセージを無視し、「Messages.properties」から標準エラーメッセージを取得し続けます。これはJSF 2.0のバグである可能性がありますか?

3. メッセージバンドルの登録

カスタムプロパティファイルを「faces-config.xml」に登録し、アプリケーションレベルとして配置します。

faces-config.xml


     
      
        com.example.MyMessage
      
     

4. Demo

JSFページで、<f:validateLength /><f:convertDateTime />の両方の検証を追加します。



    

        

Customize validation error message in JSF 2.0

Enter your username : Enter your DOB :

検証に失敗した場合は、ここでカスタムエラーメッセージを表示します。

jsf2-Custom-Validation-Error-Example-2

ソースコードをダウンロード

ダウンロード–JSF-2-Custom-Validation-Error-Message-Example.zip(11KB)