RE: getting data from form with nested beans

2004-01-21 Thread Martin Sturzenegger
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-userm=105027737732711w=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

RE: getting data from form with nested beans

2004-01-20 Thread shirishchandra.sakhare
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

Re: getting data from form with nested beans

2004-01-20 Thread Mark Lowe
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

RE: getting data from form with nested beans

2004-01-20 Thread shirishchandra.sakhare
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

Re: getting data from form with nested beans

2004-01-20 Thread Mark Lowe
.. 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

Re: getting data from form with nested beans

2004-01-20 Thread Mark Lowe
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

RE: getting data from form with nested beans

2004-01-20 Thread shirishchandra.sakhare
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

Re: getting data from form with nested beans

2004-01-20 Thread Mark Lowe
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

RE: getting data from form with nested beans

2004-01-20 Thread shirishchandra.sakhare
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

RE: getting data from form with nested beans

2004-01-20 Thread Martin Sturzenegger
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

RE: getting data from form with nested beans

2004-01-20 Thread shirishchandra.sakhare
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

RE: getting data from form with nested beans

2004-01-20 Thread Arron Bates
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-userm=105027737732711w=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

Re: getting data from form with nested beans

2004-01-19 Thread Mark Lowe
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(Property 
Utils.java:525)
	 
org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Property 
Utils.java:428)
	 
org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyU 
tils.java:770)
	 
org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.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(RequestProce 
ssor.java:821)
	 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.jav 
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]