You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Matt Bathje <mp...@ntsource.com> on 2003/11/20 18:15:33 UTC

dynamically sized form

Hi all.

I am trying to have a dynamically sized forming using indexed properties. I
am using the following article:
http://www.developer.com/java/ejb/article.php/2233591
as a guide, and have almost got it. The form appears to get properly
generated, and each element is listed as taxRates[3].ID, etc. I am putting
the form bean into the session scope (I think) as the article states, but
when I submit, I get an error: javax.servlet.ServletException:
BeanUtils.populate, root cause: java.lang.ArrayIndexOutOfBoundsException at
java.lang.reflect.Array.get(Native Method)    (a full stack trace is at the
bottom of the message).

As far as I can tell, this happens before any code in my action is being
processed. (The first line of the action is to print "hello" to the log, and
that never even happens)

I am using The struts nightly build from 11/19/03 to make sure it isn't a
bug or something like that, because what I am seeing here is very similar to
bugzilla report #23465

Here are relevant code snippets:

The form bean:
<form-bean name="advancedTaxRatesCurrentForm"
type="org.apache.struts.action.DynaActionForm">
    <form-property name="taxRates" type="com.ntso.rsg.bus.tax.TaxRateBean[]"
/>
</form-bean>

The action mapping:
<action path="/admin/taxRatesUpdateAction"
type="com.ntso.rsg.admin.view.settings.TaxRateAction" scope="session"
name="advancedTaxRatesCurrentForm">
    <forward name="success" path=".view.admin.advancedTaxRates"
redirect="true"/>
    <forward name="failure" path=".view.admin.errorPage" redirect="true"/>
</action>

The preloader:
request.setAttribute("taxRates", allTaxRates);  // where allTaxRates is a
TaxRateBean[]

The jsp form:
<html:form action="admin/taxRatesUpdateAction">
    <logic:iterate id="taxRates" name="taxRates" indexId="ctr" >
        <html:checkbox indexed="true" name="taxRates" property="delete" />
        <html:hidden indexed="true" name="taxRates" property="ID" />
        <html:text indexed="true" name="taxRates" property="ratePercent"
style="width: 50px; text-align: right;"/>
    </logic:iterate>
    <html:submit value="Update"/>
</html:form>

For the action, I have tried three different things:
Try 1: (DynaActionForm) myForm = (DynaActionForm) form;
Try 2: (DynaActionForm) myForm = (DynaActionForm)
session.getAttribute("advancedTaxRatesCurrentForm");
Try 3: TaxRateBean[] myForm = (TaxRateBean[])
session.getAttribute("advancedTaxRatesCurrentForm");

All three things yield the same error, and as stated above, the error occurs
before any of my code in the action. The action itself is extending
org.apache.struts.action.Action; and is just a standard execute method.

Searching on the web and in the archives has yielded some people with
similar problems, but so far I have not been able to find a solution that
works.

Just for reference, the platform for this is:
Windows XP Pro
Tomcat 4.1.24
Struts Nightly Build 11/19/03
Java 1.4.2

Any help about what I'm doing wrong would be greatly appreciated!! As
stated, the full error stack trace is attached below.

Thanks,
Matt Bathje




Stack trace of error:
javax.servlet.ServletException: BeanUtils.populate
 at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:844)
 at
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.j
ava:823)
 at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:243)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1176)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:472)
 at com.ntso.rsg.RsgStrutsServlet.doPost(RsgStrutsServlet.java:52)
 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(Application
FilterChain.java:247)
 at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193)
 at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:256)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(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.ja
va:191)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(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.StandardContext.invoke(StandardContext.java:2415)
 at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180
)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:643)
 at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java:171)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:641)
 at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172
)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(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.java
:174)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(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.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
 at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
 at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne
ction(Http11Protocol.java:392)
 at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
 at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:619)
 at java.lang.Thread.run(Thread.java:534)

root cause
java.lang.ArrayIndexOutOfBoundsException
 at java.lang.reflect.Array.get(Native Method)
 at org.apache.struts.action.DynaActionForm.get(DynaActionForm.java:295)
 at
org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUt
ilsBean.java:431)
 at
org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUt
ilsBean.java:385)
 at
org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUti
lsBean.java:727)
 at
org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean
.java:758)
 at
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:92
5)
 at
org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:852)
 at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:343)
 at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:842)
 at
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.j
ava:823)
 at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:243)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1176)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:472)
 at com.ntso.rsg.RsgStrutsServlet.doPost(RsgStrutsServlet.java:52)
 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(Application
FilterChain.java:247)
 at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193)
 at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:256)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(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.ja
va:191)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(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.StandardContext.invoke(StandardContext.java:2415)
 at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180
)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:643)
 at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java:171)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:641)
 at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172
)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(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.java
:174)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(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.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
 at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
 at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne
ction(Http11Protocol.java:392)
 at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
 at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:619)
 at java.lang.Thread.run(Thread.java:534)


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org