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 :

Gestion d'une sessionScoped et conditions dans facelet


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 109
    Par défaut Gestion d'une sessionScoped et conditions dans facelet
    Bonjour à tous,

    J'ai actuellement créé l'identification de l'utilisateur qui fonctionne. J'aimerais maintenant créer un bouton de déconnexion qui je présume, détruira le bean. Par contre, je ne trouve pas sur le net une manière de détruire ce bean (ou le vider) afin d'être "délogguer".

    De plus, quand l'utilisateur est loggué, j'aimerais avoir à un endroit de ma page un message du style "bienvenue X" + le bouton pour se "délogguer" (à la place du bouton pour accéder à la page de log). Puis-je créer une page qui sera un bout de page qui sera injecté en haut de ms page en cours ety qui contiendra :
    Si utilisateur pas logué => Bouton connexion
    Sinon => "Bienvenue X" + bouton de deco

    Pouvez-vous m'aider pour ces problèmes svp.
    Merci d'avance !

  2. #2
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonjour,

    Voici un petit exemple développé avec PrimeFaces:

    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
     
    <h:panelGrid id="login" styleClass="blockLogin" columns="1">
     
                                <p:watermark for="Email" value="#{bundle.UsernameWatermarkTitle}" rendered="#{!personneController.isConnected}">
                                    <h:inputText  style="width:150px" id="Email" value="#{personneController.selected.login}"
                                                  rendered="#{!personneController.isConnected}"/>
                                </p:watermark>
     
                                <p:watermark for="Password" value="#{bundle.PasswordWatermarkTitle}" rendered="#{!personneController.isConnected}">
                                    <h:inputSecret   style="width:150px" id="Password" rendered="#{!personneController.isConnected}"
                                                     value="#{personneController.tempPassword}"/>
                                </p:watermark>
     
                                <h:panelGrid columns="2">
                                    <p:commandButton style="width: 70px !important; font-size: 10px !important;"  value="#{bundle.LoginButtonTitle}" 
                                                     rendered="#{!personneController.isConnected}"
                                                     action="#{personneController.doAuthenticate()}" ajax="false"/>
                                    <h:commandLink  value="#{bundle.CreateAccountLinkTitle}" rendered="#{!personneController.isConnected}" 
                                                    action="#{personneController.doPrepareCreateUser()}"/>
                                </h:panelGrid >
     
                                <h:panelGrid rendered="#{personneController.isConnected}">
                                    <h:commandLink id="userAccountLink" style="font-size: 14px" 
                                                   value="#{personneController.selected.prenom} #{personneController.selected.nom}"
                                                   title="#{bundle.YourAccountTitle}" action="#{personneController.userInfo()}"/>
                                    <br/>
                                    <p:commandButton value="#{bundle.SignOutLinkTitle}" action="#{personneController.doLogoutUser()}" ajax="false" immediate="true"/>
                                </h:panelGrid>
                            </h:panelGrid>
    Il y en a certainement plus simple et peut-être faisable même en JSF "pur".

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Il faut être plus précis dans la description de ton besoin...

    Quel type d'authentification utilises-tu :
    - authentification du conteneur
    - "fait à la main"

    Si authentification conteneur, quel mode :
    - basic
    - form

    Ensuite, pour l'aspect purement rendu, en fonction de ce que tu vas utiliser comme bibliothèque de rendu, il y aura des possibilités plus ou moins grandes, mais on retrouvera un peu toujours le principe de "rendered" et "update" sur les composants...
    Là aussi, il faudrait savoir ce que tu vas utiliser
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 109
    Par défaut
    Merci Mishulyna je vais essayer d'adapter ton code au mieux et surtout comprendre !

    OButterlin : J'ai une facelet fait main et un bean en sessionscoped fait main également.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 109
    Par défaut
    Mishulyna j'ai adapté ton code comme ceci :

    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
    <h:panelGrid id="login" styleClass="blockLogin" columns="1">
     
         <p:watermark for="Login" value="Login" rendered="#{!identificationIBean.isConnected}">
             <h:inputText  style="width:150px" id="Login" value="#{identificationIBean.newMember.name}"
                           rendered="#{!identificationIBean.isConnected}"/>
         </p:watermark>
     
         <p:watermark for="Password" value="Mot de passe" rendered="#{!identificationIBean.isConnected}">
             <h:inputSecret   style="width:150px" id="Password" rendered="#{!identificationIBean.isConnected}"
                              value="#{identificationIBean.newMember.motDePasse}"/>
         </p:watermark>
     
         <h:panelGrid columns="2">
             <p:commandButton style="width: 70px !important; font-size: 10px !important;"  value="Connexion" 
                              rendered="#{!identificationIBean.isConnected}"
                              action="#{identificationIBean.login()}" ajax="false"/>
             <h:commandLink  value="S'inscrire" rendered="#{!identificationIBean.isConnected}" 
                             action="#{inscriptionIBean.register()}"/>
         </h:panelGrid >
     
         <h:panelGrid rendered="#{identificationIBean.isConnected}">
             <h:commandLink id="userAccountLink" style="font-size: 14px" 
                            value="#{identificationIBean.newMember.name}"
                            title="Informations" action="#{identificationIBean.userInfo()}"/>
             <br/>
             <p:commandButton value="Déconnexion" action="#{identificationIBean.doLogoutUser()}" ajax="false" immediate="true"/>
         </h:panelGrid>
     </h:panelGrid>
    Mais j'ai un problème. Le fait de lancer ma facelet avec ce code va lancer la méthode "login()" du bean automatiquement. Cette méthode est sensée envoyer le membre avec lequel on tente de s'identifier dans ma couche service. Hors, le membre n'existe pas étant donné que je n'ai rien pu mettre dans mes champs donc j'ai une erreur.

    Le problème vient uniquement du fait que la méthode se lance en même temps que la facelet, tu as la même chose que tu as du géré dans ton bean ?

  6. #6
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonjour,

    Il faut initialiser l'objet "newMember" (et ses champs: name, motDePasse, etc.) dans une méthode @PostConstruct du "identificationIBean".

    Une autre possibilité c'est d'avoir une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Member newMember() {
            Member newMember = new Member();
            newMember.setName(new String());
            newMember.setMotDePasse(new String());
            ...
            }
    et modifier la méthode getSelected() de la classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Member getSelected() {
            if (current == null) {
                current = newMember();
                selectedItemIndex = -1;
            }
            return current;
        }
    Dans ce cas-ci, sur la page de login tu devrais avoir "#{identificationIBean.selected.name}" et "#{identificationIBean.selected.motDePasse}".

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/04/2014, 10h36
  2. Réponses: 1
    Dernier message: 20/01/2014, 23h55
  3. Afficher une image sous condition dans Word
    Par SUKINET dans le forum VBA Word
    Réponses: 3
    Dernier message: 29/09/2009, 02h12
  4. Réponses: 4
    Dernier message: 07/03/2008, 16h21
  5. afficher une image sous condition dans un etat
    Par gui-llaume dans le forum IHM
    Réponses: 1
    Dernier message: 31/10/2007, 21h53

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