struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "V. Cekvenich" ...@basebeans.com>
Subject Re: multi row / multi col input forms
Date Thu, 23 Jan 2003 21:11:58 GMT
This works fine with either!

Ex:
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/basicportal/ROOT/portlets/cms/ContentApprovePortlet.jsp

Make sure you implement a collection and unit test the formbean outside 
of Struts before doing any beans, including multi row.

.V
"Mentoring adds value"

Neil Carusetta wrote:
> We are having trouble solving the same problem of updating the fields for a
> DynaActionForm's indexed properties.  We are running on Struts 1.1 beta2.
> Should we be using the latest beta3 to get this to work? 
> Our configuration basically follows that of James' below.
> We defined a Bean named EditFormIndexPropertyBean, which will be the
> elements of the DynaActionForm's array property
> The form-bean is configured as:
> <form-bean  name="categoryIndicesEditForm"
> type="org.apache.struts.action.DynaActionForm">
>    	<form-property name="categoryIndex"
> type="com.cgc.approve.struts.beans.EditFormIndexPropertyBean[]"
>    	 size="10"/> 
> </form-bean>
> 
> The form's iteration in the JSP look like:
> <logic:iterate id="categoryIndex" name="categoryIndicesEditForm"
> property="categoryIndex"
> type="com.cgc.approve.struts.beans.EditFormIndexPropertyBean"
> indexId="index">
>    <logic:notEmpty name="categoryIndex" property="name">
> 
>     <td>   			 
>      <html:text name="categoryIndex" property="name" indexed="true"/>
>     </td>
>    </logic:notEmpty>
> </logic:iterate>
> 
> Unlike James' example, we had to name the <form-property> 'name' attribute
> the same as the <logic:iterate> 'property' attribute, in this case
> "categoryIndex".  Otherwise the PropertyUtils could not find the DynaForm's
> property by that name.
> 
> Here's what appears to be the problem:  The DynaForm's array property
> 'categoryIndex' is not being populated with the elements of our
> EditFormIndexPropertyBean. The array property is instantiated with the
> correct name, however it is empty. The DynaActionForm then attempts to set
> the property with name=categoryIndex at index 0 with some value:
> 
> DynaActionForm.set(String name, int index, Object value) {
> 
>         DynaProperty descriptor = getDynaProperty(name);
>         Object prop = dynaValues.get(name);
> ....}
> 
> This causes a null pointer exception as there are no dynaValues to retrieve
> (no EditFormIndexPropertyBeans in the array property) .
> 
> We have used successfully indexed properties for DynaActionForms such as
> String[] and Integer[] and other primitive type wrapper classes.  How can we
> get our DynaActionForm to work use a property that consists of an array of
> user defined classes?
> 
> A side question for any who might know.  When using a String[] property it
> is not necessary to set the size attribute.  Is this needed for user defined
> classes?
> 
> Thanks for any help,
> 
> Neil Carusetta
> CGC 
>  
>        
> *	From: James Turner 
> *	Subject: RE: multi row / multi col input forms 
> *	Date: Thu, 02 Jan 2003 15:44:18 -0800 
> 
> 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:mash@euronetworldwide.com>] 
>>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?
>>
>>
> 



--
To unsubscribe, e-mail:   <mailto:struts-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-user-help@jakarta.apache.org>


Mime
View raw message