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 :

Modifier une collection d'objets dans un formulaire


Sujet :

Struts 1 Java

  1. #1
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Modifier une collection d'objets dans un formulaire
    Bonjour,

    J'ai un petit soucis avec une collection d'objets dans un bean.

    Voici le bean en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Notification extends ActionForm {
     
    	private TransfusionComponents transfusionComponents = new TransfusionComponents();
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class TransfusionComponents extends GenericBean{
    	
    	private String transfusedBloodComponentSelected;
    	private Collection transfusedBloodComponents = new ArrayList();
    ...
    Dans cette collection, je stocke des Beans du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class TransfusedBloodComponent extends GenericBean {
     
    	private String name;
    	private String allo;
    	private String auto;
    	private String unit;
    	private String other;
    	private ImageButtonBean removeButton = new ImageButtonBean();
    ...
    Dans le formulaire de création de la notification, je n'ai aucun soucis... la collection est correctement stockée dans la base de données.
    Lorsque je récupère cette notification pour la modifier, aucun soucis non plus, la collection est correctement affichée à l'écran.

    Par contre, lorsque j'essaye de modifier (supprimer une ligne, ou rajouter une ligne) à cette collection, je reçois systématiquement une 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
    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    description The server encountered an internal error () that prevented it from fulfilling this request.
     
    exception 
     
    javax.servlet.ServletException: BeanUtils.populate
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:716)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    	at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    	at java.lang.Thread.run(Thread.java:534)
     
     
    root cause 
     
    java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
    	at java.util.ArrayList.RangeCheck(ArrayList.java:507)
    	at java.util.ArrayList.get(ArrayList.java:324)
    	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:684)
    	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:493)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:716)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
    	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    	at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    	at java.lang.Thread.run(Thread.java:534)
    Quelqu'un pourrait-il me dire ce que signifie cette erreur, et surtout, comment faire pour pouvoir modifier la collection ?

    D'avance merci !

  2. #2
    Candidat au Club
    Inscrit en
    Février 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Est ce que tu supprimes tes élements dans une boucle?
    Si c'est le cas sache que c'est normal,car si tu as supprimé un élément et que la boucle continu de "tourner" cela va générer une erreur car ta collection contient un element en moins alors que la boucle est fait sur le nombre d'elements de depart

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    et ton code Struts dans la jsp ?

  4. #4
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <table border="1" cellspacing="0" width="100%" id="transfusedBCTypeNames">
    	<tr>
    		<th class="th3"><bean:message key="Notification.Hospital.TransBloodComp.Type"/></th>
    		<th class="th3"><bean:message key="Notification.Hospital.TransBloodComp.UnitNumber"/></th>
    		<th class="th3"><bean:message key="Notification.Hospital.TransBloodComp.Allogenic"/></th>
    		<th class="th3"><bean:message key="Notification.Hospital.TransBloodComp.Autolog"/></th>
    		<th class="th3" width="1%">&nbsp;</th>
    	</tr>
    	<nested:iterate property="transfusionComponents.transfusedBloodComponents">
    		<tr>
    			<td>
    				<nested:message property="name"/>
    				<nested:equal property="name" value="Notification.Hospital.TransBloodComp.Type.Other">
    					<nested:text property="other" size="30"/>
    				</nested:equal>
    			</td>
    			<td align="center">
    				<nested:text property="unit" size="24"/>
    			</td>
    			<td align="center">
    				<nested:checkbox value='true' property="allo"/>
    			</td>
    			<td align="center">
    				<nested:checkbox value='true' property="auto"/>
    			</td>
    			<td>
    				<nested:image srcKey="Notification.Hospital.TransBloodComp.Type.RemoveType" style="cursor:hand;"  altKey="Notification.Hospital.TransBloodComp.Type.RemoveType.Help" property="removeButton"/> 
    			</td>
    		</tr>
    	</nested:iterate>
    </table>
    Et pour snooze, l'erreur se produit alors que je ne modifie même pas ma collection. Lorsque je récupère mon bean, je modifie un des libellés qui se trouve dans la collection, et je valide, je reçois l'erreur...

  5. #5
    Candidat au Club
    Inscrit en
    Février 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Quand tu as ce type d'erreur

    java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
    at java.util.ArrayList.RangeCheck(ArrayList.java:507)
    at java.util.ArrayList.get(ArrayList.java:324)

    C'est que ca vient forcément d'une liste(tu ajoutes ou supprimes un élement de la liste alors que tu es entrain de la lire)

  6. #6
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je te promets que je ne modifie absolument pas la longueur de la liste...

    J'ai fait le test, sans rien modifier...
    - Je récupère le bean en modif
    - La page s'affiche correctement
    - Je renvoie la notification, sans y avoir rien changé, et j'obtiens le message d'erreur.

    C'est comme si la collection n'était pas liée au bean (pourtant elle s'affiche bien...).

    Je comprend rien...

  7. #7
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ok... j'ai finalement trouvé... quand je récupérais le bean pour le modifier, je ne remettait pas dans la session, mais uniquement dans la request.

    Cela fonctionne maintenant...

    Merci quand même à vous.

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

Discussions similaires

  1. Modifier une base de données dans un formulaire
    Par pascal1967 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/09/2014, 09h09
  2. Plusieurs éléments dans une collection d'objets
    Par soso78 dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/09/2008, 17h23
  3. Afficher une collection d'objets dans une datagridview
    Par thorgal1612 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/04/2007, 17h38
  4. Réponses: 6
    Dernier message: 24/03/2006, 09h22
  5. Modifier l'ordre des objets dans dans une liste
    Par Mac_Gyver dans le forum Access
    Réponses: 2
    Dernier message: 24/01/2005, 11h55

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