Используйте пользовательские сообщения проверки в Hibernate + Spring - PullRequest
7 голосов
/ 10 февраля 2012

Я попробовал шаги из ответа здесь: Hibernate Validator, пользовательский ResourceBundleLocator и Spring

Но все равно просто получаю {location.title.notEmpty} в качестве вывода вместо сообщения.

диспетчер-servlet.xml

<bean name="validator"
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource">
        <ref bean="resourceBundleLocator"/>
    </property>
</bean>

<bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>/WEB-INF/validationMessages</value>
        </list>
    </property>
</bean>

/ WEB-INF / validationMessages.properties:

location.title.notEmpty=My custom message

Форма (Расположение класса)

@NotEmpty( message = "{location.title.notEmpty}" )
private String title;

Что здесь не так?

1 Ответ

13 голосов
/ 12 февраля 2012

Понял! : -)

Я добавил следующий боб вместо вышеупомянутых двух в мой dispatcher-servlet.xml:

  <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="/WEB-INF/validationMessages" />
  </bean>

Затем в моих validationMessages.properties я использовал следующий синтаксис:

NotEmpty.location.title=My custom Message

Полагаю, в этом причина: я использовал аннотации валидации Hibernate (а не javax)

И вообще синтаксис файла сообщений должен выглядеть как

[ConstraintName].[ClassName].[FieldName]=[Message]

Надеюсь, это поможет некоторым другим людям; -)

А чтобы получить доступ к сообщению от контроллера пружины, просто добавьте @Autowired private MessageSource messageSource; в качестве поля класса и используйте методы messageSource.getMessage. Поскольку я использую только одну локаль, я использовал messageSource.getMessage( "NotEmpty.location.title", null, null )

...