yes:-)) And I am sure most of the people do have the same.I mean tieing the nested properties to the session scope does take away a lot of flexibility.
Anyhow just try my sample code...It should demonstrate the concept. regards, Shirish -----Original Message----- From: Mark Lowe [mailto:[EMAIL PROTECTED] Sent: Tuesday, January 20, 2004 1:44 PM To: Struts Users Mailing List Subject: Re: getting data from form with nested beans So you've had forms, with indexed properties with dynamic sizes working when scoping to request? On 20 Jan 2004, at 11:45, <[EMAIL PROTECTED]> wrote: > Hi, > Is it flaming or what?I thought we were trying to solve each others > problems.Still a last try. > We have a complete application(3 modules/4000 classes/15 companies > live as of date) which uses all form beans just in request scope.And > all over the place we have used form beans in request scope.And the > application is well and running. > > If you go t through my mail, you will understand why it will mail.SO > please read the mail carefully. > I will try to explain it again. > > When the form is submitted(the user presses submit button on > screen),the corresponding action will be called by struts.At the same > time, it will look for a actionForm from the mapping.As the scope is > specified as request, a new form will be created.And if you have > looked at my example carefully, you will see that the nested bean list > is created when the form is created.But this nested list is empty.Now > when struts autopopulation tries to populate a nested bean, it should > find that the nested bean list is empty.But the lazy initialization > mechanism in the indexed getter will take care that the list has > enough of beans.See the code below. > ****************33 > //give indexed access to the beans >>>> >>>> public Employee getEmployee(int index){ >>>> >>>> //very imp >>>> >>>> //when a jsp is submited , then while auto populating the form,this >>>> will >>>> ensure >>>> that >>>> >>>> // the form is populated properly. >>>> >>>> while(index >= beanList.size()){ >>>> >>>> beanList.add(new Employee()); >>>> >>>> } > *************************************** > > And as explained in jsp part, as long as the property references are > created properly, this will work.And with struts1.1 nested tags, you > don't have to even use the script<%%> to create property is jsp. > > Hope this clarifies it.If not, try to run my example code. > > regards, > Shirish > > -----Original Message----- > From: Mark Lowe [mailto:[EMAIL PROTECTED] > Sent: Tuesday, January 20, 2004 12:28 PM > To: Struts Users Mailing List > Subject: Re: getting data from form with nested beans > > > Oh yeah .. by working i mean when you submit.. > > > On 20 Jan 2004, at 11:25, Mark Lowe wrote: > >> .. Show us all an example of a form with a dynamic size for a form >> property thats scoped to the request then big shot.. >> >> Come on lets see it!!! >> >> >> On 20 Jan 2004, at 10:45, <[EMAIL PROTECTED]> wrote: >> >>> The scope of form has nothing to do with usage of nested beans.And >>> using session scope shoudl be avaided as far as possible as teh form >>> will stay in session till it is explicitely removed from there.. >>> >>> The <% %> business is for the scripts so that the nested property >>> reference can be created.But with struts1.1 , with the usage of >>> nested tags, oyu can get rid of that scriptlet code.See nested tags >>> for how to do that.I have myself never used nested tags. >>> >>> >>> -----Original Message----- >>> From: Mark Lowe [mailto:[EMAIL PROTECTED] >>> Sent: Tuesday, January 20, 2004 11:05 AM >>> To: Struts Users Mailing List >>> Subject: Re: getting data from form with nested beans >>> >>> >>> What's with all the <% %> business? Things to watch out for, method >>> names and the object cast to the jsp need to match names (e.g. >>> foo.getEmployee() and ${foo.employee}). The form must be scoped to >>> session if you are dynamically changing the size of the indexed >>> property. >>> >>> <html:text name="bean" property="property" indexed="true" /> >>> >>> A better example would be a form bean with a getEmployees() method >>> and >>> a setEmployee rather than getBeanList or whatever it was. >>> >>> >>> public Object[] getEmployees() { >>> return emplyeeList.toArray(); >>> } >>> >>> public void setEmployees(ArrayList employeeList) { >>> this.employeeList = employeeList; >>> } >>> >>> public Employee getEmployee(int i) { >>> return (Employee) employeeList.get(i); >>> } >>> >>> public void setEmployee(int i,Employee employee) { >>> this.employeeList.add(i,employee); >>> } >>> >>> >>> .. >>> >>> public class Employee { >>> private String name; >>> >>> public String getName() { >>> return name; >>> } >>> etc >>> } >>> >>> .. >>> >>> <logic:iterate id="employee" name="employeeForm" >>> property="employees"> >>> >>> <html:"text name="employee" property="name" indexed="true" /> >>> >>> </logic:iterate> >>> >>> or >>> >>> <c:forEach var="employee" items="${employeeForm.employees}"> >>> .. >>> >>> >>> >>> On 20 Jan 2004, at 08:56, <[EMAIL PROTECTED]> wrote: >>> >>>> I am resending my earlier mail on this user list..Go through the >>>> sample code >>>> and >>>> ask me if u don't understand something. >>>> >>>> The important portions are commented.Especially look at the jsps >>>> property >>>> how >>>> it is set and also the form bean.The property syntax I have used was >>>> for struts 1.0 ..But with struts 1.1 , you can have a better cleaner >>>> syntax using nested tags.But I have not used it...This works for 1.1 >>>> as well.. >>>> >>>> ******************************************************** >>>> >>>> //Form Class >>>> >>>> import java.util.ArrayList; >>>> >>>> import java.util.List; >>>> >>>> import org.apache.struts.action.ActionForm; >>>> >>>> public class ExampleListForm extends ActionForm { >>>> >>>> //A list of Emp beans >>>> >>>> private List beanList = new ArrayList(); >>>> >>>> public List getBeanList(){ >>>> >>>> return beanList; >>>> >>>> } >>>> >>>> public void setBeanList(List list){ >>>> >>>> beanList = list; >>>> >>>> } >>>> >>>> //very imp. >>>> >>>> //give indexed access to the beans >>>> >>>> public Employee getEmployee(int index){ >>>> >>>> //very imp >>>> >>>> //when a jsp is submited , then while auto populating the form,this >>>> will >>>> ensure >>>> that >>>> >>>> // the form is populated properly. >>>> >>>> while(index >= beanList.size()){ >>>> >>>> beanList.add(new Employee()); >>>> >>>> } >>>> >>>> return (Employee)beanList.get(index); >>>> >>>> } >>>> >>>> public void setEmployee(int index,Employee emp){ >>>> >>>> beanList.set(index,emp); >>>> >>>> } >>>> >>>> } >>>> >>>> *********************************************** >>>> >>>> Bean class >>>> >>>> public class Employee { >>>> >>>> private String name; >>>> >>>> private String salary; >>>> >>>> /** >>>> >>>> * Returns the name. >>>> >>>> * @return String >>>> >>>> */ >>>> >>>> public String getName() { >>>> >>>> return name; >>>> >>>> } >>>> >>>> /** >>>> >>>> * Returns the salary. >>>> >>>> * @return String >>>> >>>> */ >>>> >>>> public String getSalary() { >>>> >>>> return salary; >>>> >>>> } >>>> >>>> /** >>>> >>>> * Sets the name. >>>> >>>> * @param name The name to set >>>> >>>> */ >>>> >>>> public void setName(String name) { >>>> >>>> this.name = name; >>>> >>>> } >>>> >>>> /** >>>> >>>> * Sets the salary. >>>> >>>> * @param salary The salary to set >>>> >>>> */ >>>> >>>> public void setSalary(String salary) { >>>> >>>> this.salary = salary; >>>> >>>> } >>>> >>>> } >>>> >>>> **************************************** >>>> >>>> JSP >>>> >>>> <%@ page language="java"%> >>>> >>>> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> >>>> >>>> <html:html> >>>> >>>> <html:form action="/" > >>>> >>>> <logic:iterate id="bean" name="exampleListForm" property="beanList" >>>> indexId="i"/> >>>> >>>> <html:text name="exampleListForm" property="<%=\"employee[\" + i >>>> \"].name\"%>"> >>>> >>>> <html:text name="exampleListForm" property="<%=\"employee[\" + i >>>> \"].salary\"%>"> >>>> >>>> </logic:iterate> >>>> >>>> </html:form> >>>> >>>> </html:html> >>>> >>>> Explanation: >>>> >>>> See how the property is constructed. >>>> >>>> <html:text name="exampleListForm" property="<%=\"employee[\" + i >>>> \"].name\"%>"> >>>> >>>> So this will result in a parameter name employee[i].name in the http >>>> request.So >>>> when the jsp is rendered, this will be interpreted as >>>> >>>> getEmployee[i].getName().And when the jsp is submitted , the same >>>> will >>>> be >>>> interpreted as getEmployee[i].setName().And this will result in auto >>>> population >>>> of data in the form as u can see. >>>> >>>> So check the indexed properties on the form as well.(Especially the >>>> getEmployee(index i) proeprty with while loop.) >>>> >>>> Hope this helps. >>>> >>>> >>>> >>>> regards, >>>> >>>> Shirish. >>>> >>>> >>>> -----Original Message----- >>>> From: Mark Lowe [mailto:[EMAIL PROTECTED] >>>> Sent: Monday, January 19, 2004 6:18 PM >>>> To: Struts Users Mailing List >>>> Subject: Re: getting data from form with nested beans >>>> >>>> >>>> Dunno what that thread on lazy lists was but nesting beans should >>>> work >>>> fine, but you will need to scope any property that you want a >>>> dynamic >>>> size to session. >>>> >>>> Shouldn't be anymore complicated than that. >>>> >>>> >>>> On 19 Jan 2004, at 16:01, Martin Sturzenegger wrote: >>>> >>>>> hi, >>>>> concerning nested properties, i found so many questions, hints etc. >>>>> in >>>>> the archive but nothing that really helped all the way...i'm still >>>>> confused (or even more now...) >>>>> i still don't understand how struts handles input from a form that >>>>> holds an iteration of nested beans. >>>>> is the following correct? >>>>> as soon as the user submits the form, the actionform-bean, holding >>>>> the >>>>> nested beans with the user's changes, gets transmitted. >>>>> is it so, that before the action-class is called, the form-bean's >>>>> reset() method is called, and all nested beans are set to null by >>>>> default? >>>>> so do i have to override the reset() method? >>>>> what do i iterate over in the reset() method to get the user's >>>>> inputs? >>>>> how do i limit the iteration? >>>>> does the validate() method gets called before the reset method?. >>>>> >>>>> i've seen examples, where a dto-class is instanciated within the >>>>> reset() method. >>>>> is this the way to do it? >>>>> do i have to access these dto-beans in the action class? >>>>> >>>>> could somebody give me a little example of a reset()-method, just >>>>> to >>>>> show how the user's input can be gathered and then stored away? >>>>> >>>>> and.. what are lazy lists? i wasn't able to find a definition.... >>>>> >>>>> sorry about it but >>>>> >>>>> regards from an utterly confused martin >>>>> >>>>> >>>>> >>>>> >>>>> ---------- Urspruengliche Nachricht ------------------------------ >>>>> Von: <[EMAIL PROTECTED]> >>>>> Datum: Mon, 19 Jan 2004 10:52:10 +0100 >>>>> >>>>>> You ahve a fixed length or Empty list in the form.So when the auto >>>>>> population tries to populate the nested bean for the list which is >>>>>> empty/fixed size,you get this exception. >>>>>> Try to use lazy list or search the archive for nested property >>>>>> usage...There are many examples which will demonatrate how to use >>>>>> it. >>>>>> >>>>>> HTH. >>>>>> regards, >>>>>> Shirish >>>>>> >>>>>> -----Original Message----- >>>>>> From: Martin Sturzenegger >>>>>> [mailto:[EMAIL PROTECTED] >>>>>> Sent: Monday, January 19, 2004 10:46 AM >>>>>> To: Struts Users Mailing List; [EMAIL PROTECTED]; Struts >>>>>> Users >>>>>> Mailing List >>>>>> Subject: Re: Including one JSP in another >>>>>> >>>>>> >>>>>> i try to receive user-input from a form using a list of nested >>>>>> beans. >>>>>> after hitting submit i get an ArrayIndexOutOfBoundsException >>>>>> can somebody give me a hint? >>>>>> many thanks >>>>>> martin >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> stacktrace: >>>>>> >>>>>> java.lang.ArrayIndexOutOfBoundsException >>>>>> java.lang.reflect.Array.get(Native Method) >>>>>> >>>>>> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Prop >>>>>> e >>>>>> rt >>>>>> y >>>>>> Utils.java:525) >>>>>> >>>>>> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Prop >>>>>> e >>>>>> rt >>>>>> y >>>>>> Utils.java:428) >>>>>> >>>>>> org.apache.commons.beanutils.PropertyUtils.getNestedProperty(Prope >>>>>> r >>>>>> ty >>>>>> U >>>>>> tils.java:770) >>>>>> >>>>>> org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUti >>>>>> l >>>>>> s. >>>>>> j >>>>>> ava:801) >>>>>> >>>>>> org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java: >>>>>> 881) >>>>>> org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java: >>>>>> 808) >>>>>> org.apache.struts.util.RequestUtils.populate(RequestUtils.java: >>>>>> 1252) >>>>>> >>>>>> org.apache.struts.action.RequestProcessor.processPopulate(RequestP >>>>>> r >>>>>> oc >>>>>> e >>>>>> ssor.java:821) >>>>>> >>>>>> org.apache.struts.action.RequestProcessor.process(RequestProcessor >>>>>> . >>>>>> ja >>>>>> v >>>>>> a:254) >>>>>> >>>>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java: >>>>>> 1482) >>>>>> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java: >>>>>> 525) >>>>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:763) >>>>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:856) >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>>>>> >>>>>>>>>> Confidentiality Notice >>>>>>>>>> >>>>>>>>>> The information contained in this electronic message and any >>>>>>> attachments >>>>>>>>>> to this message are intended >>>>>>>>>> for the exclusive use of the addressee(s) and may contain >>>>>>>>>> confidential >>>>>>>>>> or privileged information. If >>>>>>>>>> you are not the intended recipient, please notify the sender >>>>>>>>>> at >>>>>>>>>> Wipro >>>>>>> or >>>>>>>>>> [EMAIL PROTECTED] immediately >>>>>>>>>> and destroy all copies of this message and any attachments. >>>>>>>>>> >>>>>>>>>> -------------------------------------------------------------- >>>>>>>>>> - >>>>>>>>>> -- >>>>>>>>>> - >>>>>>>>>> --- >>>>>>>>>> To unsubscribe, e-mail: >>>>>>>>>> [EMAIL PROTECTED] >>>>>>>>>> For additional commands, e-mail: >>>>>>>>>> [EMAIL PROTECTED] >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Confidentiality Notice >>>>>>>>>> >>>>>>>>>> The information contained in this electronic message and any >>>>>>> attachments >>>>>>>>> to this message are intended >>>>>>>>>> for the exclusive use of the addressee(s) and may contain >>>>>>>>>> confidential >>>>>>>> or >>>>>>>>> privileged information. If >>>>>>>>>> you are not the intended recipient, please notify the sender >>>>>>>>>> at >>>>>>>>>> Wipro >>>>>>> or >>>>>>>>> [EMAIL PROTECTED] immediately >>>>>>>>>> and destroy all copies of this message and any attachments. >>>>>>>>>> >>>>>>>>>> -------------------------------------------------------------- >>>>>>>>>> - >>>>>>>>>> -- >>>>>>>>>> - >>>>>>>>>> --- >>>>>>>>>> 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] >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------ >>>>>> - >>>>>> -- >>>>>> 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] >>>> >>> >>> >>> --------------------------------------------------------------------- >>> 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] > > > --------------------------------------------------------------------- > 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]

