Во-первых, позвольте мне объяснить, что я использую Spring MVC 3.1.1 и Hibernate validation 4.2.0. Я использую аннотации проверки для различных форм в приложении Spring. Поскольку мое приложение должно быть локализовано, я использовал набор ресурсов для моих сообщений проверки, которая выглядит примерно так:Как я могу сделать Spring для разных валидационных сообщений для одного и того же валидатора класса?
# ValidationMessages.bundle
FieldMatch=Password and confirmation must match.
Соответствующее определение класса для этого сообщения выглядит следующим образом:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
})
public class RegistrationForm {
// ...
}
У меня есть этот настраиваемый набор ресурсов, созданный в моем appContext.xml, и мои сообщения отображаются в форме без каких-либо проблем.
Вот моя дилемма. Существует новое требование, что я должен подтвердить соответствие полей. Сейчас я просто подтверждаю, что совпадают два поля пароля. Теперь мое требование состоит в том, что я должен подтвердить адрес электронной почты тоже. Я знаю, что это глупое требование, но я не могу его изменить. Так что теперь определение класса будет выглядеть следующим образом:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
@FieldMatch(first = "email", second = "emailConfirmation")
})
public class RegistrationForm {
// ...
}
Очевидно, что мой текущий набор ресурсов не будет работать, потому что мне нужно два отдельных сообщения (по одному для каждого матча). Я пробовал использовать message="{emails.must.match}"
, а затем определял это сообщение в наборе ресурсов, но на самом деле он никогда не показывает сообщение, он просто показывает фактический текст {email.must.match}
.
Итак, после всего, что объясняет, мой вопрос прост: как я могу сделать каждый из этих валидаторов FieldMatch
на уровне класса, есть другое сообщение, которое определено в наборе ресурсов, чтобы его можно было локализовать?
Заранее благодарим за любую помощь!
[EDIT] Для тех, кто интересуется, this является валидатором FieldMatch
, который я использую.
UPDATE 5/23/2012 Вот другие определения боба попросил:
<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>
Это поставило меня на правильный путь. На самом деле мой пакет не назывался 'ValidationMessages.properties', а вместо этого' ValidationBundle.properties' - когда я переименовал файл, все работало, и я получил нужную строку. Ура! –