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 :

IndexOutOfBoundsException et ArrayList


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut IndexOutOfBoundsException et ArrayList
    Bonjour à tous !

    J'aimerais soumettre un formulaire contenant une liste d'objets complexes mais a sa soumission j'obtiens : IndexOutOfBoundsException.

    En investiguant sur le web, une des solutions qui revient est de passer par la session afin d'eviter l'appel a la methode reset. C'est ce que j'ai fait (a la fois dans la jsp et au niveau du struts-config) mais cette methode reset est toujours invoquée

    Voici mon formulaire

    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
     
    public class ExtourneMvtForm extends OperationForm{
     
        /* Liste des lignes de Mouvements de l'extourne */
    	private List		mouvements		= null;
     
       getter/setter
     
    // this is the definition of the complext objects to be stored in the list
    /**
             * Classe interne gerant l'Object Metier attaché a la ligne du Schema Comptable * 
             */
    	public class LigneMvt extends MetierBean {		
     
    		private String  typMvt       = null;
    		private String  libTypMvt   = null;
    		private double	mntOri		 = 0;
                    private String  devOri		 = null;
     	        private double	mntExtourne	 = 0;
    	        private String  devExtourne  = null;
    	        private String  topExtourne  = null;
        getter/setter
        }
     
    }
    et voici 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
     
    <logic:iterate id="mouvements" name="operationForm" property="mouvements" >	
    <TR >  
     
    <TD>
    <html:text indexed="true" name="mouvements" property="metier.typMvt" size="10" readonly="true" styleClass="Texte2"/>
    </TD>	
    <TD>
    <html:text indexed="true" name="mouvements" property="metier.libTypMvt" size="40" readonly="true" styleClass="Texte2"/>
    </TD>
    <TD id="ListeTab" width="120">
    <html:text indexed="true" name="mouvements" property="metier.mntOri" size="20" readonly="true" styleClass="ZoneNum" />
    </TD>
    <TD id="ListeTab" width="120">
     
    <html:text indexed="true" name="mouvements" property="metier.mntExtourne" size="20" />
    </TD>
     
    </TR>
    </logic:iterate>
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ben oui, c'est normal, c'est même la première méthode invoquée...
    Mais qui a bien pu te mettre cette solution en tête

    Le truc le plus simple (je pense) pour ces traitement est de passer par <nested>
    Au niveau du bean, il faut rajouter un getter/setter indexé
    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
    package demo;
    
    import java.util.ArrayList;
    import java.util.List;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    
    public class ProcessForm extends ActionForm
    {
        private static final long serialVersionUID = 1;
        private List<Structure> list = new ArrayList<Structure>();
    
        public ProcessForm()
        {
            super();
            list.add(new Structure("BUTTERLIN", "Olivier"));
            list.add(new Structure("TSCHIRHART", "Dominique"));
        }
    
        public List<Structure> getList()
        {
            return list;
        }
    
        public void setList(List<Structure> list)
        {
            this.list = list;
        }
    
        public Structure getList(int idx)
        {
            return list.get(idx);
        }
        
        public void setList(int idx, Structure elem)
        {
            list.set(idx, elem);
        }
    }
    Dans la page, ce serait
    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
     
    <%@ taglib uri="/WEB-INF/struts-html" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-nested" prefix="nested" %>
    <%@ taglib uri="/WEB-INF/struts-logic" prefix="logic" %>
    <html:html>
    <body>
        <html:form action="/process">
        <nested:iterate property="list">
            <nested:text property="nom"/>
            <nested:text property="prenom"/>
            <br>
        </nested:iterate>
     
        <html:submit>Envoyer</html:submit>
        </html:form>
    </body>
    </html:html>
    Simple non ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert confirmé

    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
    Par défaut
    Comme le dit très justement OButterlin, la méthode reset est systématiquement invoquée au submit du formulaire, que le form-bean soit en scope request ou en scope session.
    Donc, si tu mets le form-bean en scope session, il ne faut pas réinitialiser la List dans la méthode reset.
    Il faut par contre la définir comme ceci dans l'ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	private List mouvements = new ArrayList() ;
    Une autre solution qui fonctionne avec le form-bean dans le scope request consiste à utiliser les Lazy List comme indiqué ici.

    Sinon, je me permets de réagir concernant l'utilisation des tags nested.
    Ils sont effectivement plus simples à utiliser mais justement parce que leur fonctionnement permet d'éviter de coder getter et setter indexé sur l'objet de type LigneMvt dans l'ActionForm.
    Le getter et setter indexé n'est utile que lorsqu'on utilise l'attribut indexed="true".

Discussions similaires

  1. [ArrayList]transformer l'objet récupéré en double...
    Par snoop dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 16/07/2004, 16h16
  2. [info]arrayList ou Vector
    Par schousso dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/05/2004, 15h47
  3. [info]ArrayList
    Par schousso dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 06/05/2004, 11h44
  4. [Fichier] Ajout des lignes de doc dans arraylist
    Par 3adoula dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 29/04/2004, 22h41
  5. [ STRUTS ][ JSP ][ ArrayList] un lien pour trier
    Par LoulouFifi dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/02/2004, 17h24

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