【发布时间】:2011-10-16 14:54:22
【问题描述】:
我正在尝试设置 Hibernate Validator 以使用来自 Spring MessageSource 的消息。我的messages-context.xml 中有以下设置:
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>WEB-INF/messages/messages</value>
<value>WEB-INF/messages/exceptions</value>
<value>WEB-INF/messages/fields</value>
<value>WEB-INF/messages/buttons</value>
<value>WEB-INF/messages/validation_errors</value>
</list>
</property>
</bean>
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource" />
</bean>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="en_GB" />
</bean>
我尝试了多种方法来将消息密钥传递给休眠验证器(包括和不包括 {},也没有指定自定义密钥 - 仅使用默认密钥:
@NotEmpty(message="validation.required.field")
@Length(max=255, message="{validation.too.long}")
private String firstName;
@NotEmpty(message="{validation.required.field}")
@Length(max=255, message="{validation.too.long}")
private String lastName;
@NotNull
@Past(message="{validation.must.be.past}")
private Date dateOfBirth;
@NotEmpty(message="{validation.required.field}")
@Length(max=255, message="{validation.too.long}")
private String email;
我的validation_errors_en_GB.properties 看起来像这样:
validation.required.field=this is a required field
validation.too.long=this field can only take {0} characters
validation.must.be.past=this date has to be in the past
javax.validation.constraints.NotNull.message=Custom message
但是,当验证空字段时,显示的消息是这样的:
First name validation.required.field
Last name {validation.required.field}
Date of birth may not be null
Email {validation.required.field}
无论出于何种原因,始终使用消息的键 - 永远不会查找实际消息。知道我哪里出错了吗?
谢谢,
罗素
【问题讨论】:
-
我正在使用:Spring 3.05、Hibernate-Validator 4.2.0.Final、Hibernate-Core 3.3.2.GA 和 Hibernate-Annotations 3.4.0.GA
-
我尝试使用较新版本的 hibernate-core 和注释,但在尝试创建 sessionFactory 时得到了
java.lang.IncompatibleClassChangeError: Implementing class,这表明版本之间存在某种不兼容 - 但是什么?有什么想法吗? -
大家提到如何配置spring来了解hibernate验证器和消息源,这里需要让hibernate知道选择springs消息源而不是自己的ValidationProperties文件
标签: hibernate spring-mvc localization validation