I don't understand why you need ActionForms embedded in your main
ActionForm - don't these "sub forms" just need to be some sort of DynaBeans
rather than ActionForm?

If you want to use the "Lazy" versions, then just make it your main
ActionForm:

<form-bean name="SampleMain" dynamic="true"
     type="lib.framework.util.LazyValidatorForm"/>

Then in your jsp

   <html:text property="subForm1[${status.index}].property1" size="5" />
   <html:text property="subForm1[${status.index}].property2" size="5" />

Should populate an ArrayList of LazyDynaBeans containing property1 and
property2


Niall

----- Original Message ----- 
From: "Nathan Ewing" <[EMAIL PROTECTED]>
To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
Sent: Wednesday, April 21, 2004 8:53 PM
Subject: RE: Creating an indexed property of DynaActionForms


I tried replacing the <form-property name="subForm1" type="SubForm[]"/>
with:

<form-property name="subForm1" type="com.mysite.LazyValidatorForm[]"/>

And I get the following when I hit the submit button on my form:

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(PropertyUt
ils.java:474)
at
org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUt
ils.java:428)
at
org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUti
ls.java:770)
at
org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.jav
a: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:1252)
at
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcess
or.java:821)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
254)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

-----Original Message-----
From: Takhar, Sandeep [mailto:[EMAIL PROTECTED]
Sent: Wednesday, April 21, 2004 7:44 AM
To: Struts Users Mailing List
Subject: RE: Creating an indexed property of DynaActionForms

Use the lazyValidatorActionForm, which allows you to keep things request
scope when using arrays.

http://www.niallp.pwp.blueyonder.co.uk/

<form-bean name="SampleMain"
type="org.apache.struts.validator.DynaValidatorForm">
    <form-property name="subForm1" type="java.util.ArrayList"/>
    <form-property name="subForm2" type="java.util.ArrayList"/>
</form-bean>

Unfortunately I haven't tried this, but am pretty sure it works.


sandeep
-----Original Message-----
From: Nathan Ewing [mailto:[EMAIL PROTECTED]
Sent: Tuesday, April 20, 2004 5:49 PM
To: [EMAIL PROTECTED]
Subject: Creating an indexed property of DynaActionForms


I'm trying to figure out how to define and use a DynaActionForm which
has an indexed property that is another DynaActionForm.  I'm using
struts 1.1.  Here is something like what I mean:

First my sample struts-config.xml
----------------------------------
<form-bean name="SubForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="property1"
type="java.lang.String"/>
<form-property name="property2"
type="java.lang.String"/>
</form-bean>

<form-bean name="SampleMain"
type="org.apache.struts.validator.DynaValidatorForm">
    <form-property name="subForm1" type="SubForm[]"/>
    <form-property name="subForm2" type="SubForm[]"/>
</form-bean>

And the JSP:
------------------

<table>
<c:forEach var="subForm1" items="${SampleMain.map.subForm1}"
varStatus="status">
<tr>
    <td><html:text
property="subForm1[${status.index}].property1" size="5" />

    <td><html:text
property="subForm1[${status.index}].property2" size="5" />
</tr>
</c:forEach>
</table>

Unfortunately this doesn't work.  If I try making the subtypes SubForm[]
like above, I get a NullPointer exception when I try to start the
server, when struts tries to create the DynaForm classes.

If I make the property type Object[], I can successfully populate the
form, but when I try to save it, I get an ArrayOutOfBounds error when
struts tries to create the initial DynaForms (Obviously because it has
no idea what type of form to create, I think).

How do I make this work?

Also, once I start implementing validation on this form, is it going to
be possible to use struts validation to validate the subitems?

Thanks,
Nathan


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to