1

spring 3 mvc と hibernate バリデーターを使用してフォーム オブジェクトを検証するプロジェクトがあります。

私は春のドキュメントに従います

私のコントローラーでは、bindingresult を取得できますbindingresult.hasErrors() == true

ReloadableResourceBundleMessageSourceエラーメッセージのバインディングを行うために使用します。
私の質問は 、jsp Web ページでより柔軟なエラー メッセージを表示することは可能ですか?

たとえば、「アプリ名UserEnteredAppNameは無効です。サイズは2から255の間である必要があります」と言いたいです。

私の message.property では、次のように定義します。

Size.appNameForm.itemName=the app name {What Should I do in this brace?} is not valid. The size should be between {1} and {2}

{1} と {2} は '2' と '255' に補間できます。しかし、補間されたメッセージで UserEnteredAppName を取得するにはどうすればよいですか?

以下は私のフォームクラスとコントローラークラスです:

私のコントローラークラス:

@RequestMapping(value="foo.htm")
public String handleAppNameFormSubmit(@Valid @ModelAttribute("appNameForm") AppNameForm form, BindingResult result){
}

私のフォームクラス:

public class AppNameForm implements IForm{
    @NotEmpty
    @Size(min = 1, max = 255)
    private String itemName;
    ....
}

ヒントが得られるリンクをいくつか見つけました。

例: Hibernate Validator でメッセージ パラメータを動的に解決するにはどうすればよいですか?

しかし、jsr303実装を使用するSpring MVCとSpring Controllを使用しています.hibernateのデフォルトValidatorImplを拡張して、カスタムバリデータを使用する方法を見つけることができません。

私が考えている解決策は、UserEnteredAppName を bindingResult に拒否するカスタム バリデータを使用できることです。出来ますか?または別の方法を見つける必要がありますか?

ありがとうアンドリュー

4

1 に答える 1

1

リリース 4.2 の時点で、Hibernate Validator はValueFormatterMessageInterpolatorを提供します。これは、要件を満たす新しいメッセージ インターポレーターです。

そのインターポレーターを使用すると、プレースホルダーを使用して検証済みの値を参照できます${validatedValue}。次のように適用するフォーマット文字列を指定することもできます:${validatedValue:[format string]}たとえば${validatedValue:%1$ty}、検証された値が日付の場合。

このインターポレーターの使用例は、Hibernate Validatorリファレンス ガイドに記載されています。

于 2011-08-01T18:46:56.260 に答える