hi everybody!
great flamewar ;>)
thanks to everybody involved! i really appreciate your help! 
you enlightened my greyish days!
cheers
martin





---------- Urspruengliche Nachricht ------------------------------
Von: "Arron Bates" <[EMAIL PROTECTED]>
Antworten an: "Struts Users Mailing List" <[EMAIL PROTECTED]>
Datum:  Wed, 21 Jan 2004 04:11:40 +1000

>Never thought I'd see a flamewar on nested beans. :)
>
>Request scope beans in lists are very much possible with the help of "Lazy"
>collections...
>
>    http://marc.theaimsgroup.com/?l=struts-user&m=105027737732711&w=2
>
>...it's the entire reason the lazy collections were made. Some people just
>can't live with computer memory filling up with session objects.
>
>The lazy solution keeps Struts happy by allowing an empty list to recieve
>updates on indexes not there yet (which is what happens when the form object
>is created for the first time when the request comes in).
>
>That said, nothing in life comes free. Nested beans in request scope is one
>degree harder to code for than form beans in the session. If a site has
>limited concurrent users (intranetty, etc etc), I vote to put the form in the
>session every time. :)    ...but the other way is more than possible.
>
>
>Cheers.
>
>Arron.
>
>
>
>> I did not get your question clearly.
>> 
>> When a new form(instance of ActionForm) is created, users input is 
>> not lost.The users input is still in the request Object.(Are you 
>> confusing the Form on screen with the ActionFOrm object on server 
>> side?).So after the instance of ActionForm is created, it is 
>> populated with the parameters from the request using the struts auto-
>> population mechanism.And then you can use the same BeanList to pass 
>> to the Service layer(But after conversion may be as all the 
>> properties in String format.SO create DTO bean from correspondign 
>> stringbeans).
>> 
>> Hope this helps.
>> regards,
>> Shirish
>> 
>> -----Original Message-----
>> From: Martin Sturzenegger [mailto:[EMAIL PROTECTED]
>> Sent: Tuesday, January 20, 2004 3:11 PM
>> To: [EMAIL PROTECTED]; Struts Users Mailing List
>> Subject: RE: getting data from form with nested beans
>> 
>> hi shirish,
>> great conceipt and many thanks for example and explanation, my fog 
>> seems to thin out slowly. one question remains: as soon as a new 
>> form is created, then, i assume, the user's inputs are lost. so how 
>> do you get hold of the user's input? usually one feeds the input 
>> data back into a database. with simple beans i copy the formdata to 
>> a new instantiated dto-bean within my action class and pass the dto-
>> bean to my business-layer. but dealing with nested beans, where and how?
>> sorry for pestering
>> and thanks a lot in advance
>> martin 
>> 
>> ---------- Urspruengliche Nachricht ------------------------------
>> Von: <[EMAIL PROTECTED]>
>> Antworten an: "Struts Users Mailing List" <[EMAIL PROTECTED]>
>> Datum:  Tue, 20 Jan 2004 13:54:30 +0100
>> 
>> >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]

Reply via email to