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 :

Problème s:button et l'attribut action


Sujet :

JSF Java

  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Par défaut Problème s:button et l'attribut action
    Salut,

    Voila ce que j'aimerais faire, j'ai créé une application web et avant que mon appli web s'ouvre je voudrais que l'utilisateurs s'identifie en entrant login et mot de passe pour cela, j'ai créé un fichier xhtml avec un formulaire et un bouton qui permet de vérifier si le login et mot de passe sont correctes, si oui j'ouvre la page home de l'appli sinon je reste sur la page d'identification


    voici mon problème, j'ai ma page d'identification dont le code est le suivant :

    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
    <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
                    xmlns:s="http://jboss.com/products/seam/taglib"
                    xmlns:ui="http://java.sun.com/jsf/facelets"
                    xmlns:f="http://java.sun.com/jsf/core"
                    xmlns:h="http://java.sun.com/jsf/html"
    		    xmlns:ice="http://www.icesoft.com/icefaces/component"
                    template="layout/template.xhtml">
    
    <ui:define name="body">
       
        <h:messages styleClass="message"/>
      
     <ice:form>
          <ice:panelGroup  styleClass="formBorderHighlight">
              <table width="100%" border="0" cellspacing="0" cellpadding="0">
                  <tr>
                      <td class="iceDatTblColHdr2">
           			<ice:outputText value="Login"/>
                      </td>
                  </tr>
              </table>
        
          
                <p>Entrer votre login et mot de passe</p>
    
                        <div class="dialog">
                            <h:panelGrid columns="2" rowClasses="prop">
                        <ice:outputText>Login : </ice:outputText>
                        <ice:inputText value="#{identification.login}"/>
                                    
                        <ice:outputText>Mot de passe : </ice:outputText>
                        <ice:inputSecret value="#{identification.motDePasse}"/>
                                    
                       
                    </h:panelGrid>
                </div>
      
          </ice:panelGroup>
             <div class="actionButtons">
             <h:panelGrid columns="2" rowClasses="prop">
                <s:button id="loginButtonId" value="Login" action="#{gestionDeDocument.verification(identification.login, identification.motDePasse)}" view="#{identification.page}"></s:button>
                <s:button id="enregistrement" value="Enregistrement" view="/enregistrementUtilisateur.xhtml"></s:button>
              </h:panelGrid>
            </div>
              
      </ice:form>    
    </ui:define> 
    </ui:composition>
    j'ai mis en rouge la ligne où il y a mon problème. En fait, lorsque je clique sur le bouton login j'appelle une méthode qui vérifie que le login et le mot de passe que l'utilisateur à entrer dans les champs textes sont dans la base de données,mais dans la méthode vérification, le login et le mot de passe sont vides.

    Fonction java : verification

    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
     
    public void verification(String login, String motDePasse){
    		try{
     
    			System.err.println("je suis dans verification");
    			System.err.println("login = "+login);
    			System.err.println("motDePasse = "+motDePasse);
    			Query q = em.createQuery("select u from Utilisateur u where u.login = :login and u.motDePasse= :motDePasse");  
     
    			q.setParameter("login",login);
    			q.setParameter("motDePasse", motDePasse);
     
    			Utilisateur user = (Utilisateur) q.getSingleResult();
     
    			identification.setLoggedIn(true);
    		}catch(Exception e){
    			System.err.println("je suis dans le catch");
    			identification.setLoggedIn(false);
    		}
    	}

    Par contre, si dans mon fichier xhtml je met à la place de s:button => ice:button avec l'attribut actionListener ça fonctionne. mais moi je suis obligé de passer par s:button pour avoir l'attribut view qui me permet de rediriger vers la page désiré

    D'où peut venir ce problème ?

    au cas ou, voici ma classe java identification :

    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
     
    @Name("identification")
    @Scope(ScopeType.SESSION)
    public class Identification {
     
    	//Variables d'instance
    	// login de l'utilisateur
    	private String login;
     
    	// mot de passe de l'utilisateur
    	private String motDePasse;
     
    	//page à retourner lorsque l'utilisateur s'est loggé
    	private String page = "/login.xhtml";
     
    	// vrai si l'utilisateur est loggé faux sinon
    	private boolean loggedIn;
     
     
    	public Identification(){
     
    	}
     
     
     
    	// les getters et les setters
     
    	public String getLogin() {
    		return login;
    	}
    	public void setLogin(String login) {
    		this.login = login;
    	}
    	public String getMotDePasse() {
    		return motDePasse;
    	}
    	public void setMotDePasse(String motDePasse) {
    		this.motDePasse = motDePasse;
    	}
     
    	public String getPage() {
    		return page;
    	}
     
    	public void setPage(String page) {
    		this.page = page;
    	}
     
    	public boolean isLoggedIn() {
    		return loggedIn;
    	}
     
    	public void setLoggedIn(boolean loggedIn) {
    		this.loggedIn = loggedIn;
    	}
     
     
     
    }
    Merci

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Voici comment j'aurais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <h:form>
        <h:messages/>
        ...
        <h:inputText id="login" value="#{monBean.login}"/>
        ...
        <h:inputText id="password" value="#{monBean.password}"/>
        ...
        <h:commandButton value="Login" action="#{monBean.doLogin}"/>
    </h:form>
    Et dans le bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private String login; // Avec le setter et le getter...
    private String password; // Avec le setter et le getter...
     
    public String doLogin() {
        if (identificationService.isLoginOk(login, password)) {
            return "welcomePage";
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Mauvais login / password"));
            return "";
        }
    }
    En gros, il est inutile de passer le login et le mdp dans l'action (d'autant qu'ils sont vides à la création de la page, d'où ton problème). Autant laisser JSF remplir mes login et password de mon bean automatiquement !
    Donc ma méthode doLogin appelle un service qui va vérifier (via un DAO) en base de données si l'ensemble login / password est correct (c'est très moche de mettre des accès en base directement dans le bean).

    Si c'est bon, je retourne la chaîne "welcomePage" qui redirigera l'utilisateur sur la page définir dans la navigation-rules correspondante (définie dans mon faces-config.xml).
    Si ce n'est pas le bon, alors je reste sur la même page (page de login) en affichant l'erreur (via le <h:messages/>).

    Sinon, à part ça, le sujet de l'authentification / sécurité a été abordé de nombreuses fois sur ce forum, je te conseille donc d'y jeter un oeil
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Par défaut
    Salut,

    j'ai essayé de faire ce que tu m'as proposé avec navigation-rule dans le fichier faces-config.xml, mais ça ne fonctionne pas, c'est à dire que lorsque l'utilisateur entre le bon login et mot de passe, ça reste toujours sur la page de login, je ne sais pas d'où cela peut venir. De plus, j'ai regardé sur le forum, et il est vrai qu'il a pas mal de topic qui parle de ce sujet mais malheureusement, j'en ai pas trouvé qui parlait de ce problème.

    Au cas où voici mon fichier faces-config.xml :
    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
     
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE faces-config PUBLIC
              "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
              "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
     
    <faces-config>
     
       <application>
          <message-bundle>messages</message-bundle>
          <locale-config>
             <default-locale>en</default-locale>
             <supported-locale>bg</supported-locale>
             <supported-locale>de</supported-locale>
             <supported-locale>en</supported-locale>
             <supported-locale>fr</supported-locale>
             <supported-locale>tr</supported-locale>
          </locale-config>
          <view-handler>com.icesoft.faces.facelets.D2DSeamFaceletViewHandler</view-handler>
       </application>
       <navigation-rule>
     	<display-name>verification</display-name>
     		<from-view-id>/login.xhtml</from-view-id>
     	<navigation-case>
     		<from-outcome>success</from-outcome>
     			<to-view-id>/listeDocument.xhtml</to-view-id>
     	</navigation-case>
     	<navigation-case>
     	  <from-outcome>failure</from-outcome>
     		<to-view-id>/login.xhtml</to-view-id>
     	</navigation-case>
     	</navigation-rule> 
     
    </faces-config>
    voici le bout de code de ma page jsf : login.xhtml qui permet de vérifier si l'utilisateur a entré le bon login et mot de passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:commandButton value="Login" actionListener="#{gestionDeDocument.verification(identification.login, identification.motDePasse)}"/>
    enfin voici la fonction java : verification

    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
     
    public String verification(String login, String motDePasse){
    		try{
     
    			System.err.println("je suis dans verification");
    			System.err.println("login = "+login);
    			System.err.println("motDePasse = "+motDePasse);
    			Query q = em.createQuery("select u from Utilisateur u where u.login = :login and u.motDePasse= :motDePasse");  
     
    			q.setParameter("login",login);
    			q.setParameter("motDePasse", motDePasse);
     
    			Utilisateur user = (Utilisateur) q.getSingleResult();
     
    			return "success";
    		}catch(Exception e){
    			return "failure";
    		}
    	}
    Merci

  4. #4
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Par défaut
    Désolé, je crois que je suis allé trop vite pour écrire le post précedent, en effet, j'ai résolu mon problème.

    Ca venait du fait que dans la balise <h:commandButon> je mettais l'attribut actionListener, et pour que ça fonctionne il faut mettre action à la place d'actionListener

    Merci romaintaz pour tes conseils

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2008, 21h59
  2. Problème d'utilisation de la Servlet Action
    Par Sebastien0104 dans le forum Struts 1
    Réponses: 11
    Dernier message: 05/12/2006, 11h48
  3. [JSCookMenu] attribut action
    Par Yjo dans le forum JSF
    Réponses: 8
    Dernier message: 13/09/2006, 12h21
  4. [XSLT]Problèmes pour regrouper selon l'attribut
    Par gharl dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 21/08/2006, 21h39
  5. Récupérer l'attribut action d'un formulaire
    Par boubouh dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 04/02/2006, 15h19

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