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 :

Page de login avec message et validator


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 186
    Par défaut Page de login avec message et validator
    Bonjour , j'ai une page pour se connecter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <rich:panel>
    		<f:facet name="header">		
    	<h:outputText value="Identification" />
    			</f:facet>
    		<h:panelGrid columns="3">
    <h:outputLabel value="#{msg.LOGIN }" styleClass="Output"></h:outputLabel>
    		<h:inputText value="#{loginBean.user.userName }" />
    		<h:outputLabel value="#{msg.PASSWORD }" styleClass="Output"></h:outputLabel>
    	<h:inputSecret value="#{loginBean.user.userCode}" />
    	<h:commandButton actionListener="#{loginBean.connect}" id="validate" />
    		<h:message for="validate"></h:message>
    	</h:panelGrid>
    </rich:panel>
    et ensuite dans mon loginBean.java j'ai ca:

    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
     
    public void connect(ActionEvent evt) {
    		UIComponent toValidate = null ;
    		if ((user.getUserName().equals(null))
    				&& (user.getUserCode().equals(null))
    				|| (user.getUserName().equals(""))
    				&& (user.getUserCode().equals(""))) {
    			FacesContext context = FacesContext.getCurrentInstance();
    			FacesMessage message = new FacesMessage();
    			message.setDetail("Veuillez saisir le login ou l'adresse mail");
    			message.setSeverity(FacesMessage.SEVERITY_ERROR);
     
    			context.addMessage(toValidate.getClientId(context), message);
     
    		}
    		// redirection si tout va bien
    	}
    Sauf que je n'arrive pas a faire marcher tout ca , ni a afficher le petit message en rouge a coté des champs, si quelqu'un peut m'aider.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Qu'est ce qui ne fonctionne pas exactement ?
    L'affichage est correct, as tu des erreurs ?

  3. #3
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bonjour,

    Plusieurs choses :

    Utilise l'action plutôt que l'actionListener, sur ton bouton validate.
    Si tout se passe bien, ton action va retourner une String représentant l'ID de la page d'accueil à afficher (dans les navigation rules), sinon un String vide (ou null) pour rester sur la page de login.

    Tu n'as pas de message d'erreur parce que ton <h:message> pointe sur le bouton. Or il doit pointer sur l'un des inputs, et n'affichera que les erreurs liés directement à celui-ci.
    Eventuellement, tu peux mettre un <h:messages/> pour avoir tous les messages d'erreur...
    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

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 186
    Par défaut
    j'ai utiliser action sur mon bouton validate, et pour la redirection ca j'ai compris comment faire. ce que je n'arrive toujours pas à afficher ce sont les messages rouges près des champs de login et de mot de passe.

    Merci

  5. #5
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Il te faut un <h:messages> dans ta page car le messages que tu ajoutes par programmation est global.

    Tu sais que tu peux valider automatiquement et en utilisant JSF ? en ajoutant l'attribut required="true" à tes inputText ?

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 186
    Par défaut
    j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: #{loginBean.connect}: java.lang.NullPointerException
    Tu sais que tu peux valider automatiquement et en utilisant JSF ? en ajoutant l'attribut required="true" à tes inputText ?

    il sert a quoi cet attribut??

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    L'attribut required sert à indiquer si la variable doit être obligatoirement remplie : il est à false par défaut, le mettre à true signifie donc que l'on indique que ce champ doit être rempli pour valider le formulaire.

  8. #8
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par ghnawfal Voir le message
    j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: #{loginBean.connect}: java.lang.NullPointerException
    Tu as du oublié d'instancier le champ user ... sinon, tu peux localiser toi même la source de cette erreur dans ton code suffit de déboger et/ou de tracer.

    Citation Envoyé par ghnawfal Voir le message
    il sert a quoi cet attribut??
    Justement, il sert à :
    valider automatiquement en utilisant JSF
    Automatiquement veut dire que tu n'as plus à faire les tests login!=null etc. Ce sera fait par JSF automatiquement ... et un mesage d'erreur serait automatiquement ajouté si la condition n'est pas respectée.

    http://java.developpez.com/faq/jsf/?...NTS_validators
    + n'importe quel cours JSF parle de ça.

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 186
    Par défaut
    Merci pour l'explication,
    mais est ce que cela affichera mes messages??

    j'ai pas vu. merci pour vos réponses, mais une toute dernière est ce que je peu les personnaliser??

  10. #10
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Oui

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:inputText id="login" value="#{loginCtrl.login}" required="true"
     
    				requiredMessage="Champ obligatoire"></h:inputText>

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 186
    Par défaut
    bonjour,

    j'ai repris cette discussion pour ne pas ouvrir une autre.

    Voilà ce que je fais et ca marche très bien:
    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
    public String connect() {
    List results = null;
    String string = null;
    try {
    Context context = new InitialContext();
    FacesContext fctx = FacesContext.getCurrentInstance();
    ExternalContext ectx = fctx.getExternalContext();		
    ListRemote testremote = (ListRemote) context
    				.lookup("ListBean/remote");
    	results = testremote.list_object("UsersProfile",
    			"WHERE USER_NAME='" + user.getUserName()
    			+ "' AND USER_CODE= '" + user.getUserCode() + "'");
    if (results.size() == 1) {
    ((HttpSession) ectx.getSession(false)).setAttribute("isLog",				"true");
    	string = "go_index";
    		
    			} else {
    				string= "go_error";
    			}
    		} catch (NamingException e) {
    			e.printStackTrace();
    		}
    		return string;
    	}
    et dans ma page j'ai ca:

    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
    <rich:panel style="width: 380px; height: 120px">
    <f:facet name="header" >
    <h:outputText value="Identification" /></f:facet>
    <h:panelGrid columns="3">
    	<h:outputLabel value="#{msg.LOGIN }" styleClass="Output"></h:outputLabel>
    	<h:inputText value="#{loginBean.user.userName }" required="true"
    	requiredMessage="Champ obligatoire" styleClass="Output" id="login" />
    <h:message for="login" styleClass="msg"></h:message>
    <h:outputLabel value="#{msg.PASSWORD }" styleClass="Output"></h:outputLabel>
    <h:inputSecret value="#{loginBean.user.userCode}" required="true" requiredMessage="Champ obligatoire" styleClass="Output" id="password" />
    <h:message for="password" styleClass="msg"></h:message>
    <h:commandButton value="#{msg.CONNECT }"	action="#{loginBean.connect}" />
    <h:commandButton value="#{msg.CANCEL }" onclick="close window();" />
    <h:message for="password" styleClass="msg"></h:message>
    </h:panelGrid>
    </rich:panel>
    Ce qui se passe c'est quand le login et le mot de passe sont vide, j'ai les petits messages a coté et une fois que le mot de passe et le login sont incorrect il y a une redirection vers une page d'erreur, au lieu de la redirection je voudrais que c'est meme message qui affiche maintenant ( champs obligatoire)
    m'affichent "Données incorrectes"

    Merci d'avance

  12. #12
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Le required="true" ne permet que de vérifier si une donnée a été saisie, rien de plus.

    Ce que tu peux faire, c'est dans ta méthode connect(), si le résultat n'est pas bon, tu ajoutes un FacesMessage et tu retournes une chaine de caractères (ta variable string) à null (ou ""), de façon à ce que l'utilisateur ne soit pas redirigé vers une autre page...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext.getCurrentInstance().addMessage(new FacesMessage("Données incorrectes"));
    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

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 186
    Par défaut
    Bonjour,
    quand ej fais ceci dans mon bean , j'ai une erreur sur mon addmessage comme quoi je dois ajouter un argument et j'ai la proposition de faire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FacesContext.getCurrentInstance().addMessage(
    					null, new FacesMessage("Données incorrectes"));
    et quand je fais ca j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
    sourceId=null[severity=(INFO 0), summary=(Données incorrectes), detail=(Données incorrectes)]

  14. #14
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Ca, ça veut dire qu'il y a des messages dans le FacesContext, mais qui ne sont pas affichés au client.
    Il te faut donc mettre un <h:messages/>...
    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

  15. #15
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 186
    Par défaut
    Merci, j'avais réussi a resoudre le problème mais coe j'avais d'autres <h:message> appropirés pour chaque champs j'avais le <h:messages> qui m'affichaient tous les message.
    Mnt j'ai réussi a n'afficher soit le <h:messages> soit les <h:message>, selon l'erreur que j'ai.

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

Discussions similaires

  1. Page de login avec html ajax et php
    Par forgottenspam dans le forum jQuery
    Réponses: 4
    Dernier message: 15/10/2014, 15h21
  2. page de login avec LogOnUserControl.ascx
    Par cragoroth dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 27/04/2012, 16h39
  3. Réponses: 7
    Dernier message: 16/12/2010, 17h05
  4. Struts 2 - problème avec les messages de validation
    Par Aemaeth13 dans le forum Struts 2
    Réponses: 4
    Dernier message: 17/08/2009, 16h41
  5. Authentification avec JAAS et Page de login en page d'acceuil
    Par Slash696 dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 02/03/2007, 16h13

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