IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

declarer des contraintes d'annotations en xml


Sujet :

Spring Java

  1. #1
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 67
    Points : 48
    Points
    48
    Par défaut declarer des contraintes d'annotations en xml
    bonjour,

    l'utilisation des annotations dans le code java est tres pratique, pour des annotations statiques (attributs statique).

    Cependant dans certains cas il s'avere pratique d'utiliser les annotations dans un context dynamic (via api, xml, ...).

    Par exemple, l'annotation @Pattern contient un attribut regex.
    En utilisant l'annotation dans le code java, l'attribut regex est static.
    Si je souhaite mettre dans regex un attribut dynamic (venant d'un property), je suis bloqué.

    J'ai trouvé le moyen via l'api d"hibernate-validator de créer dynamiquement une constrainte d'annotation sur un attribut .

    Pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    final MyPojo myPojo = new MyPojo();
            final PatternDef pdef = new PatternDef();
            pdef.regexp(".+@.+\\.[a-z]+");
     
            final ConstraintMapping mapping = new ConstraintMapping();
            mapping.type(MyPojo.class).property("email2", ElementType.FIELD).constraint(pdef).valid();
     
            final HibernateValidatorConfiguration config = Validation.byProvider(HibernateValidator.class).configure();
            config.addMapping(mapping);
            final ValidatorFactory factory = config.buildValidatorFactory();
            final Validator v = factory.getValidator();
    Ce code permet donc d'ajouter dynamiquement une annotation @Pattern sur l'attribut email2 de la classe myPojo.

    Je pense qu'il est possible en spring de faire la meme chose .
    Mais impossible de trouver comment.
    Je pense qu'il faut utiliser la methode setValidationPropertyMap de la classe LocalValidatorFactoryBean.


    Une idée ?

    Merci

  2. #2
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    En effet, il est possible d'utiliser la validation JSR 303 avec Spring.

    Pour cela, il faut bien déclarer un bean LocalValidatorFactoryBean dans la conf de Spring. Il faut aussi ajouter hibernate-validator dans tes librairies (si tu choisis cette implémentation de la JSR 303 : Spring ne propose pas sa propre implémentation).

    De mémoire, si tu es en Spring MVC, il faut alors il faut ajouter une annotation @Valid au niveau de ton contrôleur Spring (comme un @ModelAttribute).

    Voila. J'espère avoir répondu à ta question.

  3. #3
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    merci pour la reponse

    j'ai en effet un context spring confirmant ce que tu dis:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <bean id="messageInterpolator" class="com.bnppf.ssc.imb.pe.validator.MyMessageInterpolator" />
     
    	<bean id="validatorFactory" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    		<property name="messageInterpolator" ref="messageInterpolator" />
    		<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
    		<!-- <property name="validationPropertyMap" ref="" /> -->
     
    	</bean>

    Par contre , pour le probleme d'attribut dynamic d'une annotation,
    je pensais , peut-etre, adapater le ConstraintValidator de l'annotation en passant par le ConstraintValidatorFactory de LocalValidatorFactoryBean.

    Bonne piste ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    Si j'ai bien compris tu veux changer le constraintValidator de l'annotation @Pattern.

    Dans ce cas, ça revient en fait à créer ta propre annotation de validation @monPatternAMoiQuilEstTropBien avec son validator monPatternAMoiQuilEstTropBienValidator, car tu ne pourras pas changer le constraintValidator qui est appliqué sur l'annotation @Pattern.

    Par contre tu peux utiliser le validator de @Pattern pour faire ton propre validator.

    Cette méthode me parait être une bonne méthode, pas trop coûteuse (car fait sa propre annotation de validation, c'est plutôt facile), sauf si tu veux généraliser le principe de paramètre dynamique à plusieurs annotations. Dans ce cas, écrire ton propre LocalValidatorFactoryBean est peut-être plus judicieux. Par contre ce n'est pas le même boulot (plus dur, plus long, plus difficile à tester)

    Par contre, je ne suis pas sûr que tu sois obligé d'indiquer le paramètre "providerClass" , ni de ré-implémenter ton propre messageInterpolator (sauf si tu y fait quelque chose de spécifique).

    J'espère avoir répondu à ta question.

Discussions similaires

  1. declarer des taglib dans web.xml
    Par khaigo dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 08/12/2009, 10h37
  2. heritage des contraintes
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 30/04/2004, 12h04
  3. Affichage des contraintes
    Par nicobouboufr dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 17/03/2004, 09h21
  4. [debutant] preservation des espace dans un fichier xml
    Par Eric B dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 03/09/2003, 09h43
  5. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo