Primero, déjenme explicarles que estoy usando Spring MVC 3.1.1, y la validación de Hibernate 4.2.0. Estoy usando anotaciones de validación para varios formularios en mi aplicación Spring. Desde mi aplicación necesita ser localizado, he estado usando un paquete de recursos para mis mensajes de validación que se ve algo como esto:¿Cómo puedo hacer que Spring muestre diferentes mensajes de validación basados en paquetes para el mismo validador en una clase?
# ValidationMessages.bundle
FieldMatch=Password and confirmation must match.
La definición de la clase correspondiente para este mensaje tiene el siguiente aspecto:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
})
public class RegistrationForm {
// ...
}
Tengo este conjunto de recursos personalizado configurado en mi appContext.xml, y mis mensajes se muestran en el formulario sin ningún problema.
Aquí está mi dilema, sin embargo. Hay un nuevo requisito que debo confirmar que coinciden más campos. Ahora mismo estoy confirmando que coinciden dos campos de contraseña. Ahora mi requisito es que también tengo que confirmar la dirección de correo electrónico. Sé que este es un requisito tonto, pero no puedo cambiarlo. Así que ahora la definición de clase se verá así:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
@FieldMatch(first = "email", second = "emailConfirmation")
})
public class RegistrationForm {
// ...
}
Claramente, mi paquete de recursos actual no va a funcionar porque necesito dos mensajes independientes (uno para cada partido). Intenté usar message="{emails.must.match}"
y luego definir ese mensaje en el paquete de recursos, pero en realidad nunca muestra el mensaje, solo muestra el texto real {email.must.match}
.
Entonces, después de todo eso, mi pregunta es simple: ¿Cómo puedo hacer que cada uno de esos validadores FieldMatch
en el nivel de clase tenga un mensaje diferente que esté definido en un paquete de recursos para que pueda ser localizado?
¡Gracias de antemano por cualquier ayuda!
[EDITAR] Para los curiosos, this es el validador FieldMatch
que estoy usando.
ACTUALIZACIÓN 5/23/2012 Esta es la definición de frijol otros han pedido:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>ErrorBundle</value>
<value>ForgotPasswordBundle</value>
<!-- etc etc -->
</list>
</property>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"/>
</bean>
Esto me puso en el camino correcto. Mi paquete en realidad no se llamaba 'ValidationMessages.properties' sino 'ValidationBundle.properties' - cuando renombré el archivo, todo funcionó y obtuve la cadena adecuada. ¡Aclamaciones! –