[Primefaces 4.0:JSF]Bug etrange ManagedBean et <p:messages>
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:
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:
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:
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:
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:
int testId = result.getInt("id");
et à la place je dé-commente :
Code:
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.