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

Struts 1 Java Discussion :

methode 'validate' de l'actionForm


Sujet :

Struts 1 Java

  1. #1
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut methode 'validate' de l'actionForm
    Salut, je souhaiterai avoir quelques renseignements sur l'emploi de la méthode 'validate' de l'actionForm. Actuellement, j'ai essayé de l'utiliser dans un formulaire sur plusieurs pages et ca ne fonctionne pas.

    Mon struts-config ressemble a 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
    18
    19
    20
    21
    22
    23
    24
    <struts-config>
      <form-beans>
        <form-bean name="loginForm" type="technote.actionform.LoginForm" />
      </form-beans>
      <action-mappings>
        <action path="/Input" 
        input="/pages/loginForm.jsp"  
        name="loginForm" 
        type="org.apache.struts.actions.ForwardAction" 
        parameter="/pages/adresseForm.jsp" 
        scope="request" 
        validate="true" />
        <action path="/InputAdresse" 
        input="/pages/adresseForm.jsp"
        name="loginForm" 
        type="org.apache.struts.actions.ForwardAction" 
        parameter="/pages/affiche.jsp" 
        scope="request" />
      </action-mappings>
     
      <message-resources parameter="MessageResources"/>
      <message-resources parameter="mesMessages" key="myResources" null="false" />
     
    </struts-config>
    Le actionForm :
    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
    public class LoginForm extends ActionForm {
     
    	private Login personne	= new Login();
    	private int page = 0;
     
    	public Login getPersonne() {
    		return personne;
    	}
     
    	public void setPersonne(Login login) {
    		this.personne= login;
    	}
     
    	public int getPage() {
    		return page;
    	}
     
    	public void setPage(int page) {
    		this.page = page;
    	}
     
     
    	public ActionErrors validate (ActionMapping mapping, HttpServletRequest request) {
    		ActionErrors erreurs = new ActionErrors();
     
    		if (page == 1) {
    			if ( personne.getIdentifiant() == null || personne.getIdentifiant().equals("".trim())) {
    				erreurs.add("login", new ActionMessage("errors.login"));
    			}
     
    			if ( personne.getMdp() == null || personne.getMdp().equals("".trim())) {
    				erreurs.add("mdp", new ActionMessage("errors.mdp"));
    			}
    		}
     
    		if (page == 2) {
    			if (personne.getAdresse().getNumRue() == null || personne.getAdresse().getNumRue().equals("".trim())) {
    				erreurs.add("numRue", new ActionMessage("errors.numRue"));
    			}
    			if (personne.getAdresse().getRue() == null || personne.getAdresse().getRue().equals("".trim())) {
    				erreurs.add("rue", new ActionMessage("errors.rue"));
    			}
    			if (personne.getAdresse().getCodePostal() == null || personne.getAdresse().getCodePostal().equals("".trim())) {
    				erreurs.add("codePostal", new ActionMessage("errors.cp"));
    			}
    			if (personne.getAdresse().getVille() == null || personne.getAdresse().getVille().equals("".trim())) {
    				erreurs.add("ville", new ActionMessage("errors.ville"));
    			}
    		}
    		return erreurs;
    	}
     
    }
    le message resource rajouté contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Errors
     
    errors.login=Le champ identifiant doit être renseigné.
    errors.mdp=Le champ mot de passe doit être renseigné.
    errors.numRue=Le champ numéro de rue doit être renseigné.
    errors.rue=Le nom de la rue doit être renseigné.
    errors.cp=Le code postal doit être renseigné.
    errors.ville=Le nom de la ville doit être renseigné.
    et la page du formulaire appelée est:
    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
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
     
    <html:html>
    <head>
    <title>Page login</title>
    </head>
     
    <body>
     
    <html:errors />
     
    <html:form action="/Input" method="post">
     
    <nested:nest property="personne">
     
    	<bean:message bundle="myResources" key="login" />
    	<nested:text property="identifiant" />
    	<html:errors property="login" />
    	<br>
    	<bean:message key="mdp" bundle="myResources" />	
    	<nested:text property="mdp" />
    	<html:errors property="mdp" />
    	<br>
     
    <nested:hidden property="page" value="1" />
    <html:submit value="Soumettre"/>
     
    </nested:nest>
    </html:form>
     
    </body>
    </html:html>
    Je n'ai pas d'erreurs, mais lorsque que j'appuie sur le bouton pour passer a la page suivante, la validation n'est pas prise en compte. Les champs non renseignés ne créent pas d'erreur, et il n'y a pas de retour sur la page qui vient d'etre envoyée.

    et là, je vois vraiement pas d'où ca vient .

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    J'ai du mal à voir ce qui cloche, tout a l'air OK. As-tu essayé avec un balise <nested:form> au lieu de <html:form> ?

  3. #3
    vny
    vny est déconnecté
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    Par défaut
    Est ce qu'il rentre dans ta méthode validate ou pas ?

  4. #4
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    j'ai l'impression que ca ne passe pas par la methode 'validate' mais je ne vois pas comment le vérifier ?

  5. #5
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    System.out.println("coucou"); au début de la méthode devrait técrire dans la console coucou si ca passe dans la méthode.
    SInon tu peux utiliser le systeme de logger si tu en as installer un.

  6. #6
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Ok, j'ai bien coucou qui s'affiche donc la methode 'validate' est bien appelée mais ne fait pas son boulot.

  7. #7
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Tu dis que les messages d'erreurs de validation sont codés dans le fichier des messages que tu as ajouté donc je suppose mesMessages.properties.

    Dans la méthode validate, quand tu fais appel à ActionMessage, par défaut, il va chercher les clés des messages dans le fichier MessageResources.properties.
    Je pense qu'il ne doit donc pas trouver les clés errors.login et autres.

  8. #8
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Mon test n'est pas bon au niveau de la methode.

    si je met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.getIdentifiant().equals("")
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.getIdentifiant().equals("".trim())
    La page se réaffiche avec des emplacements pour les erreurs. Par contre les messages d'erreur ne sont pas affichés.

    visiblement la fonction trim() n'etait pas placée au bon endroit, c'est plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.getIdentifiant().trim().equals("")
    Ce qui permet de ne pas prendre des espaces pour une reponse valide.

  9. #9
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Citation Envoyé par c_nvy
    Tu dis que les messages d'erreurs de validation sont codés dans le fichier des messages que tu as ajouté donc je suppose mesMessages.properties.

    Dans la méthode validate, quand tu fais appel à ActionMessage, par défaut, il va chercher les clés des messages dans le fichier MessageResources.properties.
    Je pense qu'il ne doit donc pas trouver les clés errors.login et autres.
    Effectivement, quand je met les messages d'erreur dans le properties par defaut, il les affiche bien. J'avais egalement une erreur au niveau des test effectués dans la méthode 'validate'. Le tuto que je suis est plein d'erreurs !

    Est-il possible de spécifier un emplacement personnalisé pour les messages d'erreur personnalisés ?

  10. #10
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    bien sur !
    regarde la balise <message-resources> du struts-config.xml, la définition est située ici si mes souvenir sont bons.

  11. #11
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    en fait j'ai bien une ressource supplémentaire pour les messages défini dans le struts-config, qui est valide puisque je peux afficher les messages contenus.

    Mais je ne vois pas comment appeler cette ressource a la place de la ressource par defaut dans le cas d'un affichage d'erreur.

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Citation Envoyé par yozine
    visiblement la methode 'trim' crée des problèmes, d'ailleurs je ne vois pas a quoi elle sert.
    La méthode trim() enlève les espaces au début et à la fin d'une chaine :
    " hello world ".trim() => "hello world".

    Donc, dans ton cas, elle ne pose aucun problème, mais ne sert absolument à rien.
    En revanche, au passage, il est déconseillé de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.getIdentifiant().equals("")
    car si ton objet est null, tu auras une NullPointerException.
    préfère cette tournure, qui sera OK même si l'objet est null (renverra false) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "".equals(personne.getIdentifiant())

  13. #13
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Citation Envoyé par mixouille
    La méthode trim() enlève les espaces au début et à la fin d'une chaine :
    " hello world ".trim() => "hello world".

    Donc, dans ton cas, elle ne pose aucun problème, mais ne sert absolument à rien.
    En revanche, au passage, il est déconseillé de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.getIdentifiant().equals("")
    car si ton objet est null, tu auras une NullPointerException.
    préfère cette tournure, qui sera OK même si l'objet est null (renverra false) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "".equals(personne.getIdentifiant())
    je viens justement de modifier le post , le trim etait pas au bon endroit, mais c ok maintenant.

    Je comprend pas trop, pourquoi ca peut créer des erreurs de faire le 'equals' dans ce sens ?

  14. #14
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    je vois pas pourquoi la deuxieme solution ne créerait pas d erreur de pointeur nul
    .

    Bon je remet la question qui me turlupine:
    Est-il possible de spécifier un emplacement personnalisé pour les messages d'erreur personnalisés ?

  15. #15
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    va faire un tour sur ce site, je n'ai pas testé mais ca en parle

    http://bhuvans.wordpress.com/2006/08...age-resources/

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Citation Envoyé par yozine
    je vois pas pourquoi la deuxieme solution ne créerait pas d erreur de pointeur nul
    Pour terminer, vu que c'est pas le sujet, tout simplement parce que "" est une chaine non nulle, donc l'appel de la méthode equals() dessus ne pose jamais de problème. Et comme la méthode equals sait traiter un paramètre null, ca ne plante pas.
    Tandis qu'en faisant tonString.equals(""), la méthode est appelée sur ton objet tonString, donc s'il est null, ca lève une NullPointerException.

    Mais je disais ca de manière générale, dans ton cas, vu que tu testes une propriété d'un form submitté, elle n'est probablement jamais nulle.

  17. #17
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Le plus simple est quand même de faire le test comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( nomDeLaPropriete == null || nomDeLaPropriete.length() == 0 )

  18. #18
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    J'ai dit une bêtise tout à l'heure concernant les ActionMessage.

    Si tu veux qu'il affiche les messages d'erreurs présents dans le deuxième fichier des messages, il suffit simplement d'ajouter l'attribut bundle dans le tag html:errors, comme tu l'as fait dans les tags bean:message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:errors bundle="myResources"/>

  19. #19
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Citation Envoyé par mixouille
    Pour terminer, vu que c'est pas le sujet, tout simplement parce que "" est une chaine non nulle, donc l'appel de la méthode equals() dessus ne pose jamais de problème. Et comme la méthode equals sait traiter un paramètre null, ca ne plante pas.
    Tandis qu'en faisant tonString.equals(""), la méthode est appelée sur ton objet tonString, donc s'il est null, ca lève une NullPointerException.

    Mais je disais ca de manière générale, dans ton cas, vu que tu testes une propriété d'un form submitté, elle n'est probablement jamais nulle.
    ok, oui c'est vrai que ca sort du sujet, mais par curiosité ca m'interesse. Je comprend mieux avec cette explication. Il ne faut pas que l'objet qui appelle la méthode soit nul, mais la méthode peut traiter un parametre nul. Merci.

  20. #20
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Citation Envoyé par vahid
    va faire un tour sur ce site, je n'ai pas testé mais ca en parle

    http://bhuvans.wordpress.com/2006/08...age-resources/
    Merci ,c'est une bonne explication, c'est plus orienté 'validator'. Ca va m'être utile pour la suite. Une fois que le problème de la méthode validate est résolu, j'attaque les ''validator'

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. pb avec struts et la methode validate()
    Par chakir76300 dans le forum Struts 1
    Réponses: 2
    Dernier message: 04/05/2007, 13h21
  2. Réponses: 2
    Dernier message: 06/07/2006, 08h22
  3. Réponses: 8
    Dernier message: 16/06/2006, 14h51
  4. [struts]validate dans chaque actionForm?
    Par questionneuse dans le forum Struts 1
    Réponses: 3
    Dernier message: 17/05/2006, 15h36
  5. [Struts] Problème avec la méthode validate
    Par clement42 dans le forum Struts 1
    Réponses: 2
    Dernier message: 09/06/2005, 10h52

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