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 :

Probleme avec java.lang.IndexOutOfBoundsException


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Probleme avec java.lang.IndexOutOfBoundsException
    Bonjour,

    Je suis entrain de travailler sur une JSP pour l'affichage d'un tableau dans qui contient :
    • des Sections
    • des lignes
    • des Colonnes

    j'utilise un objet Tableau comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Tableau extends PersistentObject {
        private String nom;
        private String code;
        private List<Section> sections = new ArrayList<Section>();
     
     geters & setters;
    }
    la section est définie comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Section extends PersistentObject {
        private String libelle;
        private String code;
        private Tableau tableau;
        private List<Colonne> colonnes = new ArrayList<Colonne>() ;
        private List<Ligne> lignes = new ArrayList<Ligne>();
     
    getters & setters;
    }
    J'initialise l'objet Tableau à partir de la BD et je le set dans mon ActionForm.

    sur la JSP j'utilise le tag <nested:iterate> pour itérer sur les lignes et les colonnes de chaque section et construire l'affichage de mon tableau.

    dans ma JSP j'ai une listBOx qui me permet de changer de tableau. quand cela est fait j'appelle mon action pour initialiser l'objet Tableau.

    Mon problème c'est que quand je change de tableau il me sort l'exception 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
    	at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    	at java.util.ArrayList.get(ArrayList.java:322)
    	at org.hibernate.collection.PersistentBag.get(PersistentBag.java:423)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:433)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:340)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:664)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
    	at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:884)
    	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:467)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:818)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:194)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    	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 org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at ma.gov.tax.simplis.view.filters.forms.FormsFilter.doFilter(FormsFilter.java:113)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at ma.gov.tax.simplis.view.filters.security.AuthorizationFilter.doFilter(AuthorizationFilter.java:79)
    	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.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
    	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:856)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
    	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(Thread.java:595)
    j'ai verifié toutes mes ArrayList mais il sont correctement alimentées

    j'ai cherché la cause mais sans succès, mais je soupçonne le <nested:iterate>.

  2. #2
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 106
    Points
    106
    Par défaut
    Bonjour,
    est ce que tu peus nous donner le code que tu as mis dans ta jsp ?

    De plus je suis pas sur que tes objets soit bien implémentés.
    Je m'explique :
    >Tableau contient une liste de Section
    >Section contien une liste de Ligne
    >Ligne contien une liste de Cellules

    Même si il est possible d'avoir une liste des colonnes la gestion me semble plus difficile car les Cellules contenu dans les colonnes doivent être celle dans les lignes.

    L'idéal serait d'avoir un tableau à deux entrée de suite

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse.

    voilà le code que j'ai mis dans 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
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <nested:iterate property="selectedTableau.sections" name="LiasseFiscaleForm" scope="session">
        <nested:define id="sectionLimitee" property="limitee" />
        <nested:define id="sectionId" property="id" />
        <nested:size id="numbercolonnes" property="colonnes" />
        <tr>
          <td>
            <table id="<nested:write property="libelle"/>" width="100%">
              <tr class="odd">
                <nested:equal value="false" property="limitee">
                  <td colspan="<c:out value="${numbercolonnes+1 }"/>" align="center" style="font-weight: bold">
                     <nested:write property="libelle" />
                  </td>
               </nested:equal>
               <nested:equal value="true" property="limitee">
                  <td colspan="<c:out value="${numbercolonnes }"/>" align="center" style="font-weight: bold">
                      <nested:write property="libelle" />
                  </td>
               </nested:equal>
             </tr>
             <tr class="total_txt">
                 <nested:iterate property="colonnes">
                    <th><nested:write property="libelle" /></th>
                 </nested:iterate>
                 <nested:equal value="false" property="limitee">
                    <th>Action</th>
                 </nested:equal>
                 <nested:size id="numberlignes" property="lignes" />
    	     <c:if test="${numberLignes!=0 }">
                   <tr>
    		<nested:iterate property="lignes">
    		  <tr class="total_txt">
                        <nested:iterate property="cellules">
                        <nested:equal value="true" property="colonne.entete">
    			<td align="center" style="text-align: left">
    			    <nested:write property="ligne.libelle" />
    			</td>
    			</nested:equal>
    		    <nested:equal value="false" property="colonne.entete">
    		        <td align="center">
    			<nested:equal value="true" property="editable">
                               <nested:equal value="Texte" property="colonne.typeDonnee.libelle">
                                  <nested:text property="valeur.valeur" onkeyup="document.forms[0].tabEdited.value=true"/>
                               </nested:equal>
    			   <nested:equal value="Date" property="colonne.typeDonnee.libelle">
    			     <nested:text property="valeur.valeur" onkeyup="isDate (this.value);document.forms[0].tabEdited.value=true;" style="text-align: right" onchange=""/>
                              </nested:equal>
    			  <nested:equal value="Entier" property="colonne.typeDonnee.libelle">
    			    <nested:text property="valeur.valeur" onkeyup="IsNumeric(this );document.forms[0].tabEdited.value=true;"  style="text-align: right" />
    			  </nested:equal>
    			  <nested:equal value="Double" property="colonne.typeDonnee.libelle">
    			     <nested:text property="valeur.valeur" onkeyup="IsDouble (this );document.forms[0].tabEdited.value=true;" onchange=""  style="text-align: right" />
    			  </nested:equal>
    			</nested:equal> 
    			<nested:equal value="false" property="editable">
    		           <nested:text property="valeur.valeur" readonly="true" />
    			 </nested:equal>
    		    </td>
    		 </nested:equal>
                 </nested:iterate>
    	     <c:if test="${sectionLimitee==false }">
    		 <td align="center">
                       <a href="./resultatFiscal/LiasseFiscale.do?method=deleteLigne&ligne=<nested:write property="id" />&section=<c:out value="${sectionId }" />"> Supprimer</a>
                    </td>
                </c:if>
    	 </tr>
    	</nested:iterate>
           </tr>
          </c:if>
        </table>
      </td>
     </tr>
     <nested:equal value="false" property="limitee">
    	 <tr align="right">
    		 <td><input type="submit"
    onclick="document.forms[0].action+='?section=<nested:write property="id" />';setActionMethod('addLigne')" value="Ajouter une ligne" />
                    </td>
    	 </tr>
     </nested:equal>
     </nested:iterate>
    Tout ce traitement est pour pouvoir récupérer les données saisies dans ce tableau par l'utilisateur et puis les traitées et cela a travers les inputs générer qui sont en fait une valeur representer par un objet CELLULE qui est identifier par la ligne et la colonne.

  4. #4
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 106
    Points
    106
    Par défaut
    Bon j'accède pas à beaucoup de page Internet donc ce que je vais dire est à vérifier

    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <nested:iterate property="cellules">
                        <nested:equal value="true" property="colonne.entete">
    Est ce que Struts ne cheche pas à accéder à la valeur cellules.colonne.entete ?

    Essayes de faire juste ta boucles dans une page de tests la plus simple possible pour voir si cela fonctionne autrement dit en écrivant juste la valeur des cellules.


    Car ton erreur est lié à l'accèss d'une propriété et non pas à une erreur dans la boucle nested:iterate à mon avis et sans pouvoir vérifier

Discussions similaires

  1. Probleme avec java.lang.StringIndexOutOfBoundException
    Par OneStar dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 07/09/2010, 16h29
  2. Réponses: 5
    Dernier message: 10/07/2007, 18h20
  3. probleme Tomcat java.lang.IllegalStateException
    Par lulululucie dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 29/12/2006, 12h53
  4. Probleme erreur java.lang.NullPointerException
    Par Tsukaasa dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2006, 19h19
  5. probleme avec java.util.Scanner
    Par d-a-v-e dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 04/05/2006, 23h08

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