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 :

conflit Validator + DispatchAction


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut conflit Validator + DispatchAction
    bonjour,

    j'ai un formulaire basé sur une classe action héritée de 'DispatchAction'. Lorsque j'appuie sur le bouton valider du formulaire, il affiche les erreurs s'il y en a (ex: champs requis), jusque là tout va bien.. Puis lorsque qu'il n'y a plus d'erreurs a afficher, le controlleur ne fait pas passer a une autre page. Il ne se passe rien, même pas d'erreur.

    Si je ne valide pas les erreurs du formulaire (validate a false dans struts config), le passage d'une page a l'autre se fait bien, toujours en utilisant la classe qui hérite de 'DispatchAction'.

    Donc le validator semble me bloquer le passage dans ma classe d'action.

    un peu de code:
    Le fichier de config:
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <struts-config>
     
      <form-beans>
        <form-bean name="animalForm" type="myStruts.form.AnimalForm" />
      </form-beans>
     
      <action-mappings>
        <action 
        	type="myStruts.action.AnimalAction"
        	input="/pages/animal.jsp" 
        	name="animalForm" 
        	attribute="animal"
        	path="/GestionAnimal"
        	parameter="nomMethod" 
        	validate="true" >
        		<forward name="proprietaire" path="/pages/proprietaire.jsp" />
        		<forward name="adresse" path="/pages/adresse.jsp" />
        		<forward name="affiche" path="/pages/affiche.jsp" />
    	</action>
      </action-mappings>
     
      <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
     
      <message-resources parameter="MessageResources"/>
      <message-resources key="mesMessages" parameter="Struts.resources.messages"/>
     
      <plug-in className="org.apache.struts.tiles.TilesPlugin">
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
        <set-property property="moduleAware" value="true"/>
      </plug-in>
      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
      </plug-in>
     
    </struts-config>
    L'action form:
    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    package myStruts.form;
     
     
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
     
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.validator.ValidatorForm;
     
    import myStruts.bean.Adresse;
    import myStruts.bean.Identite;
     
     
    public class AnimalForm extends ValidatorForm {
     
    		private String nom;
    		private String dateNaiss;
    		private GregorianCalendar dateTmp;
    		private String age = "0";
    		private String type;
    		private Date date;
    		private Identite identite = new Identite();
     
     
     
    		public Identite getIdentite() {
    			return identite;
    		}
     
    		public void setIdentite(Identite identite) {
    			this.identite = identite;
    		}
     
     
    		/* public void reset(ActionMapping mapping, HttpServletRequest request) {
    			//if (page == 0) {
    				identite = new Identite();
    				identite.setNom("");
    				identite.setPrenom("");
    				identite.setEmail("");
    				identite.setAdresse(new Adresse());
    			//}
    		} */
     
    		public String getDateNaiss() {
    			return dateNaiss;
    		}
     
    		public void setDateNaiss(String dateNaiss) {
    			int anInt;
    			int moisInt;
    			int jourInt;
    			String[] mesDates = dateNaiss.split("/");
    			this.dateNaiss = dateNaiss;
    			try {
    				if (mesDates.length > 2) {
    					anInt = Integer.parseInt(mesDates[2]);
    					moisInt = Integer.parseInt(mesDates[1]);
    					jourInt = Integer.parseInt(mesDates[0]);
    					dateTmp = new GregorianCalendar(anInt, moisInt, jourInt);
    				}
    				} catch (Exception e){
    					this.dateNaiss = "" ;
    				}
    			}
     
    		public String getNom() {
    			return nom;
    		}
     
    		public void setNom(String nom) {
    			this.nom = nom;
    		}
     
    		public String getType() {
    			return type;
    		}
     
    		public void setType(String type) {
    			this.type = type;
    		}
     
    		public String getAge() {
    			date = new Date();
    			Calendar cal = new GregorianCalendar();
    			cal.setTime(date);
    			int annee = cal.get(Calendar.YEAR) - dateTmp.get(GregorianCalendar.YEAR);
    			age = String.valueOf(annee);
    			return age;
    		}
    	}
    la classe d'action:
    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
    /*******************************************************************************
     * Copyright (c) 2005 Eteration A.S. and others. All rights reserved. This
     * program and the accompanying materials are made available under the terms of
     * the Eclipse Public License v1.0 which accompanies this distribution, and is
     * available at http://www.eclipse.org/legal/epl-v10.html
     * 
     * Contributors: Eteration A.S. - initial API and implementation
     ******************************************************************************/
    package myStruts.action;
     
    import java.io.IOException;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.ServletException;
     
    import org.apache.struts.actions.DispatchAction;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
     
    public class AnimalAction extends DispatchAction {
     
    	public ActionForward pageAnimal(ActionMapping mapping,
    									ActionForm form, 
    									HttpServletRequest request, 
    									HttpServletResponse response)
    									throws IOException, ServletException {
    		System.out.println("on passe dans la classe action");
    		String target = "proprietaire";
     
    		return mapping.findForward(target);
    	}
     
     
    	public ActionForward pageProprietaire(ActionMapping mapping,
    			ActionForm form, 
    			HttpServletRequest request, 
    			HttpServletResponse response)
    			throws IOException, ServletException {
     
    String target = "adresse";
     
    return mapping.findForward(target);
    }
     
     
    	public ActionForward pageAdresse(ActionMapping mapping,
    			ActionForm form, 
    			HttpServletRequest request, 
    			HttpServletResponse response)
    			throws IOException, ServletException {
     
    String target = "affiche";
     
    return mapping.findForward(target);
    }
     
     
    }
    et le 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
     
    <html:html>
    <head>
    <title>Informations relatives à l animal</title>
    </head>
     
    <body>
     
    <html:form action="/GestionAnimal.do?nomMethod=pageAnimal">
     
    <bean:message key="animal.nom" bundle="mesMessages" />
    <html:text property="nom"/>
    <html:errors property="nom" header="" footer="" prefix="" suffix="" /><br>
     
    <bean:message key="animal.dateNaiss" bundle="mesMessages" />
    <html:text property="dateNaiss" />
    <html:errors property="dateNaiss" header="" footer="" prefix="" suffix="" /><br>
     
    <bean:message key="animal.type" bundle="mesMessages" />
    <html:text property="type" />
    <html:errors property="type" header="" footer="" prefix="" suffix="" /><br>
     
    <html:submit value="Valider" />
     
    </html:form>
    </body>
    </html:html>
    Si quelqu'un connait ce probleme ou voit des erreurs dans le code, je vous remercie de me le signaler.
    JAVA le dire a tout le monde

  2. #2
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Peut-etre y-a-til une erreur qui est levé par ton validator mais que tu n'affiches pas!

    Met la balise <html:errors/> comme ceci elle t'affichera toutes les erreurs levées!

    Si ce n'est pas le cas poste tes fichiers XML de validation
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    oui en effet, il affiche les erreurs de validation des 3 pages du formulaire.

    donc c'est normal qu'il ne valide pas la premiere page du formulaire.

    mon fichier validation.xml 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
    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
    81
    82
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE form-validation PUBLIC
             "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
             "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
     
    <form-validation>
     
        <global>
     
            <constant>
                <constant-name>codePostal</constant-name>
                <constant-value>^\d{2}[ .-]?\d{3}$</constant-value>
            </constant>
     
        </global>
     
        <formset>
     
            <form name="animal">
                <field property="nom" depends="required">
                        <msg name="required" bundle="mesMessages" key="errors.required" />
                        <arg key="animal.error.nom" bundle="mesMessages" />
                </field>
                <field property="dateNaiss" depends="required">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="animal.error.dateNaiss" bundle="mesMessages" />
                </field>            
                <field property="type" depends="required">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="animal.error.type" bundle="mesMessages" />
                </field>
                <field
                    property="identite.nom"
                    depends="required">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="identite.error.nom" bundle="mesMessages" />
                </field>
                <field
                    property="identite.prenom"
                    depends="required">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="identite.error.prenom" bundle="mesMessages" />
                </field>
                <field
                    property="identite.email"
                    depends="required, email">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="identite.error.email" bundle="mesMessages" />
                </field>
                <field
                    property="identite.adresse.numRue"
                    depends="required">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="identite.error.adresse.numRue" bundle="mesMessages" />
                </field>
                <field
                    property="identite.adresse.rue"
                    depends="required">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="identite.error.adresse.rue" bundle="mesMessages" />
                </field>
                <field
                    property="identite.adresse.codePostal"
                    depends="required, mask">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="identite.error.adresse.codePostal" bundle="mesMessages" />
                        	<var>
                        		<var-name>mask</var-name>
                        		<var-value>${codePostal}</var-value>
                        	</var>
                </field>
                <field
                    property="identite.adresse.ville"
                    depends="required">
                        <msg name="required" bundle="mesMessages" key="errors.required" />                
                        <arg key="identite.error.adresse.ville" bundle="mesMessages" />
                </field>
            </form>
     
        </formset>
     
    </form-validation>
    Si j'ai bien compris il faut que je separe les 3 formulaires, mais avec un request dispatcher, ca me semble pas clair .
    JAVA le dire a tout le monde

  4. #4
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    Ca fonctionnne bien si je rajoute une propriete page hidden dans les pages et un attribut page dans les champs du formulaire pour le validation.xml

    Dans animal.jsp je rajoute avant le submit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:hidden property="page" value="0" />
    et pour chaque champ de 'validation.xml' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                <field property="nom" depends="required" page="0">
                        <msg name="required" bundle="mesMessages" key="errors.required" />
                        <arg key="animal.error.nom" bundle="mesMessages" />
                </field>
    Par contre je me pose une nouvelle question, comment définir la valeur de 'input' indépendemment pour chaque action définie dans le 'Dispatch'. Parce que du coup, quand je suis a la deuxieme page du formulaire, les erreurs s'affichent sur la premiere page du formulaire quand je valide la page. ce qui est normal puisque qu'une seule valeur de input est définie pour les 3 actions du dispatch.. Y'a t il moyen de le définir pour chaque action du dispatch ?
    JAVA le dire a tout le monde

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    salut yozine
    j'ai eu moi aussi le probleme de faire cohabiter DispatchAction et Validator de struts, mon probleme est que la validation ce fait uniquement coté serveur or moi je veux que le cotrole javaScript ce fait coté client.
    est ce que toi tes controles ce fasse coté client ou bien coté serveur, et dans ce cas est ce n'est pas une limite imposé par l'association de DispatchAction et Validator.
    j'ai ouvert une discution sur ce probleme ici est ce quelqu'un à une idé
    merci d'avance.

  6. #6
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Citation Envoyé par khaledirb7
    mon probleme est que la validation ce fait uniquement coté serveur

    Euh si tu utilise le validator de struts toute les verifs se font coté serveur! Si tu veux une verif coté client faut faire du javascript!! Ou bien mettre un peu d'ajax à chaque fois que tu changes une valeur!
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  7. #7
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Points : 46
    Points
    46
    Par défaut
    portenawouak,
    à moins que je me trompe, le validator permet justement d'injecter automatiquement du js dans ton flux html

    :blablabla:

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

Discussions similaires

  1. Forward Validation DispatchAction
    Par nico.kalf dans le forum Struts 1
    Réponses: 3
    Dernier message: 03/09/2009, 14h42
  2. DispatchAction et Validator
    Par jems dans le forum Struts 1
    Réponses: 5
    Dernier message: 22/05/2008, 18h31
  3. DispatchAction et Validator
    Par Tanebisse dans le forum Struts 1
    Réponses: 18
    Dernier message: 23/04/2008, 15h22
  4. Réponses: 1
    Dernier message: 27/09/2007, 20h36
  5. probleme validator et DispatchAction
    Par khaledirb7 dans le forum Struts 1
    Réponses: 10
    Dernier message: 11/08/2007, 02h00

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