Bonjour, j'essaie de faire un formulaire de connexion en JSF Primefaces et j'ai découvert une chose étrange, j'ai un formulaire normal :
Page connexion.xhtml :
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
[...]
#{userManagedBean.testAction()}
[...]
        <h:form id="formc">
            <p:messages id="errorsc" autoUpdate="true" severity="error" showDetail="true" showSummary="true" globalOnly="true" escape="false" />
            <p:messages id="infosc" autoUpdate="true" severity="info" showDetail="true" showSummary="true" escape="false" />
            <div id="toHidec">
                <h:panelGrid id="gridc" columns="3" cellpadding="4">
                    <p:outputLabel for="nicknamec" value="Votre pseudonyme : " />
                    <p:inputText id="nicknamec" value="#{userManagedBean.nickname}" required="true" requiredMessage="Champ vide"
                                 size="20" maxlength="20"
                                 validator="nicknameLoginValidator" />
                    <p:message for="nicknamec" />
                    <p:outputLabel for="passwordc" value="Votre mot de passe : " />
                    <p:password id="passwordc" value="#{userManagedBean.password}" required="true" requiredMessage="Champ vide"
                                size="15" maxlength="15"
                                validator="passwordLoginValidator" />
                    <p:message for="passwordc" />
                    <p:commandButton value="Valider" action="#{userManagedBean.actionConnection(userManagedBean.action)}" update="gridc infosc errorsc" />
                </h:panelGrid>
            </div>
        </h:form>
[...]
Mon UserManagedBean.java :

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
@ManagedBean
@ApplicationScoped
public class UserManagedBean extends User {
 
    private int action = 0;
 
    /**
     * Creates a new instance of UserManagedBean
     */
    public UserManagedBean() {
        super();
    }
[...]
    public void actionConnection(int act) {
        action = act;
        showInfo("test", getNickname()+":"+getPassword());
        connection();
    }
[...]
Mon User.java (Parente de UserManagedBean.java)
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
public class User extends SuperClass {
 
    private int id = 0;
    private String nickname = "";
    private String password = "";
[...]
    public User() {
        super();
    }
[...]
    protected void connection() {
        //try {
            //if (isConnexionOk(nickname, password)) {
                getIdByLogin();
                if (getTest() != 2&&id!=0) {
                    //initCookieCode();
                    //getFieldsById();
                    if(getTest()!=2) {
                        setTest(1);
                    }
            } else {
                setTest(2);
               setErrorMsg("Erreur de connexion, veuillez recommencer SVP.<br/>");
            }
        /*} catch (NamingException ex) {
            setTest(2);
            setErrorMsg("Base de données indisponible, veuillez recommencer.<br/>");
            Logger.getLogger(User.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            setTest(2);
            setErrorMsg("Erreur SQL, veuillez recommencez.<br/>");
            Logger.getLogger(User.class.getName()).log(Level.SEVERE, null, ex);
        }*/
        if(getTest()==2) {
            showError();
            blank();
        } else if(getTest()==1) {
            //showInfo("Information", "Vous êtes connecté(e).");
            password="";
            setTest(0);
            setErrorMsg2("");
        }
    }
[...]
    protected void getIdByLogin() {
        try {
            id=0;
            StrongPasswordEncryptor passwordEncryptor = new StrongPasswordEncryptor();
            connectDatabase();
            String query = "SELECT id, pass FROM users WHERE nickname=? LIMIT 1";
            try (PreparedStatement prepare = getConn().prepareStatement(query)) {
                prepare.setString(1, nickname);
                try (ResultSet result = prepare.executeQuery()) {
                    if (result.next()) {
                        String pass=result.getString("pass");
                        if(passwordEncryptor.checkPassword(password, pass)) {
                            int testId = result.getInt("id");
                            //id=result.getInt("id");     //LÀ -> QUAND JE DECOMMENTE showInfo ne fonctionne plus
                       } else {
                            setTest(2);
                            setErrorMsg("Erreur de connexion, veuillez recommencer SVP.<br/>");
                        }
                    } else {
                        setTest(2);
                        setErrorMsg("Erreur de connexion, veuillez recommencer SVP.<br/>");
                    }
                    }
                }
        } catch (NamingException ex) {
            setTest(2);
            setErrorMsg("Base de données indisponible, veuillez recommencer SVP.<br/>");
            Logger.getLogger(User.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            setTest(2);
            setErrorMsg("Erreur SQL, veuillez recommencer SVP.<br/>");
            Logger.getLogger(User.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
Enfin, la classe parente de User -> SuperClass
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class SuperClass {
 
[..]
    public SuperClass() {
        errorMsg = "";
        test = 0;
    }
[...]
    protected void showInfo(String text1, String text2) {
        setHTTP();
        getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, text1, text2));
    }
[...]
}
Le truc étrange c'est que si je laisse le code ainsi ça marche, par contre, dans getIdByLogin si je commente la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
                          int testId = result.getInt("id");
et à la place je dé-commente :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
                           id=result.getInt("id");
Le message d'information (p:messages) n’apparaît plus, pourtant c'est ce que je veux faire, initialiser l'id de l'utilisateur.
je suis décontenancé car a part le fait que le message n’apparaît pas, le code ne comporte aucune erreur (j'ai bien la bonne valeur de l'id)
Si ça vous inspire ...
Merci.