Не удается заставить Hibernate Validator работать с Spring MessageSource

Я пытаюсь настроить 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;

My 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}

Для по какой-то причине всегда используется ключ сообщения - фактическое сообщение никогда не просматривается. Есть идеи, где я ошибаюсь?

Спасибо,

Рассел

6
задан Russell 30 July 2011 в 17:30
поделиться