annotation en fonction de Printemps bean validation
Je recherche une annotation d'une approche fondée sur la validation des beans Spring en utilisant le printemps des modules. Dans ce tutoriel, la suite de haricot (getters et setters omis) est utilisé comme un exemple:
public final class User {
@NotBlank
@Length(max = 80)
private String name;
@NotBlank
@Email
@Length(max = 80)
private String email;
@NotBlank
@Length(max = 4000)
private String text;
}
Le message d'erreur qui est utilisé si une règle de validation est désobéi doivent suivre le format suivant:
bean-class.bean-propery[validation-rule]=Validation Error message
Exemples pour la classe indiquée ci-dessus comprennent:
User.email[not.blank]=Please enter your e-mail address.
User.email[email]=Please enter a valid e-mail address.
User.email[length]=Please enter no more than {2} characters.
Le fait que les clés de message contient le nom de la classe présente un couple de problèmes:
- Si la classe est renommé, le message clés doivent aussi être modifiés
- Si j'ai une autre classe (par ex. une Personne) avec un e-mail de la propriété qui est validé à l'identique de l'Utilisateur.e-mail, j'ai besoin de dupliquer les messages, par exemple
Personne.e-mail[pas.blanc]=Veuillez entrer votre adresse e-mail.
Personne.e-mail[email]=Veuillez entrer une adresse e-mail valide.
Personne.e-mail[longueur]=Veuillez entrer plus de {2} caractères.
En fait, la documentation prétend qu'il est possible de configurer un message par défaut pour une règle donnée (par exemple, @e-Mail):
email=email address is invalid
Ce message par défaut doit être utilisé si un bean message propre de la règle ne peut pas être trouvé. Cependant, mon expérience est que cela ne fonctionne tout simplement pas.
Un autre mécanisme pour éviter de dupliquer les messages est de passer la clé de la message d'erreur à la règle d'annotation. Supposons, par exemple, j'ai défini le suivant message d'erreur par défaut pour l'adresse Email de la règle
badEmail=Email address is invalid
Ce message doit être utilisé que si je annoter les biens comme ceci:
@Email(errorCode="badEmail")
private String email;
Cependant, j'ai essayé ceci, et encore une fois, il a juste ne semble pas fonctionner. Quelqu'un a trouvé un moyen d'éviter la duplication des messages d'erreur lors de l'utilisation de ce cadre de validation?
OriginalL'auteur Dónal | 2008-09-29
Vous devez vous connecter pour publier un commentaire.
J'ai pris un coup d'oeil rapide à la BeanValidator API, et il semble que vous pourriez vouloir essayer le errorCodeConverter propriété.
Vous devez mettre en place votre propre ErrorCodeConverter, ou utiliser l'une des implémentations?
Remarque: configurationLoader est un autre bean défini dans le fichier de configuration XML utilisé dans le tutoriel
Exemple converter:
Maintenant les propriétés devrait fonctionner:
Hi Ne - j'ai téléchargé le code source du tutoriel site que vous avez mentionné, et configurationLoader est déjà l'une des haricots définis dans leur configuration xml. Quand je rentre à la maison et de regarder le code que j'ai écrit, je peux mettre à jour cet affichage.
Le configurationLoader de la fève de tutoriel est de type org.springmodules.la validation.haricot.conf.loader.annotation.AnnotationBeanValidationConfigurationloader
Merci pour pour en revenir à moi, bien obligé.
OriginalL'auteur toolkit
Printemps de validation n'ont un ErrorCodeConverter qui fait cela:
org.springmodules.la validation.haricot.convertisseur de.KeepAsIsErrorCodeConverter
Lorsqu'il est utilisé, le regroupement de ressources sera vérifiée pour les codes suivants:
[code d'erreur.commandBeanName.fieldName, errorCode.fieldName, errorCode.fieldClassName, errorCode]
formulaire de backing bean.
Donc par exemple si j'ai un haricot qui est référencé dans le modèle par la touche "formBean" et le champ votre adresse de courrier électronique de type java.lang.La chaîne ne contient pas une adresse e-mail, ce qui provoque le code d'erreur e-mail. Le framework de validation va tenter de résoudre le message suivant des codes:
[email.formBean.e-mail, e-mail.e-mail, e-mail.java.lang.Chaîne, email]
Si le code d'erreur est remplacé par le code d'erreur "badEmail" comme ceci:
@Email(errorCode="badEmail")
Les messages des codes que le cadre va essayer de résoudre seront:
[badEmail.formBean.emailAddress, badEmail.emailAddress, badEmail.java.lang.Chaîne, badEmail]
Je voudrais vous suggérons de garder la errodCode le même. Ainsi, un message peut être utilisée pour tous les champs qui ont ce code d'erreur associé avec eux. Si vous avez besoin d'être plus précis avec le message d'un certain champ, vous pouvez ajouter un message à la ressource faisceaux avec le code errorCode.commandBeanName.champ.
OriginalL'auteur Rian
Ajouter le suivant haricots dans votre
applicationContext.xml
fichier.OriginalL'auteur VHS