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.