Michael,
The problem is that the get method is being called when your Collection is
empty. This is causing the ArrayIndexOutOfBounds exception that you are
seeing. What I have done to prevent this problem is to code my getXXXXX(int
index) and setXXXX(int index, Object obj) methods like this:
public Object getMyVector(int index) {
if (index >= myVector.size())
return "";
return myVector.get(index);
}
public void setMyVector(int index, Object value) {
int size=myVector.size();
if (index >= size) {
for(int i=size; i<=index; i++) {
myVector.add("");
}
}
myVector.set(index,value);
}
For the get method, I just return an empty string if the index is bigger
than the current size of the vector. For the set method, I increase the size
of the vector up to the index if the current size is smaller, otherwise I
just set the value that the index points to. This alleviates the need to
pre-fill the Vector in the constructor.
This solution also works with indexed properties in an html form too.
Regards,
Richard
> -----Original Message-----
> From: Michael Olszynski [SMTP:[EMAIL PROTECTED]]
> Sent: Wednesday, December 18, 2002 9:08 AM
> To: 'Struts Users Mailing List'
> Subject: beanutils populate problem with formbeans and vectors
>
> Hi,
>
> I�ve always get an Exception, when I try to change my scope in the
> struts-config.xml from "session" to "request".
> I think the problem is that I have a getter and setter for a vector in my
> formbean.
> Everything works well with the scope "session". My formbean is also
> working if i completly remove the getter/setter vector out of my bean and
> my jsp�s.
> But I�d like to use a bean in a scope session with a getter/setter for
> vectors. Anybody has a clue about this problem. I read some things in the
> mailarchive, but that didn�t help me.
>
> This is the error:
> javax.servlet.ServletException: BeanUtils.populate
> at
> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:980)
> at
> org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor
> .java:779)
> at
> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:24
> 6)
> at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1292)
> at
> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
> onFilterChain.java:247)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
> Chain.java:193)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.
> java:260)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:643)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480
> )
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.
> java:191)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:643)
> at
> org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java
> :246)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:641)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480
> )
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:1
> 80)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:643)
> at
> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValv
> e.java:170)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:641)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:1
> 72)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:641)
> at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:641)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480
> )
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.ja
> va:174)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:643)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480
> )
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> at
> org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.jav
> a:1040)
> at
> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:11
> 51)
> at java.lang.Thread.run(Thread.java:536)
>
> root cause
>
> java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
> at java.util.Vector.get(Vector.java:713)
> at
> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtil
> s.java:503)
> at
> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtil
> s.java:410)
> at
> org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils
> .java:749)
> at
> org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:
> 780)
> at
> org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:793)
> at
> org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:726)
> at
> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:978)
> at
> org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor
> .java:779)
> at
> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:24
> 6)
> at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1292)
> at
> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
> onFilterChain.java:247)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
> Chain.java:193)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.
> java:260)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:643)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480
> )
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.
> java:191)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:643)
> at
> org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java
> :246)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:641)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480
> )
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:1
> 80)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:643)
> at
> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValv
> e.java:170)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:641)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:1
> 72)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:641)
> at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:641)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480
> )
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.ja
> va:174)
> at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.inv
> okeNext(StandardPipeline.java:643)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480
> )
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> at
> org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.jav
> a:1040)
> at
> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:11
> 51)
> at java.lang.Thread.run(Thread.java:536)
>
> Thanks Michael
> --
> Fehlerfreie Software wirkt weniger komplex und diskreditiert damit den
> Entwickler!
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>