3

Hibernate Validator を使用してフォームからの入力フィールドを検証する Spring MVC プロジェクトに取り組んでいます。私のプロジェクトは Maven ベースなので、次の依存関係を追加しました。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>4.1.0.Final</version>
    </dependency>

フォームの検証プロセスは正常に機能しますが、デフォルトのエラー メッセージをオーバーライドまたは国際化したいと考えています。

たとえば、デフォルトでは、@NotEmpty アノテーションを使用すると、「空ではない可能性があります」というメッセージが生成されます。このメッセージを自分のメッセージに置き換えるにはどうすればよいですか? 私はいくつかの解決策を試しました:

  • ID「messageSource」でSpring Beanを定義し、その「basenames」プロパティを設定する
  • プロジェクトのクラスパスに ValidationMessages.properties ファイルを作成する

しかし、デフォルトのメッセージがまだ表示されています...

ヒントはありますか?事前にt​​hx。

4

2 に答える 2

5

はい、できます。プロパティ ファイルからエラー メッセージを読み込むことができます。ただし、適切な形式のキーが必要です。のようにNotEmpty.ClassName.fieldName=fieldName Can not be empty

プロパティ ファイルに正確なクラス名とプロパティ名を指定するだけです。あなたのケースでは、他のすべてが完璧に見えます。

また、特定のタイプの検証アノテーションに対して、そのアノテーションを持つすべてのフィールドに共通のエラー メッセージを表示することもできます。お気に入りjavax.validation.constraints.NotNull=Notnull erro happened!

これがお役に立てば幸いです。乾杯。

于 2012-06-22T08:17:23.640 に答える
1

これは、検証のために与えられた、または使用されたすべての注釈の背後にある正確なプロパティ名を見つける方法を少し説明したものです。以下の手順を参照してください。

@Size(min = 1, max = 50, message = "Email size should be between 1 and 50")

{ message = "Email size should be between 1 and 50" } を検証タグから削除します。

これを行うと、注釈は次のようになります。

@Size(min = 1, max = 50)

コントローラー側で、フォームの送信時に呼び出されるメソッドをデバッグします。以下は、ユーザーが送信を押したときにリクエストを受け取る私のメソッドです。

public static ModelAndView processCustomerLoginRequest(IUserService userService,LoginForm loginForm, 
    HttpServletRequest request, HttpSession session, BindingResult result, String viewType, Map<String, LoginForm> model)

ここで、メソッドの最初の行にデバッグ ポイントを配置し、引数 "result" をデバッグします。

BindingResult result

デバッグ中に、コード配列にこのような文字列が見つかります。

Size.loginForm.loginId

次に、プロパティ ファイルでこの文字列を定義し、その文字列に対するメッセージを定義します。コンパイルして実行します。その注釈が検証されない場合は常に、そのメッセージが表示されます。

Size.loginForm.loginId=email shouldn't be empty.

基本的に、Spring は独自の文字列をプロパティ ファイル メッセージのキーとして作成します。上記のキーで

Size(@Size) = validation annotation name
loginForm = My Class Name
loginId = Property name in LoginForm class.

このメソッドの利点は、Spring Internationalization を使用している間も問題なく動作することです。言語が変わると、メッセージ ファイルが自動的に切り替わります。

于 2013-12-05T04:05:54.410 に答える