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 :

UIInput null à la validation


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Par défaut UIInput null à la validation
    Bonjour à tous,

    Je découvre progressivement JSF depuis quelques temps et je souhaiterais faire une validation sur 2 champs : "email" et "emailConfirmation".

    Pour cela j'ai suivi quelques exemples trouvés sur le net que vous trouverez ci-dessous.

    A savoir que :
    Le backbean est en @RequestScope
    Mon form est en prependId = false

    Le problème:

    Lorsque je soumets mon formulaire, lorsque le validator sameEmailValidator est appelé, une NullPointerException est lancée lors de l'utilisation du UIInput récupéré (qui est donc null...).
    Je ne comprends pas pourquoi ce null sur le composant email. Le validator est pourtant appelé par le champs emailConf situé plus loin dans l'arborescence de composants.

    Pourtant, le système a fonctionné à un moment (j'ai surement touché à quelque chose, mais il ne me semblait pas...), la validation renvoyait le message d'erreur adapté, puis si l'input était à nouveau non-valide, la NullPointerException se lançait (donc après une première validation "réussi").

    Mes inputs (parmi d'autres situés avant et après) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <h:outputLabel for="email" value="Email :" />
    <h:inputText rendererType="email" id="email" value="#{validationFormController.email}"
                      required="true" requiredMessage="Email obligatoire">
           <f:validator validatorId="emailValidator" />
    </h:inputText>
    <h:message for="email" ... />
     
    <h:outputLabel for="emailConf" value="Confirmer l'email :" />
    <h:inputText rendererType="email" id="emailConf" value="#{validationFormController.emailConf}"
                      required="true" requiredMessage="Veuillez confirmer votre email">
    <f:validator validatorId="sameEmailValidator" />
    </h:inputText>
    <h:message for="emailConf" ... />
    Ma méthode validate() de mon Validator SameEmailValidator :
    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
        public void validate(FacesContext context, UIComponent confEmailComponent, Object value) throws ValidatorException {
     
            String confEmail = (String) value;
     
            // The other component must have email as ID.
            // Ok if only form is prepend = false
            UIComponent emailComponent = context.getViewRoot().findComponent("email");
            System.out.println("emailComponent : " + emailComponent.getId()); // NULL here!
            String email = (String) ((UIInput) emailComponent).getValue();
     
            if (confEmail != null || !confEmail.isEmpty()) {
     
                boolean same = confEmail.equals(email);
                if (!same) {
                    FacesMessage message = new FacesMessage("Les adresses emails ne correspondent pas.");
                    message.setSeverity(FacesMessage.SEVERITY_ERROR);
                    throw new ValidatorException(message);
                }
            }
        }
    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour,
    Peut on voir le contenu de tout ton fichier xhtml ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Par défaut
    Hi,

    Actually, I found another may to achieve the validation and I edited my code, it's no more the same.

    I use a postValidation event with a listener to process the "SameEmail" validation. I have only unset the sameEmailValidator from the 2nd component and added the listener.

    I would rather use a basic validator as asked in the first post.

    Here is the xtml:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:p="http://primefaces.org/ui"
          xmlns:f="http://java.sun.com/jsf/core">
        <h:head>
            <title>Test for validation</title>
            <h:outputStylesheet library="css" name="main.css" />
        </h:head>
        <h:body>
     
            <div id="login-form">
                <p:focus /> 
                <h:form id="form">
                    <fieldset>
                        <legend>
                            <h3><h:outputText value="Se connecter"/></h3>
                        </legend>
     
                        <div id="login-input">
                            <h:panelGrid id="panel" columns="3" border="0" columnClasses="td-label, td-inputText, td-validation">
     
                                <f:event listener="#{validationFormController.validateSamePasswordAndEmail}" type="postValidate" />
     
                                <h:outputLabel for="nom" value="Nom :" />
                                <h:inputText id="nom" value="#{validationFormController.nom}"
                                             required="true" requiredMessage="Nom obligatoire">
                                    <f:ajax event="blur" render="nom-messages" />
                                </h:inputText>
                                <h:message id="nom-messages" for="nom" styleClass="validationMessage" errorClass="errorMessage" infoClass="infoMessage"
                                           warnClass="warnMessage" >
                                </h:message>
     
                                <h:outputLabel for="prenom" value="Prenom :" />
                                <h:inputText id="prenom" value="#{validationFormController.prenom}"
                                             required="true" requiredMessage="Prenom obligatoire" >
                                    <f:ajax event="blur" render="prenom-messages" />
                                </h:inputText>
                                <h:message id="prenom-messages" for="prenom" styleClass="validationMessage" errorClass="errorMessage" infoClass="infoMessage"
                                           warnClass="warnMessage" />
     
     
                                <h:outputLabel for="email" value="Email :" />
                                <h:inputText rendererType="email" id="email" value="#{validationFormController.email}"
                                             required="true" requiredMessage="Email obligatoire">
                                    <f:validator validatorId="emailValidator" />
                                    <f:ajax event="blur" render="email-messages" />
                                </h:inputText>
                                <h:message id="email-messages" for="email" styleClass="validationMessage" errorClass="errorMessage" infoClass="infoMessage"
                                           warnClass="warnMessage" />
     
                                <h:outputLabel for="emailConf" value="Confirmer l'email :" />
                                <h:inputText rendererType="email" id="emailConf" value="#{validationFormController.emailConf}"
                                             required="true" requiredMessage="Veuillez confirmer votre email">
                                    <f:ajax event="blur" render="emailConf-messages" />
                                </h:inputText>
                                <h:message id="emailConf-messages" for="emailConf" styleClass="validationMessage" errorClass="errorMessage" infoClass="infoMessage"
                                           warnClass="warnMessage" />
     
                                <h:outputLabel for="password" value="Password :" />
                                <h:inputSecret rendererType="" id="password" value="#{validationFormController.password}"
                                               required="true" requiredMessage="Password obligatoire" >
                                    <f:validateLength minimum="6" maximum="12" />
                                    <f:ajax event="blur" render="password-messages" />
                                </h:inputSecret>
                                <h:message id="password-messages" for="password" styleClass="validationMessage" errorClass="errorMessage" infoClass="infoMessage"
                                           warnClass="warnMessage" />
     
                                <h:outputLabel for="passwordConf" value="Confirmer le password :" />
                                <h:inputSecret id="passwordConf" value="#{validationFormController.password}"
                                               required="true" requiredMessage="Veuillez confirmer votre password">
                                    <f:validateLength minimum="6" maximum="12" />
                                    <f:ajax event="blur" render="passwordConf-messages" />
                                </h:inputSecret>
                                <h:message id="passwordConf-messages" for="passwordConf" styleClass="validationMessage" errorClass="errorMessage" infoClass="infoMessage"
                                           warnClass="warnMessage" />
     
                            </h:panelGrid>
                            <div id="button-div">
                                <div class="button-container">
                                    <h:commandButton type="submit" action="#{validationFormController.login}" value="Connexion" />
                                </div>
                                <div class="button-container">
                                    <h:commandButton id="reset" immediate="true" value="Reset" action="#{validationFormController.clearForm}"/>  
                                </div>
                            </div> 
     
                        </div>
                    </fieldset>
                </h:form>
            </div>
        </h:body>
    </html>
    Cheers

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/09/2013, 17h18
  2. Réponses: 4
    Dernier message: 02/07/2008, 09h30
  3. [HTML] validation [null] problème de liste
    Par Olivier Regnier dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/03/2008, 21h25
  4. [VB.NET 2.0] et validation NULL
    Par angelevil dans le forum Accès aux données
    Réponses: 2
    Dernier message: 19/11/2007, 14h19
  5. erreur: usage non valide du null
    Par Pau dans le forum Access
    Réponses: 2
    Dernier message: 28/04/2006, 10h41

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