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

JSF Java Discussion :

Validation multi-champs sans binding


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Par défaut Validation multi-champs sans binding
    Bonjour à tous,

    Je ne sais pas si le titre est très parlant, mais je savais pas trop comment résumer le soucis en quelques mots. Que je vous détaille la chose. J'arrive à la phase de développement où je mets en place les "validators" pour être sur que les utilisateurs de mon application web ne fassent pas trop de bêtises avec les formulaires.

    J'utilise l'attribut "validator" des inputs pour définir des méthodes de validation au sein des mes backing beans, mais parfois, j'ai besoin que la validation prenne en compte plusieurs champs (pour un changement de mot de passe avec vérification par exemple). Là du coup, ça bloque.

    J'ai vu dans la discussion au sujet de la FAQ JSF une astuce pour faire cela : on ajoute un champ hidden a la fin du formulaire et c'est lui qui valide tout. Soucis : moi j'utilise pas de binding comme dans l'exemple proposé, je ne passe plus que par des values, le binding, je trouve ca un peu lourd avec les casts et tout et tout.

    En gros, mon code, ca donne :

    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
     
    <h:form>
        <t:message for="validation" />
     
        <t:panelGrid columns="2">
            <t:outputText value="New password"/>
            <t:inputSecret value="#{backingBean.newPass}" />
     
            <t:outputText value="Confirmation" />
            <t:inputSecret value="#{backingBean.confirmation}" />
        </t:panelGrid>
     
        <t:inputHidden id="validation" validator="#{backingBean.validation}" value="validation" />
        <t:commandButton value="Change" action="#{backingBean.change}" />
    </h:form>
    Et coté backing bean :

    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
     
    public class BackingBean
    {
     
        private String newPass, confirmation;
     
        public void validation(FacesContext fc, UIComponent comp,Object o)
        {
            if(newPass != confirmation)
            {
                throw new ValidatorException(new FacesMessage("Error"));
            }
        }
     
        public String change()
        {
            // on change le mot de passe
     
            return "done";
        }
     
        // getters et setters publics pour "newPass" et "confirmation"
     
    }
    Le soucis étant que dans la méthode "validation", il me dit que les attributs "newPass" et "confirmation" sont null, et ce même si je rentre des valeurs dans les champs. Par contre, si j'enleve la validation, dans ma méthode "change", c'est les bonnes valeurs que je retrouve.

    Je pense que cela vient du cycle JSF (du genre les "value" ne sont propagées qu'après les validations) mais n'étant pas expert de ce framework, je me tourne vers vous pour savoir si quelqu'un en saurait plus a ce sujet ?

    Je pourrais faire les vérifications dans la méthode "change", mais bon, il ne s'agirait plus d'une vraie validation, et surtout je ne suis pas sur que l'ajout de messages JSF serait pris en compte.

    Voila, si vous avez des idées (a part le binding si possible, car j'ai pas envie de tout refaire alors que tout marche bien a part ces validations pour le moment), je suis preneur. Merci d'avance.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Les valeurs sont nuls parce que la phae Update Model Values n'est pas encore invoqué à ce stade, les valeurs sont diponible que dans l'UIComponent, tu peux récupérer l'ui component en parcourant l'arbre des composants et cherchant l'id.

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Par défaut
    Merci beaucoup, cela marche parfaitement.

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

Discussions similaires

  1. Validation de saisie sans Binding ?
    Par yohann_ dans le forum Silverlight
    Réponses: 2
    Dernier message: 06/01/2011, 17h47
  2. Valider deux champ de formulaire sans aller côté serveur
    Par tiboudchou dans le forum Struts 2
    Réponses: 1
    Dernier message: 16/10/2007, 18h02
  3. JSP:Récupérer la valeur d'1 champ sans valider
    Par ze veritable farf dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 13/04/2006, 10h37
  4. Réponses: 3
    Dernier message: 15/03/2005, 12h22

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