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] Problème d'ActionForm qui ne s'instancie pas


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] Problème d'ActionForm qui ne s'instancie pas
    Bonjour,

    J'ai un problème avec Struts, j'ai du me rater quelque part car j'ai l'impression qu'il n'arrive pas à lire dans l'ActionForm...

    J'ai un formulaire dans lequel un combobox doit etre rempli à partir d'un ArrayList. Donc ce que je fais, c'est que je lance l'Action directement, comme ca la méthode execute charge l'ArrayList, et forward vers la jsp.

    Je précise que je n'ai aucun message d'erreur (ca m'aurait bien aidé) mais que l'affichage de la page comence puis s'arrête tout simplement.

    Voici le code de l'Action de départ :
    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
     
    public class NouvelArretAction extends Action {
     
        public ActionForward execute(ActionMapping mapping, ActionForm  form, HttpServletRequest request, HttpServletResponse response)   throws Exception {
            // 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();
            ArrayList l= new ArrayList();
            l.add(new LabelValueBean("aaaa","aaaa"));
            l.add(new LabelValueBean("aaaa","aaaa"));
            c.setListeMotifs(l);
            request.setAttribute("var","jjj");
            return mapping.findForward("afficheFormulaire");        
        }
    Voici le struts-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
     
    <form-beans>
            <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>
     
        <global-exceptions>
     
        </global-exceptions>
     
        <action-mappings>
            <action input="/login.jsp" name="LoginActionForm" path="/login" scope="session" type="com.myapp.struts.Action.LoginAction">
                <forward name="success" path="site.index.page"/>
            </action>
     
            <action input="/choixAgentForm.jsp" name="ChoixAgentForm" path="/choixAgent" scope="session" type="com.myapp.struts.Action.ChoixAgentAction">
                <forward name="afficheListeAgents" path="site.choixAgentForm.page"/>
                <forward name="afficheListeArrets" path="site.listeArretsAgent.page"/>
                <forward name="afficheListeConges" path="site.vueCongesAgent.page"/>            
            </action>
     
            <action parameter="action" input="/Vues/listeArretsAgent.jsp" name="ListeArretsAgentForm" path="/traiterArrets" scope="session" type="com.myapp.struts.Action.ListeArretsAgentAction">
                <forward name="nouvelArret" path="/nouvelArret.do"/>
                <forward name="supprimeArret" path="site.listeArretsAgent.page"/>
                <forward name="modifierArret" path="site.vueCongesAgent.page"/>            
            </action>   
     
            <action input="/Vues/listeArretsAgent.jsp" name="NouvelArretForm" path="/nouvelArret" scope="session" type="com.myapp.struts.Action.NouvelArretAction">
                <forward name="afficheFormulaire" path="site.nouvelArret.page"/>
            </action>
    voici l'ActionForm :
    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
     
    public class NouvelArretForm extends org.apache.struts.action.ActionForm {
     
        private ArrayList listeMotifs=new ArrayList();
        private String motif;
     
        public ArrayList getListeMotifs() {
            return listeMotifs;
        }
     
        public void setListeMotifs(ArrayList listeMotifs) {
            this.listeMotifs = listeMotifs;
        }
        /**
         *
         */
        public NouvelArretForm() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
            ActionErrors errors = new ActionErrors();
     
            return errors;
        }
     
        public String getMotif() {
            return motif;
        }
     
        public void setMotif(String motif) {
            this.motif = motif;
        }
    }
    et pour finir la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <br />
    <h3>Nouvel arrêt maladie pour l'agent <bean:write name="agent" property="nom"/> <bean:write name="agent" property="prenom"/></h3>
     
    <html:form action="nouvelArret">
        Motif de l'arrêt : 
     
        <logic:notEmpty property="listeMotifs">
            <html:select property="motif">
                <html:optionsCollection property="listeMotifs" value="value" label="label"/>
            </html:select>
        </logic:notEmpty>
     
    </html:form>
    Le pire c'est que la manip je l'ai déjà faite dans la même appli et que ca tourne bien !

    peut-être qu'à force de chercher il y a une erreur que je ne vois pas...

  2. #2
    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
    Je pense que l'ActionForm n'est pas créé, car lorsque j'enlève le code qui affiche le select, la vue s'affiche correctement.

    Je pense que lorsque les balises struts cherchent le bean de formulaire elles ne le trouvent pas et ca lance une erreur.

    Ce que j'arrive pas à determiner c'est pourquoi l'ActionForm n'est pas créé !!!

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    T sur que dans les log de tomcat y a pas d'erreur ?
    Regarde dans le fichier nommé localhost.dateDuJour si tu as rien

  4. #4
    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
    je vais voir dessuite !

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    et pkoi tu fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("var","jjj");
    ?

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    et pkoi tu met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:select property="motif">
    ?

    La property "motif" represente koi pour toi ?

  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
    après avoir regardé les logs avant et après execution de la page qui pose problème voilà la dernière erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    10 avr. 2006 21:07:54 org.apache.struts.taglib.tiles.InsertTag$InsertHandler doEndTag
    GRAVE: ServletException in '/Formulaires/nouvelArretForm.jsp': No name attribute was specified
    javax.servlet.ServletException: No name attribute was specified
    	at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
    	at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
    	at org.apache.jsp.Formulaires.nouvelArretForm_jsp._jspService(nouvelArretForm_jsp.java:98)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

  8. #8
    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
    La property "motif" represente koi pour toi ?
    C'est le nom que je donne à mon select, c'est dans ce bean que sera placée la valeur que l'utilisateur aura choisi à travers le select.

    et pkoi tu fais un :

    Code:
    request.setAttribute("var","jjj");


    ?
    C'est rien, c'etait juste pour tester à un moment si je passais bien dans la methode execute()

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    Dans ton arraylist tu insere une valeur de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l.add(new LabelValueBean("aaaa","aaaa"));
    Dans ta JSP tu fais reference a ta property "listeMotifs" qui est composé d'une value et d'un label. Les noms que tu as donné sont :

    <html:optionsCollection property="listeMotifs" value="value" label="label"/>
    Moi je pense que tu as :

    GRAVE: ServletException in '/Formulaires/nouvelArretForm.jsp': No name attribute was specified

    Car l'Action n'arrive pas a determiner se qu'est value="value" et label="label"

    La collection que tu remonte dans ta jsp doit avoir des propriété qui match avec els noms que tu spécifie dans ton select.

    Qu'en pense tu ?

  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
    Ca je le sors du livre de jean charles Félicité sur Struts, et ca marche dans un autre form de mon appli.

    En fait il explique que le LabelValueBean a 2 proprités qui sont le label et la value, donc quand je les appelle de la sorte dans le select, ca doit faire des getLabel() et getValue()

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    Essaye de remplacer :

    <html:select property="motif">
    par

    <html:select property="value">

  12. #12
    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, toujours pareil...

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    Bon il te manque un attribut name qq part ! Mais ou ?

  14. #14
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    dans ta balise logic ! l'attribut name est obligatoire je crois !

  15. #15
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    fait un test en enlevant ta balise logic ou met dans l'attribut name de ta balise logic l nom de la variable que tu test et dis moi si c pas mieux ? Ou alors change ton attribut property de ta balise logic par l'attribut name !

  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
    C'est bizarre dans le log il parle pas de Tiles?

    mais bon le problème viens bien du select.

    j'ai envie de mettre un arttribut statique dans l'ActionForm, et d'essayer de l'afficher dans la vue pour voir si l'ActionForm est bien instancié.

    qu'est ce que tu en pense? par contre je ne sais pas comment le récuperer dans la jsp, surement un bean:write mais avec quels paramètres?

  17. #17
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    T'as essayé de virer ta balise logic ? pkoi tu me parles de tiles ? Pour voir si ton action forms est bien instancié tu peux aussi faire un :
    System.err.println(le_nom_de_ton_bean);
    pour voir si une instance est presente ...

  18. #18
    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 viré logic c'est pareil et pour Tiles je disais ca parce sur la premiere ligne de l'erreur que j'ai ca parle de Tile (voir en page 1 de ce post)

  19. #19
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    et tu utilise tiles ou bien ? dsl javais pas vu

  20. #20
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Points : 88
    Points
    88
    Par défaut
    moi g un select qui marche qui est composé comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    					  <html:select property="id"> 
                            <html:optionsCollection property="liste" value="id" label="nom" /> 
                          </html:select>
    Mon ActionForm est composé des setters et des getters pour l'arraylist
    ce qui me permet de faire dans mon action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyForm myForm = (MyForm)form; 
    					myForm .setListe(liste);

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

Discussions similaires

  1. [MySQL] Problème de code qui ne s'affiche pas
    Par Santcho dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/06/2010, 10h37
  2. Réponses: 20
    Dernier message: 05/03/2009, 02h46
  3. Problème de DIV qui ne s'étendent pas
    Par sorry60 dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 28/06/2007, 15h49
  4. Problème de fenêtre qui ne se détruit pas
    Par Okydor dans le forum wxPython
    Réponses: 7
    Dernier message: 04/08/2006, 10h42

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