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 ][ NESTED ] Invalid argument looking up property


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut [ STRUTS ][ NESTED ] Invalid argument looking up property
    Bonjour,

    J'ai un problème avec les tag nested.
    Voici le code de ma 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
    17
    18
    19
    20
    <html:form action="/store_scores">
    	<table border="1">
    		<nested:nest property="division">
    			<nested:iterate property="matchs">
    			<tr>
    				<td><nested:write property="j1"/></td>
    				<td><nested:write property="j2"/></td>
    				<td>Vs</td>
    				<td><nested:write property="j3"/></td>
    				<td><nested:write property="j4"/></td>
    				<td><nested:text property="sc1" size="3" maxlength="1"/></td>
    				<td><nested:text property="sc2" size="3" maxlength="1"/></td>
    		</tr>
    		</nested:iterate>
    	</nested:nest>
    		<tr>
    			<td colspan="7" align="center"><html:submit value="Envoyer" /></td>
    		</tr>
    	</table>
    </html:form>
    Voici le code de mon ActionFrom :
    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
    public class UpdateScoresForm extends ActionForm {
     
    	private Division division = null;
     
    	public Division getDivision() {
    		return division;
    	}
     
    	public void setDivision(Division inDivision) {
    		this.division = inDivision;
    	}
     
    	public ArrayList getMatchs() {
    		return division.getMatchs();
    	}
     
    	public void setMatchs(ArrayList inMatchs) {
    		this.division.setMatchs(inMatchs);
    	}
    }
    Voici la partie du code de mon action qui créée l'ActionForm contenant mes données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ArrayList l3 = this.getMatchs(ds, divid, listOfPlayers);
            	Division d = new Division(divName, null);
            	d.setMatchs(l3);
            	f2.setDivision(d);
            	request.getSession().setAttribute("form", f2);
                return mapping.findForward("suite");
    Voici le code de la classe division :
    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
    public class Division implements Serializable {
     
        private long id;
    	private String name;
        private List players;
        private ArrayList matchs;
     
        public Division(String name, List players) {
            super();
            this.name = name;
            this.players = players;
            this.matchs = new ArrayList();
        }
     
        public ArrayList getMatchs() {
            return this.matchs;
        }
     
        public void setMatchs(ArrayList inMatchs) {
            this.matchs = inMatchs;
        }
     
        public String getName() {
            return this.name;
        }
     
        public void setName(String inName) {
            this.name = inName;
        }
     
        public List getPlayers() {
            return this.players;
        }
     
        public void setPlayers(List inPlayers) {
            this.players = inPlayers;
        }
     
    	public long getId() {
    		return id;
    	}
     
    	public void setId(long id) {
    		this.id = id;
    	}
    }
    Voici le code de la classe Match :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    public class Match implements Serializable {
     
        private String j1;
        private String j2;
        private String j3;
        private String j4;
        private int sc1;
        private int sc2;
     
        public Match(String j1, String j2, String j3, String j4) {
            super();
            this.j1 = j1;
            this.j2 = j2;
            this.j3 = j3;
            this.j4 = j4;
            this.sc1 = 0;
            this.sc2 = 0;
        }
     
        public final String getJ1() {
            return this.j1;
        }
     
        public final void setJ1(String inJ1) {
            this.j1 = inJ1;
        }
     
        public final String getJ2() {
            return this.j2;
        }
     
        public final void setJ2(String inJ2) {
            this.j2 = inJ2;
        }
     
        public final String getJ3() {
            return this.j3;
        }
     
        public final void setJ3(String inJ3) {
            this.j3 = inJ3;
        }
     
        public final String getJ4() {
            return this.j4;
        }
     
        public final void setJ4(String inJ4) {
            this.j4 = inJ4;
        }
     
        public final int getSc1() {
            return this.sc1;
        }
     
        public final void setSc1(int inSc1) {
            this.sc1 = inSc1;
        }
     
        public final int getSc2() {
            return this.sc2;
        }
     
        public final void setSc2(int inSc2) {
            this.sc2 = inSc2;
        }
    }
    Lorsque j'exécute ma page, je reçois l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: Invalid argument looking up property division.matchs of bean frmStoreScores
    Or lorsque je n'utilise que des <c:forEach> pour afficher mes information alors je n'ai aucune erreur. J'en conclu que mon form contient bien un objet Division et que cet objet contient bien plusieurs matchs. Mais pourquoi alors les tags nested ne trouve pas d'accès à mes matchs ?

    Merci pour vos réponses.

    Lionelh

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Personne n'a de réponse à mon problème ?

    Merci d'avance.

  3. #3
    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
    Peux-tu montrer comment tu as défini l'action qui initialise ton formulaire UpdateScoresForm dans le struts-config ?

    As-tu bien mis dans l'attribut name le nom du form-bean correspondant à l'ActionForm UpdateScoresForm ?

    Si c'est le cas, supprime cette ligne dans l'action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getSession().setAttribute("form", f2);
    Modératrice Java - Struts, Servlets/JSP, ...

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    pourquoi ne fais tu pas simplement cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <nested:iterate property="division.matchs"> 
    <tr> 
       <td><nested:write property="j1"/></td> 
       <td><nested:write property="j2"/></td>  
       <td>Vs</td> 
       <td><nested:write property="j3"/></td> 
       <td><nested:write property="j4"/></td> 
       <td><nested:text property="sc1" size="3" maxlength="1"/></td> 
       <td><nested:text property="sc2" size="3" maxlength="1"/></td> 
    </tr> 
    </nested:iterate>
    Néanmoins ta solution devrait fonctionner...

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par c_nvy
    Peux-tu montrer comment tu as défini l'action qui initialise ton formulaire UpdateScoresForm dans le struts-config ?

    As-tu bien mis dans l'attribut name le nom du form-bean correspondant à l'ActionForm UpdateScoresForm ?

    Si c'est le cas, supprime cette ligne dans l'action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getSession().setAttribute("form", f2);
    Bonsoir,

    Comme l'attribut name était renseigné dans mon fichier struts-config, j'ai retiré la ligne mentionnée, mais cela ne corrige nullement le problème.

    Quelqu'un aurait-il une autre idée ?

    Merci d'avance.

    Lionelh

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Petite remarque:
    Dans ton action de création de ton form, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getSession().setAttribute("form", f2);
    Pourquoi faire cela, si tu déclares ton form en scope session pour cette action, cette instruction est inutile et de plus cela enlève la possibilité d'introduire des erreurs au niveau de ton form(cf. c_nvy ci dessus)

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  7. #7
    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
    Dans ton action qui initialises ton formulaire, tu as bien codé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UpdateScoresForm f2 = (UpdateScoresForm) form ;
    avant de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f2.setDivision(d);
    Modératrice Java - Struts, Servlets/JSP, ...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par SEMPERE Benjamin
    Petite remarque:
    Dans ton action de création de ton form, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getSession().setAttribute("form", f2);
    Pourquoi faire cela, si tu déclares ton form en scope session pour cette action, cette instruction est inutile et de plus cela enlève la possibilité d'introduire des erreurs au niveau de ton form(cf. c_nvy ci dessus)
    Ben en fait je débute avec struts, et donc je ne savais pas que le stockage en session était automatique via la délcaration dans le struts-config.
    Cela n'empêche que mon problème n'est pas résolu

    un autre idée ?

  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
    De plus, dans le code de ton ActionForm, je ne vois pas cette ligne-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private ArrayList matchs ;
    mais je suppose qu'elle y est sinon tu aurais des erreurs dans l'ActionForm.
    Modératrice Java - Struts, Servlets/JSP, ...

  10. #10
    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
    Citation Envoyé par c_nvy
    Dans ton action qui initialises ton formulaire, tu as bien codé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UpdateScoresForm f2 = (UpdateScoresForm) form ;
    avant de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f2.setDivision(d);
    Je repose ma question ?
    Modératrice Java - Struts, Servlets/JSP, ...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par c_nvy
    De plus, dans le code de ton ActionForm, je ne vois pas cette ligne-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private ArrayList matchs ;
    mais je suppose qu'elle y est sinon tu aurais des erreurs dans l'ActionForm.
    Non je n'ai pas cette ligne, car la liste de Match se trouve dans mon objet Division qui lui est présent dans mon form (Cfr listing dans mon 1er post).

  12. #12
    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
    oui mais tu as mis une méthode getMatchs et setMatchs dans ton ActionForm. Il faut donc déclarer l'attribut matchs.
    Modératrice Java - Struts, Servlets/JSP, ...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par c_nvy
    Citation Envoyé par c_nvy
    Dans ton action qui initialises ton formulaire, tu as bien codé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UpdateScoresForm f2 = (UpdateScoresForm) form ;
    avant de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f2.setDivision(d);
    Je repose ma question ?
    Non ça je n'ai pas j'ai plutôt effectué la création d'un tout nouveau Form.
    Voici le code de l'Action créant mon Form :
    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
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    		UpdateScoreCGForm f = (UpdateScoreCGForm) form;
    		long divid = f.getDivid();
    		UpdateScoresForm f2 = new UpdateScoresForm();
            DataSource ds = this.getDataSource(request, "kickerDS");
            Connection c = ds.getConnection();
            Statement s = c.createStatement();
            ResultSet rs = s.executeQuery("SELECT name FROM division WHERE id=" + divid);
            rs.next();
            String divName = rs.getString(1);
            rs.close();
            s.close();
            c.close();
            rs = null;
            s = null;
            c = null;
            Hashtable listOfPlayers = this.getListOfPlayer(ds);
            ArrayList l = this.getMatchs(ds, divid, listOfPlayers);
            if (l.isEmpty()) {
            	request.setAttribute("result", "Aucun groupe ne contient de match. Créer les matchs pour un groupe pour pouvoir visualiser ce groupe");
                return mapping.findForward("admin");
            } else  {
            	ArrayList l3 = this.getMatchs(ds, divid, listOfPlayers);
                Division d = new Division(divName, null);
                d.setMatchs(l3);
                f2.setDivision(d);
            	//request.getSession().setAttribute("form", f2);
                return mapping.findForward("suite");
            }
        }

  14. #14
    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
    Ah ben là, c'est sûr, ça ne va pas marcher
    Modératrice Java - Struts, Servlets/JSP, ...

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par c_nvy
    oui mais tu as mis une méthode getMatchs et setMatchs dans ton ActionForm. Il faut donc déclarer l'attribut matchs.
    En fait, j'ai créés ces 2 méthodes pour faire un test , mais cleui-ci n'a pas été concluant.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par c_nvy
    Ah ben là, c'est sûr, ça ne va pas marcher
    Et que faudrait-il changer pour que cela fonctionne ?

  17. #17
    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
    Deux form-bean dans une même action, je ne vois pas comment ça peut marcher.
    Modératrice Java - Struts, Servlets/JSP, ...

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Bon ben là j'ai une piste (à mon avis du à une mauvaise compréhension de STRUTS), je vais regarder car à mon toute l'application est foireuse mais je n'ai de problème qu'avec cette page-là. Dés que j'aurai une solution, je vous fait savoir ce qui clochait dans ma méthode !

  19. #19
    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
    Citation Envoyé par lionelh
    Citation Envoyé par c_nvy
    Ah ben là, c'est sûr, ça ne va pas marcher
    Et que faudrait-il changer pour que cela fonctionne ?
    un seul form-bean dans ton action.
    Modératrice Java - Struts, Servlets/JSP, ...

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Oui c'est ce que je dois corriger. Maintenant la question est comment vu que toute mon application est mal écrite, je pense que je vais la reprendre depuis le début

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

Discussions similaires

  1. [nested] Invalid argument looking up property
    Par verbose dans le forum Struts 1
    Réponses: 5
    Dernier message: 25/07/2011, 12h20
  2. [DisplayTag] Error looking up property "nom" in objet type "mysample.Personne"
    Par slyv dans le forum Taglibs
    Réponses: 3
    Dernier message: 02/03/2011, 17h53
  3. [struts] Nested a longeur variable
    Par l.machot dans le forum Struts 1
    Réponses: 8
    Dernier message: 16/09/2004, 16h33
  4. [Struts] Passer un argument dans un property
    Par Malaussene dans le forum Struts 1
    Réponses: 4
    Dernier message: 07/09/2004, 10h11
  5. [STRUTS][NESTED] et OptionCollection
    Par hamed dans le forum Struts 1
    Réponses: 15
    Dernier message: 03/02/2004, 12h27

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