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 :

Passé un tableau dans un formulaire et le récupérer


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut Passé un tableau dans un formulaire et le récupérer
    Je tente depuis deux jours de passer un tableau via un formulaire.
    Mon formulaire JSP simplifié se présente ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        <html:form action="/saisie/enregistrerEtaCei">
            <html:hidden property="utilisateur" value="1"/>
            <html:text property="condition[0]" value="5"/>
            <html:text property="condition[1]" value="5"/>
            <html:text property="condition[2]" value="5"/>
            <html:reset>Rétablir</html:reset> 
            <html:submit>Enregistrer</html:submit>
       </html:form>
    Tout le jeu tourne autour de condition qui est un tableau.
    J'ignore la taille du tableau.
    Je souhaite le récupérer donc mon objet héritant de ActionForm se présente ainsi :
    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 EtaParCeiForm extends AbstractActionForm {
        /** @pdOid b5a9e49a-7110-4307-8785-3c3c02b2c764 */
        private static final long serialVersionUID = 22075692L;
     
        /** @pdOid fb92bfcc-57da-4f0b-99ef-4e372f8103aa */
        private Integer utilisateur;
     
     
        /** @pdOid a4ccfd0d-77b3-4f12-b8ca-a47cf847d8bf */
        public Integer getUtilisateur() {
            return utilisateur;
        }
     
        /**
         * @param newUtilisateur
         * @pdOid 402c7dcb-4c23-40c8-8374-337db07cb50e
         */
        public void setUtilisateur(Integer newUtilisateur) {
            utilisateur = newUtilisateur;
        }
        private Integer[] condition;
        /** @pdOid a4ccfd0d-77b3-4f12-b8ca-a47cf847d8bf */
        public Integer[] getCondition() {
            return condition;
        }
     
        /**
         * @param newUtilisateur
         * @pdOid 402c7dcb-4c23-40c8-8374-337db07cb50e
         */
        public void setCondition(Integer[] newCondition) {
            condition = newCondition;
        }  
    }
    Bon et bien, force est de constater que cela ne marche pas...

    J'obtiens l'erreur :
    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
    javax.servlet.ServletException: BeanUtils.populate
        at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
        at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:805)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
        at i2.application.commun.presentation.action.GenericActionServlet.process(GenericActionServlet.java:93)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at i2.application.commun.presentation.securite.MySecurityFilter.doFilter(MySecurityFilter.java:273)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at i2.application.commun.util.contexte.TimerFilter.doFilter(TimerFilter.java:70)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Unknown Source)
    Le fichier de log en sortie ne me donne rien d'autres...
    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
    [2007-07-20 15:04:36,841]   ERROR (org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/vh].[action]) - "Servlet.service()" pour la servlet action a généré une exception () 
    java.lang.NullPointerException
        at org.apache.commons.beanutils.PropertyUtilsBean.setIndexedProperty(PropertyUtilsBean.java:1414)
        at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1016)
        at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
        at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
        at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
        at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:805)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
        at i2.application.commun.presentation.action.GenericActionServlet.process(GenericActionServlet.java:93)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at i2.application.commun.presentation.securite.MySecurityFilter.doFilter(MySecurityFilter.java:273)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at i2.application.commun.util.contexte.TimerFilter.doFilter(TimerFilter.java:70)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Unknown Source)
    Quelqu'un peut-il me dire comment je peux passer mes valeurs de condition ? (Je précise que en fonction de la page je ne connais pas et ne peux pas connaître la taille du tableau de condition)
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Regarde mon post de tout à l'heure ici :
    http://www.developpez.net/forums/sho...d.php?t=381650
    Tu trouveras des pistes.

  3. #3
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Je suis sincèrement désolé J'ai pourtant fait une recherche. En même temps, je n'ai pas pensé à faire une recherche sur le mot "index".

    Merci, je vais déjà me pencher là dessus, cela va bien m'aider.

    (Par contre, j'ai honte, c'est trois messages en dessous du mien sur le forum )
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  4. #4
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Bon voici mon formulaire jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        <html:form action="/saisie/enregistrerEtaCei">
            <html:hidden property="utilisateur" value="1" />
                <logic:iterate id="tro" name="listeTroForm" indexId="index"    offset="0">
                    <html:text property="condition" value="${index + 5}" indexed="true" />
                </logic:iterate>
            <html:reset>Rétablir</html:reset>
            <html:submit>Enregistrer</html:submit>
        </html:form>
    Voici ma classe héritant de 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    public class EtaParCeiForm extends AbstractActionForm {
        /** @pdOid b5a9e49a-7110-4307-8785-3c3c02b2c764 */
        private static final long serialVersionUID = 22075692L;
     
        /** @pdOid fb92bfcc-57da-4f0b-99ef-4e372f8103aa */
        private Integer utilisateur;
     
     
        /** @pdOid a4ccfd0d-77b3-4f12-b8ca-a47cf847d8bf */
        public Integer getUtilisateur() {
            return utilisateur;
        }
     
        /**
         * @param newUtilisateur
         * @pdOid 402c7dcb-4c23-40c8-8374-337db07cb50e
         */
        public void setUtilisateur(Integer newUtilisateur) {
            utilisateur = newUtilisateur;
        }
     
     
        List<Integer> conditions = new ArrayList<Integer>();
     
        public List<Integer> getConditions(){
            return conditions;
        }
        public void setConditions(List<Integer> newConditions){
            conditions = newConditions;
        }
     
        public Integer getCondition(int index) {
            return getConditions().get(index);
        }
     
        public void setCondition(int index, Integer pj) {
            getConditions().set(index, pj);
        }
     
        private Integer[] condition;
        /** @pdOid a4ccfd0d-77b3-4f12-b8ca-a47cf847d8bf */
        public Integer[] getCondition() {
            return condition;
        }
     
        /**
         * @param newUtilisateur
         * @pdOid 402c7dcb-4c23-40c8-8374-337db07cb50e
         */
        public void setCondition(Integer[] newCondition) {
            condition = newCondition;
        }
     
    }
    Je suis heureux de voir que cela ne plante plus sur le message donné auparavant.
    Seulement mon ArrayList semble étrangement vide.

    Dans mon action, voici ce que je fais pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public ActionForward doExecute(ActionMapping mapping,
                AbstractActionForm form, HttpServletRequest request,
                HttpSession session, HttpServletResponse response,
                String idContexte, String sousAction) throws TechniqueException,
                RegleGestionException {
            EtaParCeiForm etatForm = (EtaParCeiForm) form;
     
            Integer toto = etatForm.getUtilisateur();
            Integer text = etatForm.getCondition(0);
     
     
            return mapping.findForward("succes");
        }
    toto à la bonne valeur
    Mais text ne peut pas être calculé (en fait etatForm.getConditions().size() retourne zéro.)
    Là en l'occurence j'ai logiquement une erreur qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    Apparement j'ai raté un point on dirait, tu vois lequel ?
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Tu peux faire voir le code html de la page stp?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Ton problème vient de ta JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        <html:form action="/saisie/enregistrerEtaCei">
            <html:hidden property="utilisateur" value="1" />
                <logic:iterate id="tro" name="listeTroForm" indexId="index"    offset="0">
                    <html:text property="condition" value="${index + 5}" indexed="true" />
                </logic:iterate>
            <html:reset>Rétablir</html:reset>
            <html:submit>Enregistrer</html:submit>
        </html:form>
    "condition" est la propriété que tu affiches, propriété de ton item de ta liste, donc ce n'est pas getCondition(index) que Struts cherche dans ton form de base, mais getTro(index).getCondition() (je sais, ca semble bizarre, mais c'est comme ça. Si certains ont des détails sur la bonne utilisation de Struts sur les posts de listes, je suis preneur ).
    Renomme donc tes accesseurs getCondition(int index) et setCondition(int index, Integer value) en getTro(int index) et setTro(int index, Integer value), je sais pas si ca marchera, mais ce sera déjà mieux.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Non mixouille, tro est l'id du logic:iterate. trop sert par exemple dans l'hypothèse ou la liste parcourue n'est pas une liste de string. un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <logic:iterate id="autorisation" name="listFonctionnalities" type="io.classesBase.Fonctionnality">
    					<td>
    						<tr>
    							<td></td>
    							<td><html:checkbox property="choix" value="<%=autorisation.getIdFonctionnalityToString()%>"/></td>
    							<td><bean:message key='<%=autorisation.getKeyNameFonctionnality()%>'/></td>
    						</tr>
    					<td>
    				</logic:iterate>
    Donc la ca a l'air bon le truc de tro....
    Par contre le value = ""... Je suis pas sûre que ce soit ok en fait....J'aurais plus fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value='<%= index.intValue()+5 %>'
    Mais à quoi ca te sert ca (je veux dire le "+5")....?

Discussions similaires

  1. [PHP-JS] Manipuler en Javascript un tableau dans un formulaire PHP
    Par Bouillons2 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/11/2010, 10h10
  2. longueur tableau dans un formulaire
    Par Ksmônote dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/03/2006, 14h38
  3. insérer un tableau dans un formulaire ACCESS
    Par julie76 dans le forum Access
    Réponses: 2
    Dernier message: 25/10/2005, 18h47
  4. [Tableaux] tableau dans un formulaire
    Par Elo13 dans le forum Langage
    Réponses: 4
    Dernier message: 26/09/2005, 17h28
  5. [ STRUTS ] [ LOGIC:ITERATE ] tableau dans un formulaire
    Par LoulouFifi dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/06/2004, 16h19

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