Here's one way to do it:

Let's say you want to be able to record the grades of some students
across a number of classes.

First define a Bean called StudentGrades:

Package example;

public StudentGrades {
   private String name, biology, chemistry, physics, english, math;

   public String getName () { return this.name; }
   public String getBiology () { return this.biology; }
   public String getChemisty () { return this.chemistry; }
   public String getPhysics () { return this.physics; }
   public String getEnglish () { return this.english; }
   public String getMath () { return this.math; }

   public void setName (String name) { this.name = name; }
   public void setBiology (String grade) { this.biology = grade; }
   public void setChemisty (String grade) { this.chemistry = grade; }
   public void setPhysics (String grade) { this.physics = grade; }
   public void setEnglish (String grade) { this.english = grade; }
   public void setMath (String grade) { this.math = grade; }
}

In your struts-config.xml, define:

<form-bean  name="studentGradeForm"
type="org.apache.struts.validator.DynaValidatorForm">
   <form-property name="grades" type="example.StudentGrades[]"
size="50">
</form-bean>

Then, presuming that your Action populates the StudentGrades array with
the student names, in your JSP, you'd say:

<html:form action="/some/action">
<TABLE><TR><TD>Name</TD><TD>Biology</TD><TD>Chemistry</TD><TD>Physics</T
D><TD>English</TD><TD>Math</TD></TR>
<logic:iterate id="student" name="studentGradeForm" property="grades"
type="example.StudentGrades">
<logic:notEmpty name="student" property="name">
<TR><TD><bean:write name="student" property="name" indexed="true"/></TD>
<TD><html:text name="student" property="biology" indexed="true"/></TD>
<TD><html:text name="student" property="chimstry" indexed="true"/></TD>
<TD><html:text name="student" property="physics" indexed="true"/></TD>
<TD><html:text name="student" property="english" indexed="true"/></TD>
<TD><html:text name="student" property="math" indexed="true"/></TD></TR>
</logic:notEmpty>
</logic:iterate>
</TABLE>

> -----Original Message-----
> From: Mike Ash [mailto:[EMAIL PROTECTED]] 
> Sent: Thursday, January 02, 2003 5:04 PM
> To: 'Struts Users Mailing List'
> Subject: RE: multi row / multi col input forms
> 
> 
> I understand what he is saying about setter methods perhaps I 
> am not explaining the problem correctly
> 
> The exact example is I am trying to display a listing of a 
> dynamic number of projects with hours assigned to them by day 
> for a given week, the user can then update any of those 
> fields to make changes, some of those fields may be blank 
> which means the browser will not send them to the server 
> which puts the rows / cols out of balance.
> 
> I am using the logic iterate tag to build a row which looks like
> 
> someText  someMoreText inputBox1 inputBox2 inputBox3 inputBox4
> 
> So for two rows I get
> 
> someText  someMoreText inputBox1 inputBox2 inputBox3 
> inputBox4 someText  someMoreText inputBox1 inputBox2 
> inputBox3 inputBox4
> 
> This means that from a vertical perspective the boxes have 
> the same name ( is there a better way to do the names?) If a 
> inputBox doesn't contain anything I can't tell which one it 
> really was except which column it "didn't" come from.
> 
> Clear as mud?
> 
> 
> -----Original Message-----
> From: Khalid K. [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, January 02, 2003 3:51 PM
> To: Struts Users Mailing List
> Subject: Re: multi row / multi col input forms
> 
> 
> please read the post below from Craig....(he answered a 
> similar question..see question/answer below)
> 
> 
> 
> On Thu, 2 Jan 2003, Toni Charlot wrote:
> 
> > Date: Thu, 2 Jan 2003 10:10:32 -0500
> > From: Toni Charlot <[EMAIL PROTECTED]>
> > Reply-To: Struts Users Mailing List 
> <[EMAIL PROTECTED]>,
> >      [EMAIL PROTECTED]
> > To: [EMAIL PROTECTED]
> > Subject: REPOST: Forcing the ActionForm to populate a field 
> before the
> >     other
> >
> > I would like to have a setter method called before another.  What's 
> > the best way to do that in the ActionForm
> 
> There are no guarantees on the order that the setters are 
> called.  This is for two reasons:
> 
> * There is no rule in the HTTP or HTML specs defining the order
>   in which the request parameters are sent, so it's totally up
>   to the client.  And they really do operate differently.
> 
> * There is no rule in the servlet spec saying that the input order
>   has to be preserved, so it's totally up to the container to decide
>   how to implement this.  And they really do operate differently.
> 
> More fundamentally, though, the only reason that the setter 
> order would matter is if there are side effects (setting one 
> property affects the semantics of setting a different one).  
> Designing your form beans in this way is a very poor 
> architectural decision -- the whole point of a form bean is 
> to simply represent the input values that the user actually 
> entered on the form.  Any functionality that tries to assign 
> "meaning" to these inputs should be done in business logic 
> (which can pull data out of the form bean in any order that 
> you need), not in the form bean itself.
> 
> >
> > Thank you.
> 
> Craig McClanahan
> 
> 
> 
> --
> To unsubscribe, e-mail: 
> <mailto:struts-user-> [EMAIL PROTECTED]>
> For 
> additional commands, 
> e-mail: <mailto:[EMAIL PROTECTED]>
> 
> 
> 
> ----- Original Message -----
> From: "Mike Ash" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Thursday, January 02, 2003 1:46 PM
> Subject: multi row / multi col input forms
> 
> 
> > Is there a way to get the inputs from an html form that has 
> something
> like:
> >
> > col1 col2 col3
> > row x x x
> > row x x x
> > row x x x
> >
> > where x may or may not be entered and the input boxes are 
> named like 
> > col1, col2, col3.
> >
> > So if a user enter a number in row2, col1 and row3, col1 
> how to tell 
> > that
> it
> > was row 2 and 3 that where entered because hen inputs are named the 
> > same
> the
> > parameters come back to the server as an array but there is no 
> > guarantee which order they were in especially if the first one was 
> > blank as in this case.  The array looks like I had two 
> entries in col1 
> > but the numbers are
> in
> > position 0, and 1.  which they should be in position 1 and 2.
> >
> > Any thoughts.
> >
> 
> 
> --
> To unsubscribe, e-mail: 
> <mailto:struts-user-> [EMAIL PROTECTED]>
> For 
> additional commands, 
> e-mail: <mailto:[EMAIL PROTECTED]>
> 



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

Reply via email to