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 :

[Struts-Validator] Pb de formulaire validé dans tous les cas


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut [Struts-Validator] Pb de formulaire validé dans tous les cas
    Bonjour,

    J'essaye de valider un formulaire en suivant la méthode des validators du livre de Jean-charles Félicité sur Struts.

    J'ai suivi ses instructions, mais mon formulaire se valide tout le temps, c'est à dire que la méthode execute() de l'Action correspondante au formulaire et executée à tous les coups alors qu'on ne devrais pas arriver là.

    Je vous donne mes fichiers :

    le struts-config.xml
    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
     
    <struts-config>
        <form-beans>
            <form-bean name="NouvelAgentForm" type="com.myapp.struts.ActionForm.NouvelAgentForm"/>
            <form-bean name="NouvelArretForm" type="com.myapp.struts.ActionForm.NouvelArretForm"/>
            <form-bean name="ListeArretsAgentForm" type="com.myapp.struts.ActionForm.ListeArretsAgentForm"/>
            <form-bean name="ChoixAgentForm" type="com.myapp.struts.ActionForm.ChoixAgentForm"/>
             <form-bean name="LoginActionForm" type="com.myapp.struts.ActionForm.LoginActionForm"/>
        </form-beans>
     
        <action input="/Vues/listeArretsAgent.jsp" name="NouvelArretForm" path="/nouvelArret" scope="session" type="com.myapp.struts.Action.NouvelArretAction">
                <forward name="afficheFormulaire" path="site.nouvelArret.page"/>
                <forward name="ajoutSuccess" path="site.ajoutArretOk.page"/>
            </action>
     
     
        <!-- ========================= Validator plugin ================================= -->
        <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
            <set-property
            property="pathnames"
            value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
        </plug-in>
    Le validation.xml
    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
     
     <formset>
     
            <!-- FORMULAIRE D'AJOUT D'ARRET -->
            <form name="NouvelArretForm">
                <field
                    property="dateDebut"
                    depends="required">
                    <arg key="NouvelArretForm.dateDebut"/>                
                </field>
                <field
                    property="dateFin"
                    depends="required, date">
                    <arg key="NouvelArretForm.dateFin"/>
                    <var>
                        <var-name>datePatern</var-name>
                        <var-value>dd/MM/YYYY</var-value>
                    </var>
                </field>
     
            </form>
     
        </formset>
    La 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
    15
    16
     
    <html:form action="nouvelArret">
        <html:errors/>
        <table border="0">
            <tr><td>Motif de l'arrêt :</td><td>
                <html:select property="motif"> 
                    <html:optionsCollection property="listeMotifs" value="value" label="label"/> 
                </html:select> 
            </td></tr>
            <tr><td>Date de début :</td><td><input type="text" name="dateDebut" value="jjmmaaaa" /></td></tr>
            <tr><td>Date de fin :</td><td><input type="text" name="dateFin" value="jjmmaaaa" /></td></tr>
            <tr><td>Commentaires :</td><td> <textarea name="memo" rows="4" cols="20"></textarea></td></tr>   
        </table>
        <br>
        <html:submit>Ajouter cet arrêt</html:submit>
    </html:form>
    Et l'ActionForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class NouvelArretForm extends org.apache.struts.validator.ValidatorForm {
     
        private ArrayList listeMotifs=new ArrayList();
        private String motif;
        private String dateDebut;
        private String dateFin;
        private String memo;
     
    .....getters/setters et constructeur....
    Voilà, je ne comprend pas le formulaire est validé à chaque fois !

    merci d'avance

    Seb.

  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 n'aurais pas par hasard laissé la méthode validate dans ton ActionForm NouvelArretForm ?
    Il me semble en avoir vu une dans ton précédent post.

    Si ta validation est seulement basée sur le validator, il ne faut pas redéfinir de méthode validate.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    Salut,

    non ca ne change rien, mon formulaire est quand même validé lorsque je ne rempli pas les 2 champs date...

  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
    J'étais en train de modifier ma précédente réponse parce qu'en fait, le validate="true" est positionné par défaut si tu n'en codes pas un.
    Donc ma remarque n'était pas valable. Je l'ai donc supprimé.

    Regarde donc ce que j'ai écrit à la place.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    non j'ai bien fait gaffe à virer la validate() et pas non plus de reset()

    Voici ma méthode exectue() de l'Action à tout hasard, mais je ne pense pas qu'elle soit concernée par ce problème.

    A savoir que j'arrive sur ce formulaire en appellant l'Action un première fois, qui ensuite redirige vers la vue, mais je ne vois pas en quoi ca empecherai la validation de se dérouler...

    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
     
      public ActionForward execute(ActionMapping mapping, ActionForm  form, HttpServletRequest request, HttpServletResponse response)   throws Exception {
     
            // Test si premier passage, ou soumission du formulaire
            int idMotif=0;
     
            if (request.getParameter("motif")!=null)
                idMotif = Integer.parseInt(request.getParameter("motif"));
     
     
            // On rentre ici si un motif a été choisi dans la liste déroulante
            if (idMotif>0){
                // ici on crée l'arrêt, car si on est là c'est que le form a été valiudé
     
                return mapping.findForward("ajoutSuccess");
     
            }else {
                // Avant d'afficher le formulaire de saisie, on doit récuperer les motifs type d'arret
                // Passe ici avant le premier affichage afin de récuperer la liste qui remplira le select
                NouvelArretForm c=(NouvelArretForm) form;
                ArrayList l = new MotifArretMetier().getListePourSelect();
                c.setListeMotifs(l);
                return mapping.findForward("afficheFormulaire");
     
            }       
     
        }

  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
    Et si tu enlèves l'attribut value="jjmmaaaa" pour les deux champs dates dans ta jsp et que tu fais submit sans renseigner les champs dates, ça donne quoi ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    J'ai déjà essayé ca ce matin, et je viens de le refaire, c'est pareil le formulaire est validé ! c'est quand même épatant

  8. #8
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Je comprend pas bien comment fonctionne ton appli ? tu n'as qu'une seule action dans ton struts-config ??

    tu reboucles dessus a chaque fois ?
    Si c'est le cas, rien de plus normal qu'il utilise la validation de formulaire a chaque fois que tu valides.

  9. #9
    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
    Ce qui me gêne, c'est que c'est la même action qui initialise le formulaire et qui ensuite est appelée au submit du formulaire.

    PS : Pardon yolepro, je n'avais pas vu ta réponse.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    j'ai trouvé que ca pour initialiser le select qui est chargé depuis la base de données, si vous avez une autre technique je suis preneur !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    yolepro j'ai d'autres actions mais j'ai pas tout mis pour pas charger le topic

  12. #12
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Dans ce cas tu utilises deux Action bien distincte (a généraliser a ton application)

    une BuilderAction qui va se charger de construire ta page a afficher et une ValidationAction qui se charge de récupérer les valeurs de ton fomulaire et de faire le fonctionnel (controle bloquant, insere en base...)

    Ensuite dans ton BuilderAction tu forces le validate="false" et tu laisses par defaut a true dans l'action du ValidationAction.

  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
    C'est comme ça que je procède aussi.
    Une action qui initialise le formulaire et une qui est appelée au submit du formulaire, les deux actions pointant sur le même ActionForm.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    ah ok et j'appelle l'affichage de mon formuler par la builerAction toujours?

    roo j'ai buggé mon appli je sais pas comment à force de chercher l'erreur du validator

  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
    En effet, la première action à appeler est celle qui initialise ton formulaire, celle que yolepro a appelé BuilderAction.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    Ok je vais faire comme ca dorénavant, car j'ai souvent des formulaires à initialiser et ca sera plus clair en faisant comme vous dites !

    par contre la c'est pas mal, j'ai rien touché à ma source de données et voilà ce que me sors tocmat lorsque je rentre sur l'appli et que je m'authentifie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    javax.naming.NameNotFoundException: Le Nom comp n'est pas lié à ce Contexte
            at org.apache.naming.NamingContext.lookup(NamingContext.java:769)
            at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
            at org.apache.naming.SelectorContext.lookup(SelectorContext.java:136)
            at javax.naming.InitialContext.lookup(InitialContext.java:351)
            at cciacs.gesam.dao.dao.AdminDAO.<init>(AdminDAO.java:36)
            at com.myapp.struts.ActionForm.LoginActionForm.validate(LoginActionForm.java:61)

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    non c'est bon après redémarrage de Netbeans c'est redevenu normal...

  18. #18
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Si tu as fini avec ton problème, n'oublie pas le résolu

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    Juste une dernière question, plutot que d'ouvrir encore un topic :

    tout marche, j'ai mis aussi en place le javascript, mais je me demande un truc : si on doit valider par des méthodes situées dans des classes metiers perso, on peut le faire avec les validators où on doit utiliser le validate() classique?

  20. #20
    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 peux très bien combiner la validation par le validator et une validation java classique.
    Tu mets dans le validator tout ce qu'il est capable de gérer comme le required, date, ...
    Et tu implèmentes une méthode validate dans ton ActionForm qui fait appel aux méthodes de tes classes métiers.

    Pour que cela fonctionne, dans la méthode validate de ton ActionForm, il faut faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public ActionErrors validate (ActionMapping mapping,HttpServletRequest request)
    {
        ActionErrors errors = super.validate(mapping,request);
        if ( ... )
        {
          ActionMessage message = new ActionMessage(...) ;
          errors.add("...",message) ;
        }
    }

Discussions similaires

  1. Demarrage impossible dans tous les cas
    Par chefinf dans le forum Ordinateurs
    Réponses: 10
    Dernier message: 09/01/2009, 22h39
  2. $db->query ne marche pas dans tous les cas
    Par bigorre1000 dans le forum Zend_Db
    Réponses: 8
    Dernier message: 22/07/2008, 19h50
  3. Réponses: 1
    Dernier message: 17/03/2008, 20h29
  4. [CloseWindow] Quitte dans tous les cas
    Par michaeljeru dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/05/2007, 14h45
  5. Priorité aux familles dans tous les cas
    Par aline921 dans le forum Congés
    Réponses: 6
    Dernier message: 06/03/2007, 16h53

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