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.








Répondre avec citation
Partager