Prima di tutto, vorrei spiegare che sto usando Spring MVC 3.1.1 e Hibernate validation 4.2.0. Uso le annotazioni di convalida per vari moduli nella mia applicazione Spring. Dal momento che la mia applicazione deve essere localizzato, sono stato utilizzando un pacchetto di risorse per i miei messaggi di convalida che assomiglia un po 'come questo:Come posso far visualizzare a Spring i diversi messaggi basati su bundle di convalida per lo stesso validatore su una classe?
# ValidationMessages.bundle
FieldMatch=Password and confirmation must match.
La definizione della classe corrispondente per questo messaggio appare così:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
})
public class RegistrationForm {
// ...
}
Ho impostato questo pacchetto di risorse personalizzate nel mio appContext.xml e i miei messaggi vengono visualizzati sul modulo senza alcun problema.
Ecco il mio dilemma, tuttavia. C'è un nuovo requisito che devo confermare più campi corrispondono. In questo momento sto solo confermando che due campi password corrispondono. Ora il mio requisito è che devo confermare anche l'indirizzo email. So che questo è uno stupido requisito, ma non posso cambiarlo. Così ora la definizione di classe sarà simile a questa:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
@FieldMatch(first = "email", second = "emailConfirmation")
})
public class RegistrationForm {
// ...
}
Chiaramente, il mio attuale pacchetto di risorse non funziona perché ho bisogno di due messaggi separati (uno per ogni partita). Ho provato a utilizzare message="{emails.must.match}"
e quindi a definire quel messaggio nel pacchetto di risorse, ma in realtà non mostra mai il messaggio, mostra solo il testo attuale {email.must.match}
.
Quindi, dopo tutto quello che spiega, la mia domanda è semplice: come posso fare in modo che ognuno di quei validatori FieldMatch
a livello di classe abbia un messaggio diverso che è definito in un pacchetto di risorse in modo che possa essere localizzato?
Grazie in anticipo per qualsiasi aiuto!
[EDIT] Per chi è curioso, this è il validatore FieldMatch
che sto utilizzando.
UPDATE 2012/05/23 Ecco gli altri definizione di fagioli hanno chiesto:
<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>
Questo mi ha messo sulla strada giusta. Il mio bundle in realtà non era denominato 'ValidationMessages.properties', ma invece' ValidationBundle.properties' - quando ho rinominato il file, tutto ha funzionato e ho ottenuto la stringa corretta. Saluti! –