Lassen Sie mich zuerst erklären, dass ich Spring MVC 3.1.1 und Hibernate Validierung 4.2.0 verwende. Ich verwende Validierungsannotationen für verschiedene Formulare in meiner Spring-Anwendung. Da meine Anwendung lokalisiert werden muss, habe ich schon ein Ressourcenpaket für meine Prüfungsmeldungen verwenden, die ein wenig wie folgt aussieht:Wie kann ich Spring zeigen verschiedene Validierung Bundle-basierte Nachrichten für den gleichen Prüfer in einer Klasse?
# ValidationMessages.bundle
FieldMatch=Password and confirmation must match.
Die entsprechende Klassendefinition für diese Meldung wie folgt aussieht:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
})
public class RegistrationForm {
// ...
}
Ich habe dieses benutzerdefinierte Ressourcenpaket in meiner appContext.xml eingerichtet, und meine Nachrichten werden ohne Probleme im Formular angezeigt.
Hier ist mein Dilemma jedoch. Es gibt eine neue Anforderung, dass ich bestätigen muss, dass mehr Felder übereinstimmen. Im Moment bestätige ich nur, dass zwei Passwortfelder übereinstimmen. Jetzt ist meine Anforderung, dass ich E-Mail-Adresse auch bestätigen muss. Ich weiß, das ist eine dumme Forderung, aber ich kann es nicht ändern. So, jetzt die Klassendefinition wird wie folgt aussehen:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
@FieldMatch(first = "email", second = "emailConfirmation")
})
public class RegistrationForm {
// ...
}
ist klar, mein aktuelles Ressourcenpaket wird nicht funktionieren, weil ich brauche zwei separate Nachrichten (eine für jedes Spiel). Ich habe versucht, message="{emails.must.match}"
zu verwenden und dann diese Nachricht in dem Ressourcenbündel zu definieren, aber es zeigt die Nachricht nie tatsächlich an, es zeigt nur den tatsächlichen Text {email.must.match}
.
Also nach all dem Erklären ist meine Frage einfach: Wie kann ich jedem dieser FieldMatch
Validatoren auf der Klassenebene eine andere Nachricht geben, die in einem Ressourcenbündel definiert ist, damit es lokalisiert werden kann?
Vielen Dank im Voraus für jede Hilfe!
[EDIT] Für die Neugierigen, this ist der FieldMatch
Validator, den ich benutze.
UPDATE 2012.05.23 Hier ist die Bohne Definition andere haben gefragt:
<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>
Dies setzte mich auf den richtigen Weg. Mein Bundle hatte eigentlich nicht den Namen "ValidationMessages.properties", sondern "ValidationBundle.properties". Als ich die Datei umbenannte, funktionierte alles und ich bekam die richtige Zeichenfolge. Prost! –