Comment utiliser les annotations de validation au Printemps avec le message d'erreur obtenu à partir d'un fichier de propriétés?
Je suis un Printemps débutant.
- Je configurer la validation dans mon domaine la classe comme ceci:
public class Worker {
@NotNull(message="Name must be input")
@Size(min=1,max=50, message="Name must not exceed 50 characters")
private String name;
...
}
Voici le fichier jsp:
<form:input path="code" readonly="false" />
<font color="red"><form:errors path="code" />
Et le code du contrôleur:
@RequestMapping(value="/test",method=RequestMethod.POST)
public void form(@Valid Worker worker, BindingResult result) {
if (result.hasErrors()) {
return;
}
...
Il fonctionne, mais comment puis-je remplacer "Nom ne doit pas dépasser 50 caractères" avec un peu de texte (comme travailleur.nom.overflow) dans mon messageSource? Peut-je ajouter un messageResolver en BindingResult?
Tous les résultats de la recherche semble dire sur l'écriture d'une classe de validation personnalisée, mais je veux utiliser les annotations pour l'instant. Je suis assez sûr qu'il y a un moyen, parce que dans cette question quelqu'un a réussi à le faire.
OriginalL'auteur Hoàng Long | 2011-04-26
Vous devez vous connecter pour publier un commentaire.
Dire hibernate validator de faire une recherche sur un code de mettre la valeur de message dans des accolades. par exemple,
@NotNull(message="{worker.name.NotNull}"
puis mettre la traduction en ValidationMessages.propriétés de la racine de votre classpath. (/WEB-INF/classes, dossier de ressources dans maven, etc.)Le programme de validation de la mise en œuvre ressemble à ceux-ci de manière autonome sur son propre, et ils vont sur le BindingResult déjà traduit par le message par défaut. Qui se passe en dehors du Ressort messagesource. Vous pourriez en théorie substituer LocalValidatorFactory fève de mettre le validateur du message de sortie sur les Erreurs de l'objet que le code et ensuite laisser les accolades off dans l'annotation, de sorte que les Hibernate Validator passe à travers. Le code source qui transforme la JSR-303 ConstraintViolations le printemps des Erreurs est assez simple à lire et à étendre. Il met juste le nom de l'annotation du code, les propriétés des annotations comme args, puis le responsable de la validation de la traduction que le message par défaut.
Pouvez le voir ici:
https://src.springframework.org/svn/spring-framework/trunk/org.springframework.context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java
Modifier pour la question en commentaire:
Vous pouvez ajouter un
javax.validation.MessageInterpolator
à votrejavax.validation.Configuration
pour lui dire de rechercher des messages dans d'autres fichiers de propriétés. Si vous utilisez le Printemps LocalValidatorFactory bean il a un setMessageInterpolator que vous pouvez utiliser pour injecter un.Pour la mise en veille prolongée, le fournisseur de la mise en œuvre est:
http://docs.jboss.org/hibernate/validator/4.1/api/org/hibernate/validator/messageinterpolation/ResourceBundleMessageInterpolator.html
désolé pour mon erreur, j'ai raté la partie sur la mise ValidationMessages.propriétés dans le chemin de classe. Je serais très reconnaissante si vous pouvez me montrer comment faire pour modifier l'emplacement par défaut?
Bien sûr, voir édité répondre
De toute façon, vous pouvez être plus précis sur l'évolution de la propriété de l'emplacement du fichier? Je suis en utilisant le printemps, mais votre explication sons comme le grec pour moi!
localValidatorFactoryBean.setMessageInterpolator(nouveau ResourceBundleMessageInterpolator(nouveau AggregateResourceBundleLocator(Tableaux.asList("mon.package.Monfichier", "mon.d'autres.package.AnotherFileName"))));
OriginalL'auteur Affe
C'est un peu l'explication de problème.
Maintenant supprimer { message = "la taille du Courriel doit être comprise entre 1 et 50" } à partir de la validation de la balise.
Après avoir fait cela, votre annotation sera comme ceci.
Maintenant au contrôleur côté de débogage de la méthode qui est appelée lors de la soumission du formulaire. Ci-dessous est ma méthode qui est la réception de la demande lorsque l'utilisateur clique sur soumettre.
Maintenant, placez un point de débogage à la première ligne de la méthode et de débogage de l'argument "résultat".
Tout dubugging, vous trouverez une chaîne comme celle-ci dans les codes de tableau.
Maintenant de définir cette chaîne dans votre fichier de propriétés et un message à l'encontre de cette chaîne. La compilation et l'exécution. Ce message sera affiché à chaque fois que cette annotation ne serait pas validé.
Fondamentalement printemps fait sa propre chaîne de clé de son fichier de propriété message. Dans la clé ci-dessus
OriginalL'auteur Shan Arshad