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

Hibernate Java Discussion :

Forcer la validation de tous les groupes [Validator]


Sujet :

Hibernate Java

  1. #1
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2004
    Messages : 754
    Points : 1 287
    Points
    1 287
    Par défaut Forcer la validation de tous les groupes
    Bonjour,

    Je bosse sur un projet JSF où, dans certains cas (passage d'un onglet à un autre par exemple) je cherche à faire des validations partielles de mon objet.
    J'utilise donc la notion de groupe telle que définit dans la JSR 303 §3.4.

    Par contre, j'aimerais systématiquement forcer la validation complète de mes objets au moment ou j'enregistre mes formulaires.

    Alors plutôt que de faire un appel à Validator.validate(Object o, Class<?>... groups) où je passerais l'ensemble des groupes déclarés pour tous les valider un à un, je préfèrerais faire un appel du style Validator.validate(Object o) où je ne passerai aucune classe à mon ellipse, mais où au lieu de ne valider que le groupe Default, je validerais l'ensemble des groupes.

    Bref, je sais que cette logique semble opposée à celle définit par la JSR, mais parfois on se limite un peu... Je suis peut d'être passé à côté d'une option qui permettrait justement de forcer la validation totale de mon objet.

    Est-ce que vous avez connaissance d'une telle option dans hibernate-validator, ou ma seule option est belle est bien celle à laquelle je pense : fournir explicitement le nom de tous les groupes à ma SaveAction pour déclencher la validation totale ?
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  2. #2
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2004
    Messages : 754
    Points : 1 287
    Points
    1 287
    Par défaut
    Les metadata !!! Merci à Jean-Michel Doudoux de m'avoir donné l'idée dans son super tutoriel Java !

    Je me suis écrit une méthode dédiée à la validation globale de mes objets. Dans cette méthode je récupère les metadata auxquelles à accès mon Validator, et je construis manuellement le jeu de groupes à valider. Je le passe ensuite à la méthode validate() de mon Validator. CQFD !

    Tous les objets que je valide étende une classe abstraite BaseEntity...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
            /*
             * Si la validation doit se faire sur tous les attributs quelque soit
             * leurs groupes, il faut construire la liste de tous les groupes
             * déclarés pour toutes les propriétés de la BaseEntity. Pour cela, on
             * récupère les metadonnées accessible au Validator, et on inspecte ces
             * metadonnées pour en extraire la liste des groupes présents dans les
             * règles de validation de ce BaseEntity;
             */
            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            Validator validator = factory.getValidator();
            BeanDescriptor beanDescriptor = validator.getConstraintsForClass(this
                    .getClass());
            Set<PropertyDescriptor> propsDescSet = beanDescriptor
                    .getConstrainedProperties();
     
            // On parcours l'ensemble des propriétés de la classe
            Set<Class<?>> groupsSet = new LinkedHashSet<Class<?>>();
            for (PropertyDescriptor propDesc : propsDescSet) {
                // et l'ensemble des contraintes sur chaque propriété
                for (ConstraintDescriptor<?> constraintDesc : propDesc
                        .getConstraintDescriptors()) {
                    // pour récupérer l'ensemble des groupes de validation
                    // déclarés pour chaque propriété
                    groupsSet.addAll(constraintDesc.getGroups());
                }
            }
     
            validator.validate(this, groupsSet.toArray(new Class<?>[0]));
    Voilà. Et merci de m'avoir lu
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/06/2008, 12h43
  2. [ActiveDirectory] Lister tous les groupes
    Par RaelRiaK dans le forum VB.NET
    Réponses: 5
    Dernier message: 15/02/2007, 18h31
  3. Tree Control develloper tous les groupes
    Par beb30 dans le forum MFC
    Réponses: 2
    Dernier message: 18/08/2006, 19h05
  4. [XSL]forcer l'application de tous les templates
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 23/05/2006, 10h06
  5. Réponses: 23
    Dernier message: 11/04/2006, 18h33

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