You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Alexey N. Shananin" <sh...@park.ru> on 2003/06/24 12:25:36 UTC

Accessing indexed properties in DynaActionForm (1.1rc2)

Hi!
I found no answer in an archives, so I'm asking now.

I've got an indexed property "phone", which has fields "num" and 
"pid"(phone ID)
the generated HTML is:
----------------------------------------------------

<tr><td>
<input type="hidden" name="phone[1].pid" value="528078">
<input type="text" name="phone[1].num" value="9795036"> (8)
</td></tr>
                    
<tr><td>
<input type="hidden" name="phone[2].pid" value="528738">
<input type="text" name="phone[2].num" value="9563743"> (8)
</td></tr>

----------------------------------------------------
The DynaActionForm bean in struts-config.xml:

----------------------------------------------------
        <form-bean name="EditRecordForm" 
type="org.apache.struts.action.DynaActionForm">
            <form-property name="cid" type="java.lang.String"/>
            <form-property name="name" type="java.lang.String"/>
            <form-property name="phone" type="Phone[]"/>
        </form-bean>
----------------------------------------------------
The "Phone" class has 2 java.lang.String private members (num, pid) with 
public get/set methods.

So, when I'm trying to call the Action's  execute  method,  I got the 
following exception occurs:

----------------------------------------------------
javax.servlet.ServletException: BeanUtils.populate
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1098)
	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1420)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:520)
	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(ApplicationFilterChain.java:247)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
	at ru.park.web.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:147)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
	at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
	at java.lang.Thread.run(Thread.java:536)

*root cause*

java.lang.ArrayIndexOutOfBoundsException
	at java.lang.reflect.Array.get(Native Method)
	at org.apache.struts.action.DynaActionForm.get(DynaActionForm.java:296)
	at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:474)
	at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:428)
	at org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:770)
	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:801)
	at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:881)
	at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1096)
	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1420)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:520)
	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(ApplicationFilterChain.java:247)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
	at ru.park.web.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:147)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
	at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
	at java.lang.Thread.run(Thread.java:536)

----------------------------------------------------


What Im I doing wrong?? Is there a trouble in configuration or I should 
implement some more classes?

Thanks!

-- 
Best regards,

Alexey N. Shananin (mailto:shananin@park.ru)
Java Developer, PARK.RU (http://www.park.ru)



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


Re: Accessing indexed properties in DynaActionForm (1.1rc2)

Posted by Gemes Tibor <ti...@i-trade.hu>.
Alexey N. Shananin írta:

> Hi!
> I found no answer in an archives, so I'm asking now.
>
> I've got an indexed property "phone", which has fields "num" and 
> "pid"(phone ID)
> the generated HTML is:
> ----------------------------------------------------
>        <form-bean name="EditRecordForm" 
> type="org.apache.struts.action.DynaActionForm">
>            <form-property name="cid" type="java.lang.String"/>
>            <form-property name="name" type="java.lang.String"/>
>            <form-property name="phone" type="Phone[]"/>
>        </form-bean>
> ----------------------------------------------------
> The "Phone" class has 2 java.lang.String private members (num, pid) 
> with public get/set methods.
>
> So, when I'm trying to call the Action's  execute  method,  I got the 
> following exception occurs:

By default the phone is null. However if you initialize it, and the form 
is in session scope
everything should work.
If the form is in request scope make sure that the phone array is 
initialized to the right size.


Tib



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


Re: Accessing indexed properties in DynaActionForm (1.1rc2)

Posted by "Alexey N. Shananin" <sh...@park.ru>.
Steve Raeburn wrote:

>Try phone[0] and phone[1]
>
>Steve
>
>  
>
No, Steve. This Exception is generated BEFORE the execute method call, 
as you can see in a stacktrace. Struts can't PARSE the parameters.

[skip]

-- 
Best regards,

Alexey N. Shananin (mailto:shananin@park.ru)
Java Developer, PARK.RU (http://www.park.ru)



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


RE: Accessing indexed properties in DynaActionForm (1.1rc2)

Posted by Steve Raeburn <st...@ninsky.com>.
Try phone[0] and phone[1]

Steve


> -----Original Message-----
> From: Alexey N. Shananin [mailto:shananin@park.ru]
> Sent: June 24, 2003 3:26 AM
> To: Struts Users Mailing List
> Subject: Accessing indexed properties in DynaActionForm (1.1rc2)
>
>
> Hi!
> I found no answer in an archives, so I'm asking now.
>
> I've got an indexed property "phone", which has fields "num" and
> "pid"(phone ID)
> the generated HTML is:
> ----------------------------------------------------
>
> <tr><td>
> <input type="hidden" name="phone[1].pid" value="528078">
> <input type="text" name="phone[1].num" value="9795036"> (8)
> </td></tr>
>
> <tr><td>
> <input type="hidden" name="phone[2].pid" value="528738">
> <input type="text" name="phone[2].num" value="9563743"> (8)
> </td></tr>
>
> ----------------------------------------------------
> The DynaActionForm bean in struts-config.xml:
>
> ----------------------------------------------------
>         <form-bean name="EditRecordForm"
> type="org.apache.struts.action.DynaActionForm">
>             <form-property name="cid" type="java.lang.String"/>
>             <form-property name="name" type="java.lang.String"/>
>             <form-property name="phone" type="Phone[]"/>
>         </form-bean>
> ----------------------------------------------------
> The "Phone" class has 2 java.lang.String private members (num, pid) with
> public get/set methods.
>
> So, when I'm trying to call the Action's  execute  method,  I got the
> following exception occurs:
>
> ----------------------------------------------------
> javax.servlet.ServletException: BeanUtils.populate
> 	at
> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1098)
> 	at
> org.apache.struts.action.RequestProcessor.processPopulate(RequestP
> rocessor.java:816)
> 	at
> org.apache.struts.action.RequestProcessor.process(RequestProcessor
> .java:254)
> 	at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1420)
> 	at
> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:520)
> 	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(A
> pplicationFilterChain.java:247)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(Applicati
> onFilterChain.java:193)
> 	at
> ru.park.web.util.SetCharacterEncodingFilter.doFilter(SetCharacterE
> ncodingFilter.java:147)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(A
> pplicationFilterChain.java:213)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(Applicati
> onFilterChain.java:193)
> 	at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapp
> erValve.java:243)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:566)
> 	at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.
> java:472)
> 	at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> 	at
> org.apache.catalina.core.StandardContextValve.invoke(StandardConte
> xtValve.java:190)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:566)
> 	at
> org.apache.catalina.valves.CertificatesValve.invoke(CertificatesVa
> lve.java:246)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:564)
> 	at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.
> java:472)
> 	at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> 	at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
> 	at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValv
> e.java:180)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:566)
> 	at
> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispat
> cherValve.java:170)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:564)
> 	at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValv
> e.java:170)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:564)
> 	at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:564)
> 	at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.
> java:472)
> 	at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> 	at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngine
> Valve.java:174)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:566)
> 	at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.
> java:472)
> 	at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> 	at
> org.apache.catalina.connector.http.HttpProcessor.process(HttpProce
> ssor.java:1027)
> 	at
> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor
> .java:1125)
> 	at java.lang.Thread.run(Thread.java:536)
>
> *root cause*
>
> java.lang.ArrayIndexOutOfBoundsException
> 	at java.lang.reflect.Array.get(Native Method)
> 	at
> org.apache.struts.action.DynaActionForm.get(DynaActionForm.java:296)
> 	at
> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Prop
> ertyUtils.java:474)
> 	at
> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Prop
> ertyUtils.java:428)
> 	at
> org.apache.commons.beanutils.PropertyUtils.getNestedProperty(Prope
> rtyUtils.java:770)
> 	at
> org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUti
> ls.java:801)
> 	at
> org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:881)
> 	at
> org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
> 	at
> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1096)
> 	at
> org.apache.struts.action.RequestProcessor.processPopulate(RequestP
> rocessor.java:816)
> 	at
> org.apache.struts.action.RequestProcessor.process(RequestProcessor
> .java:254)
> 	at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1420)
> 	at
> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:520)
> 	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(A
> pplicationFilterChain.java:247)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(Applicati
> onFilterChain.java:193)
> 	at
> ru.park.web.util.SetCharacterEncodingFilter.doFilter(SetCharacterE
> ncodingFilter.java:147)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(A
> pplicationFilterChain.java:213)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(Applicati
> onFilterChain.java:193)
> 	at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapp
> erValve.java:243)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:566)
> 	at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.
> java:472)
> 	at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> 	at
> org.apache.catalina.core.StandardContextValve.invoke(StandardConte
> xtValve.java:190)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:566)
> 	at
> org.apache.catalina.valves.CertificatesValve.invoke(CertificatesVa
> lve.java:246)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:564)
> 	at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.
> java:472)
> 	at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> 	at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
> 	at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValv
> e.java:180)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:566)
> 	at
> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispat
> cherValve.java:170)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:564)
> 	at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValv
> e.java:170)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:564)
> 	at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:564)
> 	at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.
> java:472)
> 	at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> 	at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngine
> Valve.java:174)
> 	at
> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipel
> ine.java:566)
> 	at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.
> java:472)
> 	at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
> 	at
> org.apache.catalina.connector.http.HttpProcessor.process(HttpProce
> ssor.java:1027)
> 	at
> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor
> .java:1125)
> 	at java.lang.Thread.run(Thread.java:536)
>
> ----------------------------------------------------
>
>
> What Im I doing wrong?? Is there a trouble in configuration or I should
> implement some more classes?
>
> Thanks!
>
> --
> Best regards,
>
> Alexey N. Shananin (mailto:shananin@park.ru)
> Java Developer, PARK.RU (http://www.park.ru)
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: struts-user-help@jakarta.apache.org
>
>
>



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