まず、Spring MVC 3.1.1 と Hibernate validation 4.2.0 を使用していることを説明させてください。Spring アプリケーションのさまざまなフォームに検証アノテーションを使用しています。アプリケーションをローカライズする必要があるため、検証メッセージに次のようなリソース バンドルを使用しています。
# ValidationMessages.bundle
FieldMatch=Password and confirmation must match.
このメッセージに対応するクラス定義は次のようになります。
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
})
public class RegistrationForm {
// ...
}
このカスタム リソース バンドルを appContext.xml に設定しましたが、メッセージは問題なくフォームに表示されています。
ただし、ここに私のジレンマがあります。より多くのフィールドが一致することを確認する必要があるという新しい要件があります。現在、2 つのパスワード フィールドが一致していることを確認しています。私の要件は、メールアドレスも確認する必要があるということです。これがばかげた要件であることはわかっていますが、変更することはできません。したがって、クラス定義は次のようになります。
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
@FieldMatch(first = "email", second = "emailConfirmation")
})
public class RegistrationForm {
// ...
}
明らかに、現在のリソース バンドルは機能しません。これは、2 つの個別のメッセージ (一致ごとに 1 つ) が必要だからです。リソースバンドルでそのメッセージを使用して定義しようとしましmessage="{emails.must.match}"
たが、実際にはメッセージが表示されることはなく、実際のテキストが表示されるだけです{email.must.match}
。
以上の説明の後、私の質問は単純です。FieldMatch
クラス レベルのこれらのバリデーターのそれぞれに、リソース バンドルで定義された異なるメッセージを持たせ、ローカライズできるようにするにはどうすればよいでしょうか?
助けてくれてありがとう!
[編集] 好奇心旺盛な人のために、これはFieldMatch
私が使用しているバリデーターです。
2012 年 5 月 23 日更新 他の人が求めた Bean 定義は次のとおりです。
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>ErrorBundle</value>
<value>ForgotPasswordBundle</value>
<!-- etc etc -->
</list>
</property>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"/>
</bean>