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]Bean populate & array index out of bound


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut [Struts]Bean populate & array index out of bound
    Bonsoir,

    J'ai une erreur que je n'arrive pas à résoudre.
    J'ai un ActionForm qui contient une collection à laquelle je souhaite ajouter des lignes. Pour cela j'affiche le contenu de cette collection au niveau d'une page JSP via un tag <nested:iterate> et j'ai ajouter un bouton ajouter une ligne qui redirige vers une action chargée d'ajouter une ligne à cette collection.

    Lors du premier ajout tout fonctionne correctement, ma ligne est bien ajoutée et elle apparait bien au niveau de ma JSP, mais lorsque je souhaite à nouveau ajouter une ligne, le reset se déroule correctement (si je me fie au log) mais ensuite juste après j'ai l'erreur suivante :

    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
     
    javax.servlet.ServletException: BeanUtils.populate
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
     
    ...
     
    Cause mère
     
    java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
    	at java.util.Vector.get(Vector.java:709)
    	at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:521)
    	at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:428)
    	at org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:770)
    	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:801)
    	at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:881)
    	at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
    ...
    Si vous avez une idée ...

    Merci d'avance.

    PS : Mon Form est en scope request, mais je ne pense pas que ça ait un lien ... car ça ne fonctionne pas qd je change le scope !!!

  2. #2
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    Fait voir du code, JSP, Action Form et consort.

    :@+

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Ben en fait j'ai l'impression qu'il n'est pas capable d'alimenter ma Collection vu que ça plante lors du populate, mais d'un autre côté je vois pas trop comment il pourrait compte tenu du fait que à aucun endroit je n'y précise le type d'objet à insérer dans ma collection !!!

    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
    21
    22
    23
    24
    <table>
    	<tr class="top">
    		<td></td>
    		<td>N°ligne</td>
    		<td>Colonne 1</td>
    		<td>Colonne 2</td>
    		<td>Colonne 3</td>
    		<td>Colonne 4</td>
    	</tr>
     
    	<nested:iterate property="lignes" indexId="ind" offset="0" length="10">
     
    	<nested:notEqual property="statut" value="3">
    	<tr>
    		<td><nested:checkbox property="efface" /></td>
    		<td><nested:write property="numeroLigne"/></td>
    		<td><nested:write property="statut"/></td>
    		<td><nested:write property="designation"/></td>
    		<td><nested:write property="quantite"/></td>
    		<td><nested:write property="total"/></td>
    	</tr>
    	</nested:notEqual>
            </nested:iterate>
    </table>
    Mon 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
    public class MonActionForm extends ActionForm {
     
    	private Collection lignes;
     
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
                   this.lignes = new java.util.Vector();
    	}
     
    	public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    		return new ActionErrors();
    	}
     
    	public Collection getLignes() {
    		return lignes;
    	}
     
    	public void setLignes(Collection aLignes) {
    		lignes = aLignes;
    	}
     
     
    }
    Mon Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public ActionForward ajoutLignes(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
    		MonActionForm maf = (MonActionForm) form;
     
    		// On crée une nouvelle ligne
    		LigneSTR lstr = new LigneSTR();
          // On ajoute la nouvelle ligne aux lignes de la commande
    		maf.getLignes().add(lstr);
     
    		return mapping.findForward("default");
    	}
    Lors du premier ajout tout fonctionne correctement, la ligne est ajoutée et affichée dans ma JSP, mais ensuite quelque soit la manip que j'essaye de faire, il plante lors du bean populate. Le reset semble se dérouler correctement (si je me fie aux logs), mais le populate échoue ...
    Qu'ai je fait de travers ?

    Merci pour votre aide.

  4. #4
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    Ahhhhhhh, je viens juste d'y penser mais avec les collections il faut souvent reinitialiser la collection a 'vide' a chaque fois, dans la méthode reset du bean...


    @+

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Ben c'est ce que je fais non ?

    J'en ai eu marre alors je suis passé en scope session et je ne fais le reset que lors de mon premier accès au formulaire et ça fonctionne comme ça, pour le moment. Mais, ce qui m'énerve c'est qu'en scope request j'ai été incapable de le faire fonctionner

    Pas grave ...

    Merci RanDomX pour ton aide

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 105
    Points : 107
    Points
    107
    Par défaut
    T'es obligé de le mettre en scope session pour que tes valeurs de ta collection soient soumises (et donc prises en compte dans le submit)

    Lis cet article (en entier, c'set pas très long, y'a surtout des codes exemples, donc c'est plus compréhensible) sur l'utilisation des collections dans des formulaires, c'est tres utile (c'est avec ca que j'ai tout compris)

    http://www.developer.com/java/web/article.php/2233591
    "Plus on fait de conneries, moins on en aura à faire...."

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Merci pour cette doc !
    Effectivement il est précisé que le scope doit être session afin qu'on puisse récupérer les valeurs après soumission !

    thx

  8. #8
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai un problème similaire.
    J'ai dans mon formulaire du struts un vecteur:

    private Vector otherdimensions=new Vector();
    Dans ma vue (ma page jsp) j'ai des:
    <html:select ...></html:select>
    avec des options. Mon problème c'est que je ne sais pas comment stocker les valeurs des différents selects dans mon vecteur. Cad que lorsque je clique sur le bouton submit, ca prend la valeur des selects en question et que ça les stocke dans mon vecteur.

    Pourriez-vous m'aider s'il vous plaît?

    Merci d'avance.

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

Discussions similaires

  1. Array index out of range: 0
    Par Morji2810 dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 02/08/2013, 11h09
  2. Réponses: 1
    Dernier message: 05/08/2008, 18h27
  3. Réponses: 15
    Dernier message: 31/03/2007, 16h32
  4. index out of bound
    Par toure32 dans le forum Delphi
    Réponses: 1
    Dernier message: 07/11/2006, 15h51
  5. [Débutant]pb de fichier - array index out of bounds exception
    Par TheBlue dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 12/06/2006, 20h24

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