IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

[Primefaces 4.0:JSF]Bug etrange ManagedBean et <p:messages>


Sujet :

JSF Java

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut [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 : 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.

  2. #2
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Bon en cherchant j'ai trouvé le problème, mon formulaire et dans un panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <p:panel rendered="#{userManagedBean.id==0 and userManagedBean.test==0}" header="Je possède un compte, je me connecte (cliquez →)" collapsed="true" toggleable="true" toggleSpeed="500">
            <p>Pour vous connecter, utilisez le formulaire ci-dessous :</p>
            <h:form id="formc">
    [...]
        </p:panel>
    il semblerait qu'il y ait conflit entre le rendered="#{userManagedBean.id==0 .. et le fait que je modifie id dans la méthode d'action, si j'enleve le test du rendered sur id, <p:messages> fonctionne, par contre je n'arrive pas à expliquer pourquoi.
    Merci.

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour,

    Citation Envoyé par stc074 Voir le message
    il semblerait qu'il y ait conflit entre le rendered="#{userManagedBean.id==0 .. et le fait que je modifie id dans la méthode d'action
    Pour moi l'explication est simple et ça n'a rien avoir avec un conflit !
    Ton <p:messages> se trouve dans un panel qui ne sera pas affiché et donc le <p:messages> n'existe pas et ne peux donc rien afficher !
    Si tu veux que cela marche il faut sortir le <p:messages> du panel.

  4. #4
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    Bonjour,



    Pour moi l'explication est simple et ça n'a rien avoir avec un conflit !
    Ton <p:messages> se trouve dans un panel qui ne sera pas affiché et donc le <p:messages> n'existe pas et ne peux donc rien afficher !
    Si tu veux que cela marche il faut sortir le <p:messages> du panel.
    Bonjour, en fait mon panel est affiché car avant validation du formulaire id vaut bien 0, c'est en suite que je modifie id via Ajax.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Primefaces 3.2 - datatable bug ?
    Par OButterlin dans le forum JSF
    Réponses: 3
    Dernier message: 17/04/2012, 13h21
  2. Réponses: 1
    Dernier message: 23/05/2010, 09h08
  3. Lien hypertexte dans swf bug etrange
    Par BoloG dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 23/07/2009, 20h57
  4. [BUG] Etrange redirection
    Par coupolites dans le forum Langage
    Réponses: 9
    Dernier message: 30/09/2008, 13h42
  5. Bug etrange, reaction de IE6 différente avec mon site en local ou en ligne
    Par maxfive7 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/08/2007, 01h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo