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 :

[Validator] Javascript non conforme avec une DispatchAction


Sujet :

Struts 1 Java

  1. #1
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Par défaut [Validator] Javascript non conforme avec une DispatchAction
    Bonjour,
    Apres une longue consultation (j'y suis depuis 15h00) sur le forum et sur le net, j'aimerais avoir une reponse personnalisée, car là je suis perdu.
    J'associe validator + DispatchAction + javascript sur un fomulaire composé. Tout se passe bien jusqu'à la deuxieme page (page="1"), le code source du javascript est le même que pour la premiere page. Il ne focntionne donc pas pour les champs de cette nouvelle page.
    Pourtant les listes d'erreurs <html:errors /> sont bien specifiques à la page en cours. Pourquoi le javascript ne suit pô ? Comment se fait le lien ? Par qui est généré le javascript ?
    Un petit coup de main, s'il-vous-plaît, ne me ferait pas de mal.

    EDIT: j'utilise le ValidatorForm que j'active dans ma classe action.

  2. #2
    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
    La soumission du formulaire sur la deuxième page se fait-elle bien via un bouton submit ?

  3. #3
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Par défaut
    Affirmatif, voici la page jsp correspondante:


    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
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    	pageEncoding="ISO-8859-1"%>
    <%@taglib prefix="html" uri="html"%>
    <%@taglib prefix="bean" uri="bean"%>
    <%@taglib prefix="logic" uri="logic"%>
    <%@taglib prefix="nested" uri="nested"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title><bean:message key="animal.titre" /></title>
    <html:javascript formName="animalPagesForm"/>
    </head>
    <body>
    <html:errors />
    <html:form action="/GestionAnimal?forward=pageAnimal" onsubmit="return validateAnimalPagesForm(this)">
    	<bean:message key="animal.nom" />
    	<nested:text property="nom" />
    	<html:errors property="nom" />
    	<br />
    	<bean:message key="animal.dateNaiss" />
    	<nested:text property="dateNaiss" />
    	<html:errors property="dateNaiss" />
    	<br />
    	<bean:message key="animal.type" />
    	<nested:text property="type" />
    	<html:errors property="type" />
    	<br />
    	<html:hidden property="page" value="0" />
     
    	<html:submit />
    </html:form>
    </body>
    </html>

  4. #4
    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
    As-tu une erreur Javascript quand tu cliques sur le bouton submit de la page 2 ?

  5. #5
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Par défaut
    Merci de m'aider c_nvy.
    Non je n'ai pas d'erreur javascript quand j'envoi la page 2. Le probleme est bien là d'ailleurs, car la balise <html:errors /> m'affiche les bonnes erreurs.

  6. #6
    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
    Peux-tu poster le code de la fonction javascript validateAnimalPagesForm_required générée par le Validator pour la page 1 et la page 2 (si toutefois c'est bien un required que tu as codé dans les règles de validation) ?

  7. #7
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Par défaut
    Oui bein-sûr:

    PAGE 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     function animalPagesForm_required () { 
         this.a0 = new Array("nom", "nom est requis.", new Function ("varName", " return this[varName];"));
         this.a1 = new Array("dateNaiss", "date de naissance est requis.", new Function ("varName", "this.datePattern='dd/MM/yyyy';  return this[varName];"));
         this.a2 = new Array("type", "type est requis.", new Function ("varName", " return this[varName];"));
        }
    PAGE 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     function animalPagesForm_required () { 
         this.a0 = new Array("nom", "nom est requis.", new Function ("varName", " return this[varName];"));
         this.a1 = new Array("dateNaiss", "date de naissance est requis.", new Function ("varName", "this.datePattern='dd/MM/yyyy';  return this[varName];"));
         this.a2 = new Array("type", "type est requis.", new Function ("varName", " return this[varName];"));
        }
    Je sais ceux sont les mêmes mais c'est pas moi qui fait l'insertion, c'est automatique !

  8. #8
    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
    nom, dateNaiss et type sont les propriétés du formulaire de la première page non ?
    Si c'est bien le cas, vu le code javascript généré, on sait maintenant pourquoi tu n'as pas de validation des propriétés de la deuxième page.

    Par contre, il faut maintenant trouver pourquoi il ne génère pas dans la deuxième page les lignes de validation pour les bonnes propriétés.

    Dans le fichier validation.xml, as-tu bien mis l'attribut page="0" pour les champs de la première page et page="1" pour les champs de la deuxième page ?

    Si c'est bien le cas, peux-tu faire un test en modifiant page="0" en page="1" et page="1" en page="2" sans oublier de modifier les valeurs du champ caché page dans chacune des pages jsp ?

  9. #9
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Par défaut
    Heu... J'ai a peu près tout remplacé sur mes numeros de page (--> validation.xml, methode reset() dans mon ValidatorForm, mes trois jsp... je vois rien d'autre), sauf que là le js fonctionne même plus sur la page 1. ça donne ça:

    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
    function animalPagesForm_required () { 
        } 
     
        function animalPagesForm_DateValidations () { 
        } 
     
        function animalPagesForm_minlength () { 
        } 
     
        function animalPagesForm_maxlength () { 
        } 
     
        function animalPagesForm_mask () { 
        } 
     
        function animalPagesForm_email () { 
        }


    EDIT: je rajoute peut-être un indice important mais j'avais oublié de changer le numero de page du champ "dateNaiss" dans le validation.xml (il était resté à "0") et c'est bien le seul champ que le javascript validait. A croire que ce fichier ne prend pas en considération le numero donné dans la jsp en champs caché...
    Après "correction" ("0" --> "1") le js ne repond plus et j'obtiens bien le code donne plus haut.

  10. #10
    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
    D'après l'exemple donné ici, on est bien sensé utiliser page="1" en premier.

    Le fait qu'aucun javascript ne soit généré après modif des numéros de page signifie peut-être tout simplement que la validation de la DispatchAction avec l'utilisation des attributs page dans le fichier validation.xml fonctionne seulement côté serveur.
    Si c'est bien le cas, il est bien dommage que cela ne soit pas écrit dans cette FAQ.

  11. #11
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Par défaut
    Je retire ce que j'ai dis, le validation.xml prend bien en compte le numero de page puisque la liste des "errors" correspond bien aux champs de la page. Par contre le fait que le js ne fonctionne même plus sur la page 1 (ou "0") en passant les pages de 0 à 1, prrrrrr
    J'utilise la version 1.2.8 de struts cela a peut-être été corrigé depuis.

  12. #12
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Par défaut
    Par rapport au lien dont tu me fais part, moi je n'utilise qu'un mapping/action pour tout le formulaire, cela fonctionne tres bien je viens encore de le vérifier...SAUF pour le javascript !

  13. #13
    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 également testé avec deux pages et un seul mapping pour tout le formulaire et j'ai exactement le même comportement que celui que tu observes.

    Donc, soit c'est un bug, soit c'est prévu pour fonctionner seulement côté serveur.

    ça vaudrait peut-être le coup d'essayer avec la 1.3.10 mais peut-être es-tu contraint d'utiliser une version précise de Struts ?

  14. #14
    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
    Alors, j'ai fait le test en Struts 1.3.8 et la validation javascript ne fonctionne toujours pas.
    J'ai même essayé avec deux mapping pour l'Action.
    Donc, je persiste à penser que seule la validation serveur est prévue dans ce cas particulier.

    Si tu tiens vraiment à faire une validation javascript via le Validator, il y a une solution en utilisant une MappingDispatchAction à la place d'une DispatchAction et une ValidatorActionForm à la place d'une ValidatorForm.

    L'Action doit hériter de MappingDispatchAction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MaMappingDispatchAction extends MappingDispatchAction
    {
    	public ActionForward methode1(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception
    	{
      	   ...
    	   return mapping.findForward("success") ;
    	}
    	public ActionForward methode2(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception
    	{
    	   ...
    	   return mapping.findForward("success") ;
    	}	
    }
    L'ActionForm doit hériter de ValidatorActionForm :
    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 MaValidatorActionForm extends ValidatorActionForm
    {
    	private String var1 ;
    	private String var2 ;
     
    	public String getVar1() {
    		return var1;
    	}
    	public void setVar1(String var1) {
    		this.var1 = var1;
    	}
    	public String getVar2() {
    		return var2;
    	}
    	public void setVar2(String var2) {
    		this.var2 = var2;
    	}
    }
    Dans le struts-config.xml, il faut définir autant de mapping que de méthodes de la MappingDispatchAction et mettre dans chaque attribut parameter le nom de chacune des méthodes :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <action path="/path1" type="monpackage.MaMappingDispatchAction" name="maValidatorActionForm"
    	 scope="session" validate="true" input="/page1.jsp" parameter="methode1">
    	<forward name="success" path="/page2.jsp"/>
    </action>
    <action path="/path2" type="monpackage.MaMappingDispatchAction" name="maValidatorActionForm"
    	 scope="session" validate="true" input="/page2.jsp" parameter="methode2">
    	<forward name="success" path="/page3.jsp"/>
    </action>
    Dans le fichier validation.xml, il faut définir une validation pour chaque path de l'Action :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form name="/path1">
    	<field property="var1" depends="required">
    		<arg key="var1"/>
    	</field>
    </form>
    <form name="/path2">
    	<field property="var2" depends="required">
    		<arg key="var2"/>
    	</field>
    </form>
    Code de la page page1.jsp :
    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>
     
    <head>
    	<html:javascript formName="/path1"/>
    </head>
     
    <body>
       <html:form action="path1" onsubmit="return validateMaValidatorActionForm(this);">
    	<html:text property="var1"/>
    	<html:submit value="ok"/>
       </html:form>
    </body>
     
    </html>
    Code de la page page2.jsp :
    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>
     
    <head>
    	<html:javascript formName="/path2"/>
    </head>
     
    <body>
       <html:form action="path2" onsubmit="return validateMaValidatorActionForm(this);">
    	<html:text property="var2"/>
    	<html:submit value="ok"/>
       </html:form>
    </body>
     
    </html>
    J'ai testé et ça fonctionne très bien.

  15. #15
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 61
    Par défaut
    Merci beaucoup pour ton aide c_nvy


    EDIT: ok ça fonctionne nickel, mais c'est quand même bizard comment ça se croise dans ma page jsp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html:javascript formName="/SavePersonne"/>
    </head>
    <body>
    <html:errors/>
    <html:form action="/SavePersonne" onsubmit="return validateAlterPersonne(this)">

  16. #16
    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
    Citation Envoyé par pilate Voir le message
    ok ça fonctionne nickel, mais c'est quand même bizard comment ça se croise dans ma page jsp.
    Que veux-tu dire par là ?
    C'est le fait que, dans le tag html:javascript, tu références le nom du form défini dans le fichier validation.xml et, dans l'attribut onsubmit, la méthode validate contenant le nom du form-bean qui te choque ?

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

Discussions similaires

  1. [DTD] valider un fichier XML avec une DTD
    Par Anubis dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/02/2008, 18h00
  2. Validation CSS non conforme
    Par Mister Nono dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 18/08/2006, 09h01
  3. Réponses: 6
    Dernier message: 03/04/2006, 09h42
  4. [SAX] ]Validation d'un Document avec une DTD
    Par laguiff dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 18/02/2004, 09h11

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