2012-02-10 16 views
7

Me trataron los pasos de la respuesta aquí: Hibernate Validator, custom ResourceBundleLocator and SpringUse mensajes de validación personalizada en Hibernate + Primavera

Pero todavía es sólo conseguir {location.title.notEmpty} como salida en lugar del mensaje.

despachador-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 (Clase Ubicación)

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

lo que va mal aquí?

+0

No sé si esto podría causar ese problema, pero asegúrese de que el archivo de propiedades del mensaje tenga una línea vacía como última línea. – Ralph

+0

no, ese no era el problema, la última línea vacía no es necesaria – dtrunk

Respuesta

13

¡Lo tengo! :-)

que añade la siguiente frijol en lugar de lo anterior menciona dos en mi dispatcher-servlet.xml:

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

Luego, en mis validationMessages.properties que utiliza la siguiente sintaxis:

NotEmpty.location.title=My custom Message 

supongo esta es la razón: utilicé las anotaciones de validación de Hibernate (no las de javax)

Y, en general, la sintaxis del archivo de mensajes debería verse como

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

Espero que esto ayude a otras personas por ahí ;-)

Y para acceder a los mensajes desde un controlador de primavera sólo tiene que añadir @Autowired private MessageSource messageSource; como un campo de clase y el uso de los métodos messageSource.getMessage. Como solo estoy usando una configuración regional que utilicé messageSource.getMessage("NotEmpty.location.title", null, null)

+0

Bueno, pero también funciona para las anotaciones de validación de Hibernate :) – darek

+0

Sí, lo primero que pensé fue que solo funciona para las anotaciones de validación de hibernación pero funciona para ambos: hibernate y javax. – dtrunk

+0

oh y el atributo de mensaje ya no es necesario ... – dtrunk

Cuestiones relacionadas