3

フォームバッキングオブジェクトのSpring検証中に使用されるmessages.propertiesのメッセージを取得できません。

app-config.xml:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
  <property name="basename" value="messages" />
</bean>

WEB-INF / classes / messages.properties:

NotEmpty=This field should not be empty.

フォームバッキングオブジェクト:

...
  @NotEmpty
  @Size(min=6, max=25)
  private String password;
...

BindingResultのすべてのエラーをループして、ObjectErrorのtoStringを出力すると、次のようになります。

Field error in object 'settingsForm' on field 'password': rejected value []; codes [NotEmpty.settingsForm.password,NotEmpty.password,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [settingsForm.password,password]; arguments []; default message [password]]; default message [may not be empty]

ご覧のとおり、デフォルトのメッセージは、「このフィールドは空であってはなりません」というメッセージではなく、「空ではない可能性があります」です。

messageSourceをコントローラーに挿入して出力すると、正しいメッセージが表示されます。messageSource.getMessage( "NotEmpty"、new Object [] {"password"}、 "default empty message"、null);

では、messages.propertiesを使用した検証が行われないのはなぜですか?Spring3.1.1を実行しています。ありがとう!

4

3 に答える 3

7

デフォルトでは、HibernateValidatorはすべてのメッセージをから取得します/WEB-INF/classes/ValidationMessages.properties 。SpringMessageSourceを介さずに、このファイルを直接読み取ります。

Springメッセージソースからの翻訳が必要な場合は、LocalValidatorFactoryBeanで翻訳を設定します。これには、mvc:annotation-drivenに依存するのではなく、ディスパッチャサーブレット内に検証Beanを手動で設定する必要があります。

于 2012-06-21T07:08:46.930 に答える
2

JSR 303検証を使用して任意のフィールドにカスタムメッセージを設定する場合は、プロパティファイルのメッセージのキーにBean名(LoginForm)とフィールド名(パスワード)を指定する必要があります。形式はCONSTRAINT_NAME.COMMAND_NAME.FIELD_NAMEです。

NotEmpty.loginform.password=This field should not be empty.
于 2012-06-21T09:04:37.360 に答える
1

@NotEmptyには、設定できるメッセージプロパティがあります。設定していないため、デフォルトのメッセージが使用されます。

@NotEmpty(message="{NotEmpty}")

あなたが探しているものをあなたに与えるべきです。

于 2012-06-21T03:13:26.540 に答える