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 :
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
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 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 @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(); } [...]
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
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); } }
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
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)); } [...] }
et à la place je dé-commente :
Code : Sélectionner tout - Visualiser dans une fenêtre à part int testId = 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part id=result.getInt("id");
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.
Partager