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 :

problème de validation avec DispachAction


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut validator et DispachAction
    Salut;
    J’utilise plusieurs actions pour une seul JSP regroupés dans une action de type DispachAction, le problème est que lorsque je met validate=true dans le mapping de cet DispachAction dans struts-config.xml il valide tous les actions contenues,
    comment je peux avoir le choix de valider l'action qui je veux dans une action englobante de type dispachAction

  2. #2
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Si khayri.
    Tu dois mettre la propriété reqCode dans ton formulaire et pr chaque bouton tu donne a reqCode la valeur en String de l'action a effectuer.
    Exemple: pr le bouton valider tu met reqCode="enregistrer" et dans ton action tu ecris une methode dont le nom est la valeur de reqCode c'est a dire enregistrer.
    Bonne chance

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut validation total
    merci
    mais je croix que tu n'as pas compri la problème
    je veux dire avec DispachAction la validation touche tous les actions contenues dans cette DispachAction

  4. #4
    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
    Tu veux dire que dans ton actionForm tu as une methode validate, et que ton action est une dispatchaction et que lorsque tu va dans une action il passe dans la methode validate mais ceux avec n'importe quelle action.
    C'est bien ca??
    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 --

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Je pense (comme maxF1) que ton problème vient de la méthode validate de l'actionForm...
    Pour faire des contrôles personnalisés, il te suffit de tester le paramètre lié à l'action, donc :
    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 ActionErrors validate(ActionMapping actionMapping,          HttpServletRequest request)
    {
       ActionErrors errs = new ActionErrors();
       String lc_parameterName = mapping.getParameter();
       String lc_methodName = request.getParameter(lc_parameterName);
     
       if ( lc_methodName.equalsIgnoreCase("??? UPDATE1") )
      {
    ...
      }
      else if ( lc_methodName.equalsIgnoreCase("??? UPDATE2") )
      {
    ...
      }
      return errs;
    }
    A toi d'adapter...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Merci
    Mais la problème est que je valide avec le framework validator dont on a pas la methode validate

  7. #7
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonsoir,
    il faut mettre validate a false dans ton struts-config et appeler la methode validate programmatiquement dans tes AcionForward struts qui doivent effectuer une validation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public ActionForward save(ActionMapping mapping, ActionForm actionForm,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
    		// Form validation
    		ActionErrors errors = form.validate(mapping, request);		
    		if (!errors.isEmpty()) { 
    			addErrors(request, errors); 
    			return reload(mapping, actionForm, request, response);
    		}
     
    ....
    return mapping.findForward("display");
    }
    Angelo

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    La problème reside dans la validation en un seul coup tous les actions qui sont sous DispachAction

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    pas de solution????

  10. #10
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonsoir,
    la solution que je t'ai decrite (appele le validate dans ton ActionForwad + validate a false dans ton struts-config) ne te conviens pas?

    Angelo

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Oui ne me convien pas parceque j'utilise le framework validator qui lui même implémante la methode validate()

  12. #12
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour,
    je ne comprends pas ou est ton probleme. L'exemple que je t'ai envoye est independant de l'implementation de tes ActionForms (ValidatorActionForm, ActionForm,...)

    Dans l'exemple, j'appelle la methode validate de ton ActionForm (je ne la re-implemente pas) et c'est completement independant de validator.

    Le fait de faire form.validate() appelera validator et utilisera les regles que tu as defini dans ton validation.xml

    Angelo

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    bonjour
    Oui, tu as raison mais la problème est que la validation s'effectue en totalité et moi je veux une validation personalisée cad pour chaque action je vailde quelques champs (je croix que ça le defaut de dispachAction, il valide la totalité de formulaire pour tous les actions )

  14. #14
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Salut,
    en effet le validator (par defaut) recupere le path de ton action que tu as mis dans ton struts-config.xml et recherche dans le validation.xml si il a un form defini avec ce path

    struts-config :

    <action path="myPath" validate="false"
    validation.xml

    <form name="myPath">...
    Toi ce que tu voudrais c'est d'etre plus fin et de distinguer ton <form en fonction de ton dispatch du style :

    <form name="myPath?dispatch=save">...
    <form name="myPath?dispatch=save2">...
    Si c'est ca que tu veux faire, il faut que tu surcharges la methode getValidationKey de ValidatorActionForm. Par defaut son code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public String getValidationKey(ActionMapping mapping, HttpServletRequest request)
        {
            return mapping.getPath();
        }
    Cette methode est utilise par le validator pour rechercher le formulaire defini dans le validation.xml. Comme tu peux le voir le cle utilise est le path de ton mapping.

    Si tu surcharges cette methode
    tu veux definir pour une action + un dispatch une regle de validation.
    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
     
    public class BaseForm extends ValidatorActionForm {
     
    	 public String getValidationKey(ActionMapping mapping, HttpServletRequest request)
    	    {
     
    	 		String dispatch = request.getParameter("dispatch");
    	 		if (StringUtils.isEmpty(dispatch)) {
    	 			// Le dispatch n'est pas defini VALIDATOR standard
    	 			return mapping.getPath();
    	 		}
    	 		// Le dispatch est definit construction de la cle
    	 		// avec le dispatch pour rechercher dans validation.xml
    	 		// le form : 
    	 		// <form name="myPath?dispatch=..."
    	        return mapping.getPath() + "?dispatch=" + dispatch;
    	    }
    }
    Je te conseille de creer une classe BaseForm et que toute tes classes Form herite de BaseForm et plus de ValidatorActionForm directement comme ca ca marchera pour toute ton application

    Angelo

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    salut,

    je viens de debuter avec struts mais ce que je sais c que dans:

    - struts-config.xml <action path="myPath" tu definis l'url de l'action
    -validation.xml <form name ="myPath" tu definis le nom du formulaire

    c pas la même chose

    corrigez moi si je trompe

    merci

  16. #16
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour
    le validator fonctionne avec le PATH de l'action Struts et pas le NAME de l'a

  17. #17
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Pardon je me suis trompe de touches.
    Je recommence

    le validator fonctionne avec le PATH de l'action Struts et pas le NAME de l'action. Le NAME de l'action est le nom du formulaire associe au NAME de form-bean

    Exemple struts-config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form-bean name="userDetailForm" type="...UserDetailForm"/>			
     
    <action path="/userdetail" parameter="dispatch" name="userDetailForm" validate="false" scope="request" type="....UserDetailAction">
    Exemple validation XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="/userdetail" >
    et PAS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="/userDetailForm" >
    comme on pourrait le croire. C'est souvent une source d'erreur que l'on fait.
    C'est pour ca qu'il est important de se donner des conventions de nommages pour ne pas se perdre.

    Angelo

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    salut

    là je travaille sur une application et j'utilise le plugin validator...

    alors quand je fais comme ca marche comme je le souhaite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <form name="rechercheCourrierForm">
     
    			<field property="module.code" depends="required">
    				<arg0 key="courrier.module" />				
    			</field>
     
    			<field property="courrier.code" depends="required">
    				<arg0 key="courrier.courrier" />				
    			</field>
     
    		</form>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    <action path="/rechercheVersions"
    			type="ccomptes.sami.courrier.presentation.action.CourrierAction"
    			name="rechercheCourrierForm" scope="request"
    			parameter="rechercheVersions" validate="true"
    			input="/prepareRechercheVersions.do"
    			habilitations="habilitationsRestantesParametreReference">
    			<forward name="success"
    				path="administration.recherche.courrier.simple" />
    		</action>

    mais j'ai essaye a l'instant de faire comme tu as dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <form name="/rechercheVersions">
     
    			<field property="module.code" depends="required">
    				<arg0 key="courrier.module" />				
    			</field>
     
    			<field property="courrier.code" depends="required">
    				<arg0 key="courrier.courrier" />				
    			</field>
     
    		</form>

    il me sors ce message d'erreurs:

    ServletException in '/WEB-INF/jsp/courrier/recherche/rechercherCourrier.jsp': No form found under 'rechercheCourrierForm' in locale 'fr'

    Moi j'ai appris ceci :
    À chaque formulaire correspond une balise form.
    name : attribut de la balise form, il permet de définir le nom du formulaire concerné. Ce nom correspond à celui défini dans le fichier struts-config.xml (attribut name de la balise form-bean).


    merci

  19. #19
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Je viens de regarder les sources de Struts 1.3.8, et ca a change apperement.
    Il n'ya plus de ValidatorActionForm mais uniquement ValidatorForm



    Ce que je disais etait valable pour Struts 1.2.9.

    Je pense que tu dois utiliser une version > 1.2.9 et dans ce cas tu as raison de faire comme ca.

    Excusez moi pour mon affirmation categorique. Cela fait plusieurs annee que je faisais comme ca. Struts a decide de changer.

    Et le code de getValidationKey qui permet de chercher le formulaire defini dans le validation.xml


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String getValidationKey(ActionMapping mapping,
            HttpServletRequest request) {
            return mapping.getAttribute();
        }
    et getAttribute retourne le nom du formulaire.

    Angelo

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    salut,

    effectivement j'utilise struts 1.3.8.
    moi aussi j'ai le même problème que khayri. Le fait de fournir au fichier validation.xml le nom du formulaire nous oblige à utiliser la même fonction validate a tout action gerée par ce formulaire...

    j'essaie toujours alors si je trouve une idée je vous tiendrai au courant.

Discussions similaires

  1. Problème de validation avec selectOneListbox
    Par khaoula_14_05 dans le forum JSF
    Réponses: 2
    Dernier message: 05/05/2008, 10h38
  2. [XHTML] Problème de validation avec javascript
    Par HwRZxLc4 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 16/12/2007, 00h13
  3. [DOM] Problème de validation avec un Schema et javax.xml.validation
    Par 84mickael dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 29/08/2007, 12h08
  4. Problème de validation avec le clientsocket
    Par stroumfs dans le forum Delphi
    Réponses: 2
    Dernier message: 03/11/2006, 18h41
  5. Réponses: 4
    Dernier message: 25/10/2006, 08h57

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