5

フォームバッキングオブジェクトが検証された後、FieldErrorのリストを含むBindingResultがあります。各FieldErrorにはdefaultMessageがあります。そのメッセージはどのように設定され、Spring MessageSourceを使用しないのはなぜですか?そのデフォルトのメッセージをSpringのMessageSourceから派生させたいのですが。

編集: エラーコードがFieldErrorオブジェクトに正しく設定されていることがわかります。これは、そのオブジェクトのデフォルトのメッセージであり、私のMessageSourceからのものではありません。たとえば、intであるフィールドに文字列を入力すると、messages.propertiesからメッセージを取得する必要があります。

typeMismatch=Invalid type was entered.

そのメッセージを取得できる唯一の方法は、FieldErrorオブジェクトを取得し、次のように手動でMessageSourceに渡すことです。

messageSource.getMessage(fieldError, null);  // This gets my message from messages.properties.
4

1 に答える 1

3

Validatorを使用している場合は、通常 ValidationUtils メソッドを使用して、 Validator 実装クラスの MessageSource でメッセージのキーを指定できます。Spring ドキュメントのセクション 6.2 に良い例があります。

JSR-303 Bean Validation などの Validator 以外のものを使用している場合、Spring は規則によってエラー コードを解決しようとします。

「郵便番号」という int フィールドを持つ「住所」というフォーム バッキング オブジェクトがあるとします。ユーザーが郵便番号フィールドに文字列を入力した場合、Spring はデフォルトでDefaultMessageCodesResolverを使用し、MessageSource で「typeMismatch.address.zipcode」というキーを探します。そのキーが見つからない場合は、「typeMismatch.zipcode」、「typeMismatch.int」、「typeMismatch」の順に試行します。

または、独自のMessageCodesResolverを実装できます。

于 2012-11-10T02:37:54.990 に答える