8

I tried the steps from the answer here: Hibernate Validator, custom ResourceBundleLocator and Spring

But still just getting {location.title.notEmpty} as output instead of the message.

dispatcher-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

Form (Class Location)

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

What's going wrong here?

Community
  • 1
  • 1
dtrunk
  • 4,685
  • 17
  • 65
  • 109
  • I do not know if this could cause that problem, but make sure that the message properties file has an empty line as last line. – Ralph Feb 10 '12 at 22:22
  • nope that wasn't the problem, last empty line isn't needed – dtrunk Feb 10 '12 at 22:33

1 Answers1

14

Got it! :-)

I added the following bean instead the above mentioned two into my dispatcher-servlet.xml:

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

Then, in my validationMessages.properties I used the following syntax:

NotEmpty.location.title=My custom Message

I guess this is the reason: I used the Hibernate validation annotations (not the javax ones)

And for general the syntax of the messages file should look like

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

Hope this helps some other people out there ;-)

And to access the message from a spring controller just add @Autowired private MessageSource messageSource; as a class field and use the messageSource.getMessage methods. Because I'm just using one locale I used messageSource.getMessage( "NotEmpty.location.title", null, null )

dtrunk
  • 4,685
  • 17
  • 65
  • 109
  • Nice, but it works also for Hibernate validation annotations :) – darek Feb 11 '12 at 21:52
  • Yes, my first thought was it works only for hibernate validation annotations but it works for both - hibernate and javax. – dtrunk Feb 12 '12 at 10:57
  • It's not necessary to adjust the syntax when specifying the validator in , see http://stackoverflow.com/a/21508937/1672678 and http://stackoverflow.com/a/22655303/1672678. – anre Jun 22 '16 at 19:05
  • If you are using Spring Boot, you can take advantage of autoconfiguration by adding the following key to application.properties: spring.messages.basename=your/basename/messages –  Aug 11 '16 at 09:59