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] L'action du bouton du formulaire ne s'enclenche pas


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut [PrimeFaces] L'action du bouton du formulaire ne s'enclenche pas
    Bonjour,

    J'ai fait un formulaire de login mais l'action associée à mon bouton de connexion ne s'enclenche pas.
    Qqun saurait-il m'aider ?

    Voici le code :
    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
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:p="http://primefaces.org/ui"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:ui="http://java.sun.com/jsf/facelets">
    <f:view locale="#{changeLocale.locale}">
    	<h:head>
    		<title>Connexion</title>
    		<h:outputStylesheet library="css" name="styles.css" />
    	</h:head>
    	<body>
    		<h:form id="connexionForm">
    			<p:growl id="growl" life="2000" />
    				<p:panelGrid columns="1" style="margin-bottom:15px;" layout="grid">
    					<f:facet name="header">
    						<h:outputText class="titreLogin" value="Connexion" />
    					</f:facet>
    					<p:panelGrid columns="2" styleClass="panelSansBordure">
    						<h:outputText value="Nom d'utilisateur :" />
    					</p:panelGrid>
    					<p:inputText id="login" value="#{connexionForm.login}" size="25" />
     
    					<p:panelGrid columns="2" styleClass="panelSansBordure">
    						<h:outputText value="Mot de passe :" />
    					</p:panelGrid>
    					<p:password id="password" value="#{connexionForm.password}" size="25" />
     
    					<p:panelGrid columns="2" style="margin-bottom:15px"
    						styleClass="panelSansBordure">
    						<p:selectBooleanCheckbox value="#{connexionForm.isRemembered}" />
    						<h:outputText value="Se souvenir de moi" />
    					</p:panelGrid>
    					<p:commandButton value="Connexion" id="doLogin" update="growl"
    						action="connexionForm.authenticate"
    						styleClass="ui-icon-login" />
    				</p:panelGrid>
     
    			<p:commandLink id="forgetLogin" update="growl"
    				actionListener="#{connexionForm.forgetLoginData}">
    				<h:outputText class="lien" value="Login ou mot de passe oublié" />
    			</p:commandLink>
    		</h:form>
    	</body>
    </f:view>
    </html>
    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
    79
    80
    package ch.rwb.application.forms.login;
     
    import java.io.IOException;
     
    import javax.annotation.PostConstruct;
    import javax.faces.application.FacesMessage;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;
    import javax.faces.context.ExternalContext;
    import javax.faces.context.FacesContext;
    import javax.servlet.RequestDispatcher;
     
    @ManagedBean
    @RequestScoped
    public class ConnexionForm {
     
    	private String login;
    	private String password;
    	private boolean isRemembered;
    	private String originalURL;
     
    	/**
             * Default Constructor
             */
    	public ConnexionForm() {
     
    	}
     
    	@PostConstruct
    	public void init() {
    		ExternalContext externalContext = FacesContext.getCurrentInstance()
    				.getExternalContext();
    		originalURL = (String) externalContext.getRequestMap().get(
    				RequestDispatcher.FORWARD_REQUEST_URI);
     
    		if (originalURL == null) {
    			originalURL = externalContext.getRequestContextPath()
    					+ "/Accueil.xhtml";
    		} else {
    			String originalQuery = (String) externalContext.getRequestMap()
    					.get(RequestDispatcher.FORWARD_QUERY_STRING);
     
    			if (originalQuery != null) {
    				originalURL += "?" + originalQuery;
    			}
    		}
    	}
     
     
    	public String getLogin() {
    		return login;
    	}
     
    	public String getPassword() {
    		return password;
    	}
     
    	public boolean getIsRemembered() {
    		return isRemembered;
    	}
     
    	public void authenticate() throws IOException {
    		FacesContext context = FacesContext.getCurrentInstance();
    		ExternalContext externalContext = context.getExternalContext();
     
    		try {
    			 System.out.println("Username" + login);
     
    			 if("test".equals(login) && "passwd".equals(password)){
    				 externalContext.getSessionMap().put("user", "john");
    			     externalContext.redirect(originalURL);
    		     } 
     
    			 throw new Exception("Invalid user/password");
    		} catch (Exception e) {
    	        context.addMessage(null, new FacesMessage("Unknown login"));
    	    }
     
    	}
    }
    Merci d'avance pour votre aide

  2. #2
    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
    Ooooooouuuh, elle est moche celle-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p:commandButton value="Connexion" id="doLogin" update="growl"
                            action="#{connexionForm.authenticate}"
                            styleClass="ui-icon-login" />
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut


    J'ai essayé toute sorte de chose, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    actionListener="#{connexionForm.authenticate}"
    (qui est le code du showcase PF)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    action="#{connexionForm.authenticate()}"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    action="#{connexionForm.authenticate}"
    Mais aucune ne fonctionne

  4. #4
    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
    J'utiliserais celle-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    action="#{connexionForm.authenticate()}"
    Si tu mets un point d'arrêt dans la méthode, il n'y passe pas ?
    S'il n'y passe pas, peux-tu essayer en ajoutant un immediate="true" sur le commandButton et me dire s'il y passe ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    ça marche, mais uniquement si je mets immediate="true".
    Pourquoi faut-il mettre cela ?

    Merci pour ton aide

  6. #6
    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
    C'est que tu dois avoir un problème quelque part dans le cycle JSF soit dans l'étape 2 (Apply Request Values), soit dans l'étape 3 (Process Validations), soit dans la 4 (Update Model Values)... difficile de dire comme ça, il faudrait mettre un phase-listener pour déterminer le problème.
    Je me suis fait une classe pour ça, voici son code
    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
     
    package ton.package;
     
    import java.util.Map;
    import javax.faces.event.PhaseEvent;
    import javax.faces.event.PhaseId;
    import javax.faces.event.PhaseListener;
     
    /**
     * Cycle de vie d'une requête JSF
     * @author Olivier BUTTERLIN
     */
    public class LifeCycleListener implements PhaseListener
    {
        public static final long serialVersionUID = 1;
     
        public LifeCycleListener()
        {
            super();
        }
     
        public PhaseId getPhaseId()
        {
            return PhaseId.ANY_PHASE;
        }
     
        /**
         * Au début d'une phase
         */
        public void beforePhase(PhaseEvent event)
        {
            if (event.getPhaseId() == PhaseId.RESTORE_VIEW)
            {
                System.out.println(event.getPhaseId() + " --> " + event.getFacesContext().getExternalContext().getRequestServletPath());
            }
            else if (event.getPhaseId() == PhaseId.APPLY_REQUEST_VALUES)
            {
                Map<String, String> map = event.getFacesContext().getExternalContext().getRequestParameterMap();
                if (!map.isEmpty())
                {
                    StringBuilder sb = new StringBuilder();
                    for (String key : map.keySet())
                    {
                        sb.append("      ").append(key).append(" = \"").append(map.get(key).replaceAll("\r", "").replaceAll("\n", "\\\\n")).append("\"\n");
                    }
                    sb.delete(sb.length()-1, sb.length());
                    System.out.println(event.getPhaseId() + " -->\n" + sb.toString());
                }
            }
            else
            {
                System.out.println(event.getPhaseId());
            }
        }
     
        /**
         * A la fin d'une phase
         */
        public void afterPhase(PhaseEvent event)
        {
              System.out.println("\n");
        }
    }
    tu le paramètres dans le faces-config.xml comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        <lifecycle>
            <phase-listener>ton.package.LifeCycleListener</phase-listener> 
        </lifecycle>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Double action sur un bouton de formulaire
    Par thor8one dans le forum ASP
    Réponses: 4
    Dernier message: 15/11/2007, 10h07
  2. Réponses: 8
    Dernier message: 04/04/2007, 11h16
  3. Action automatique sur click d'un bouton de formulaire
    Par ned-flanders dans le forum Langage
    Réponses: 7
    Dernier message: 20/03/2007, 16h37
  4. Lancer une action JS depuis un bouton de formulaire
    Par davinout dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2006, 08h50
  5. Réponses: 2
    Dernier message: 03/02/2005, 08h59

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