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 :

comment valider un formulaire avec la fonction validate


Sujet :

Struts 1 Java

  1. #1
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut comment valider un formulaire avec la fonction validate
    Bonjour,
    Je dois intégrer une fonctionnalité à un site struts déjà bien développé.
    J'ai un petit formulaire qui contient cette fonction validate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    	ActionErrors erreurs = new ActionErrors();
    	if (user == null || user.length() == 0)
    		erreurs.add("user", new ActionMessage("error.user.required"));
    	if (data == null || data.length() == 0)
    		erreurs.add("data", new ActionMessage("error.data.required"));
    	return erreurs;
    }
    et dans ma jsp qui soumet ce fameux formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <html:form action="/admin">
    	<p>
    	User : 
    	<html:errors property="user"/> 
    	<html:text property="user"></html:text>
    	</p>
    	<p>
    	Data :
    	<html:errors property="data"/> 
    	<html:text property="data"></html:text>
    	</p>
    	<html:submit>Valider</html:submit>
    </html:form>
    J'ai un fichier error.properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    user.required = essai
    data.required = essai
    Et j'ai rajouté cette ligne dans mon struts-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <message-resources parameter="error" key="error"/>
    Si dans ma jsp je teste mon bundle via un petit :
    <bean:message bundle="error" key="user.required"/>
    cela m'affiche bien ce que j'ai renseigné dans mon properties

    En revanche lorsque je soumet mon formulaire avec un des deux champs vides, j'arrive sur la page d'erreur de l'application (que je suppose être la page 404).

    J'ai essayé de bien développé ce que j'ai fais parce que à mon avis j'ai du passé à côté de quelque chose... Alors merci de votre aide

  2. #2
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Tu as codé les clés user.required et data.required dans le fichier properties.

    Donc, dans la méthode validate, il faut référencer ces mêmes clés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    	ActionErrors erreurs = new ActionErrors();
    	if (user == null || user.length() == 0)
    		erreurs.add("user", new ActionMessage("user.required"));
    	if (data == null || data.length() == 0)
    		erreurs.add("data", new ActionMessage("data.required"));
    	return erreurs;
    }
    et il faut préciser dans le mapping de l'Action, dans l'attribut input, la page vers laquelle tu veux être redirigé en cas d'erreur de validation.

    De plus, pour que la méthode validate aille chercher les messages d'erreurs dans le fichier error.properties, il faut le définir comme fichier properties accédé par défaut.
    Pour cela, il faut enlever l'attribut key :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <message-resources parameter="error"/>

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    Bonjour,

    Désolé de répondre aussi tard mais j'étais en vacances.
    Lorsque j'essaye de définir mon fichier properties comme fichier par défaut, j'ai un problème car il y a déjà un fichier défini par défaut (il semblerai que ce soit un fichier nécessaire pour l'identification en plus).
    Donc est ce que je peux me débrouiller avec l'attribut key?

    Merci de ton aide en tout cas.

  4. #4
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans ce cas, il suffit d'ajouter l'attribut bundle dans le tag html:errors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:errors property="user" bundle="error" />
    Sinon, pour info, pour éviter de coder un message pour chaque champ du formulaire dans le fichier error.properties, tu peux paramètrer le message.

    Pour cela, tu définis un seul message pour tous les champs obligatoires dans le fichier properties comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    errors.required=Le champ {0} est obligatoire.
    et dans la méthode validate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
    {
       ActionErrors erreurs = new ActionErrors();
       if (user == null || user.length() == 0)
    	erreurs.add("user", new ActionMessage("errors.required","user"));
       if (data == null || data.length() == 0)
    	erreurs.add("data", new ActionMessage("errors.required","data"));
       return erreurs;
    }

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    merci pour ton aide, j'ai du mal à comprendre comment afficher ensuite l'erreur

    dans mon struts.config j'ai mis une redirection via la balise input sur ma jsp qui affiche mon formulaire
    et pour chaque champs j'avais mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:errors property="user" bundle="error"/>
    par contre avec ta solution d'avoir un message général, je dois m'y prendre comment?

    encore merci

  6. #6
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par dams78 Voir le message
    par contre avec ta solution d'avoir un message général, je dois m'y prendre comment?
    Rien ne t'oblige à mettre en oeuvre cette solution.
    C'était juste un conseil pour te simplifier la vie.

    En fait, si tu codes ceci dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:errors property="user" bundle="error"/>
    ceci dans le fichier error.properties :
    errors.required=Le champ {0} est obligatoire.
    et enfin ceci dans la méthode validate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreurs.add("user", new ActionMessage("errors.required","user"));
    il va chercher dans le fichier des messages correspondant à la clé error, soit dans ton cas error.properties , le libellé du message correspondant à la clé errors.required et il remplace {0} par la valeur passée en deuxième argument du constructeur de la classe ActionMessage, soit user.

    Donc, si tu n'as pas saisi de valeur dans le champ user, il t'affichera :
    Le champ user est obligatoire.
    De la même manière, si tu codes ceci dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:errors property="data" bundle="error"/>
    et ceci dans la méthode validate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreurs.add("data", new ActionMessage("errors.required","data"));
    Si tu n'as pas saisi de valeur dans le champ data, il t'affichera :
    Le champ data est obligatoire.
    As-tu fait le test ?

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    Bonjour,

    Je viens d'essayer et en fait ça me retourne sur une page blanche. Je sais pas si je renseigne bien mon fichier struts.config, pour l'action j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <action path="/admin" type="...actions.AdminAction" name="adminForm" validate="true" scope="session" input="adminFormJsp">
    	<forward name="success" path="adminJsp"></forward>
    </action>
    adminFormJsp est la jsp qui affiche le formulaire
    adminJsp est la jsp qui affiche le résultat de l'action

    Et pour le bundle j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <message-resources parameter="error" key="error" />
    merci de ton aide

    --edit
    J'ai oublié de préciser que la page blanche retournée à comme adresse l'action /do/admin

  8. #8
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Le nom exact de tes jsp c'est quoi ?
    Elles ont bien une extension .jsp ?

    Il faut préciser l'extension dans l'attribut input de la balise action et également dans l'attribut path de la balise forward.
    Et il faut aussi ajouter un "/" devant :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <action path="/admin" type="...actions.AdminAction" name="adminForm"
            validate="true" scope="session" input="/adminFormJsp.jsp">
    	<forward name="success" path="/adminJsp.jsp"></forward>
    </action>

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    En fait les jps sont définies dans le fichier tiles-defs.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <definition name="adminFormJsp" extends="mainLayout">
    	<put name="body" value="/pages/adminForm.jsp"/>
    </definition>
    <definition name="adminJsp" extends="mainLayout">
    	<put name="body" value="/pages/adminDoctech.jsp"/>
    </definition>
    Je vais quand même essayer de la mettre en dur pour le input, on va voir ce que ça donne

    Merci

  10. #10
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Effectivement, je n'avais pas pensé au fait que tu pouvais utiliser les tiles.

    Dans ce cas, le mapping de l'Action AdminAction est correct.

    Par contre, si tu obtiens une page blanche, c'est soit qu'il ne trouve pas la page, soit qu'il y a une erreur dans la page.

    As-tu un message d'erreur dans la console ou la log du serveur ?

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    Au niveau de la log j'ai rien.
    Je te colle ma jsp, peut être que c'est là où est l'erreur
    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
     
    <table width="100%" cellpadding="0" cellspacing="0" border="0">
    	<tr>
    		<td width="154" height="490" valign="top" class="fondMenu">
    			<table border="0" cellpadding="0" cellspacing="0" class="left_menu">
    				<thead>
    					<tr>
    						<td class="titreMenu" height="46">Admin </td>
    					</tr>
    				</thead>
    				<tbody>
    					<tr><td class="table_footer">&nbsp;</td></tr>
    				</tbody>
    			</table>
    		<td>
    		<td valign="top">	
    			<html:form action="/admin">
    				<p>
    				User : 
    				<html:errors property="user" bundle="error"/> 
    				<html:text property="user"></html:text>
    				</p>
    				<p>
    				Data :
    				<html:errors property="data" bundle="error"/>  
    				<html:text property="data"></html:text>
    				</p>
    				<html:submit>Valider</html:submit>
    			</html:form>
    		<!-- <bean:message bundle="error" key="errors.required" arg0="toto" /> -->
    		</td>
    	</tr>
    </table>
    Le fait que le formulaire et les erreurs soient sur la même jsp ne pose pas de problèmes? D'après les exemple que j'ai trouvé je dirai que non mais je suis pas sûr.

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    Je viens de découvrir un truc.

    L'action qui me permet d'afficher mon formulaire est /adminForm.
    L'action qui traite et affiche les données est /admin.

    Donc normalement je suis sur l'adresse /do/adminForm, je remplis mon formulaire et j'atterris sur l'adresse /do/admin (ça c'est ok).
    Seulement si mon formulaire est mal renseigné donc en partant de /do/adminForm je devrai rester sur cette adresse et afficher ma jsp qui contient le formulaire et les balises erreurs. Or là j'atterris sur une page blanche avec comme adresse /do/admin.

    Ce comportement n'est pas normal, non?

  13. #13
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Peux-tu montrer le mapping de adminForm et la méthode validate ?

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    Bonjour,

    alors mon struts.config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <action path="/adminForm" type="...actions.AdminActionForm" name="adminForm" validate="false" scope="session">
    	<forward name="success" path="adminFormJsp" ></forward>
    </action>
    <action path="/admin" type="...actions.AdminAction" name="adminForm" validate="true" input="adminFormJsp" scope="session">
    	<forward name="success" path="adminJsp" ></forward>
    </action>
     
    <message-resources parameter="error" key="error" />
    et ma méthode validate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    	ActionErrors erreurs = new ActionErrors();
    	if (user == null || user.length() == 0)
    		erreurs.add("user", new ActionMessage("errors.required","user"));
    	if (data == null || data.length() == 0)
    		erreurs.add("data", new ActionMessage("errors.required","data"));
    	return erreurs;
    }
    je précise qu'en mode debug je rentre bien dans cette méthode validate

    merci de ton aide

  15. #15
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Et si dans l'attribut input, tu références /adminForm.do au lieu de adminFormJsp, cela fonctionne-t'il mieux :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <action path="/admin" type="...actions.AdminAction" name="adminForm" validate="true" input="/adminForm.do" scope="session">
    	<forward name="success" path="adminJsp" ></forward>
    </action>

  16. #16
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    toujours pareil
    par contre si je ne mets pas de input je me retrouve sur la page d'erreur de l'application (un truc spécial)

  17. #17
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Ben justement, ce ne serait pas "le truc spécial" de l'appli qui poserait problème parce que là, franchement, avec les éléments que tu m'as donné, je ne comprends pas pourquoi ça ne fonctionne pas.

  18. #18
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    Peut être oué, je vais essayer de savoir comment arrive cette page.
    Si j'y arrive parce que je suis loin d'être expert et l'appli m'a l'air bien compliqué.

    Je regarde ça demain, et si j'ai des infos je transmet.

    Merci de ton aide.

  19. #19
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par dams78 Voir le message
    Merci de ton aide.
    De rien.
    Tu me remercieras si je trouve pourquoi ça ne fonctionne pas.

  20. #20
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    Citation Envoyé par dams78 Voir le message
    toujours pareil
    par contre si je ne mets pas de input je me retrouve sur la page d'erreur de l'application (un truc spécial)
    Apparemment cette page n'est que la redirection de l'erreur 500.

    Ce que je n'arrive pas à comprendre c'est que quel que soit la valeur renseignée dans la balise input, je tombe sur la page de l'action qui suit le formulaire, enfin la page est blanche mais il s'agit de cette adresse.

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

Discussions similaires

  1. [AJAX] valider un formulaire avec une fonction ajax
    Par freums dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 18/02/2008, 11h34
  2. Réponses: 1
    Dernier message: 21/05/2007, 19h57
  3. Valider un formulaire avec la touche entree
    Par djedie dans le forum ASP.NET
    Réponses: 5
    Dernier message: 29/03/2007, 10h38
  4. Réponses: 6
    Dernier message: 03/04/2006, 09h42

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