Hi,
 
I've been trying to get the values in my dynaaction form to update. 
 
I have a "populator" Action that creates my TestRow[] object and adds it
to the form. The dynaaction also has a simple String property which I
also populate.
I then forward to my HTML form that has the row fields indexed. The form
is displayed with all the indexed text boxes and select boxes populated
as expected. I edit the values, including the non indexed field and
submit the form to the form processor action.
 
The form is retrieved and the non indexed field has the updated value,
BUT, the indexed fields still contain the original values!
 
I've triple checked everything, and looked around for answers but I
can't work out whats wrong. I've even done indexed forms successfully
before on a different project, so its very frustrating.
 
Even downloaded the lastest Struts 1.2.7/JSTL 1.1.2 libs and retried.
 
Any help greatly appreciated....Thanks Mark
 
Here's my code and config segments:
 
DynaActionForm definition from my struts-config.xml:
 
 
<form-bean name="testForm"
type="org.apache.struts.action.DynaActionForm">
 
            <form-property name="simple" type="java.lang.String"/>
            <form-property name="rows"
type="aims.app.support.library.pub.TestRow[]"/>
 
</form-bean>
 
and the action mappings
 
<action path="/do/testInit"
            type="aims.app.support.library.pub.action.TestInit"
            input="/do/gotoError.do"
            name="testForm"
            scope="session">
            <forward name="next" path="/do/gotoTestPage.do"/>
        </action>
 
        <action path="/do/testProcess"
            type="aims.app.support.library.pub.action.TestProcess"
            input="/do/gotoError.do"
            name="testForm"
            scope="session">
            <forward name="next" path="/do/gotoThankyou.do"/>
        </action>
 
 
My test page, which is included into my Tiles to form valid HTML and
mapped to /do/gotoTestPage.do :
 
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="jstl/c" prefix="c" %>
 
<html:form action="/do/testProcess" >
 

<html:text property="simple" />
 
<c:forEach var="row" items="${testForm.map.rows}"> <!-- was using
logic:iterator but tried this too -->
 
    Author: <c:out value="${row.field1}"/>
    <html:text name="row" property="field1" indexed="true" />
    <br>
    Pick from known affiliations
    <br>
    <html:select name="row" property="field2" size="4" indexed="true">
        <html:option value="1"/>
        <html:option value="2"/>
        <html:option value="3"/>
        <html:option value="4"/>
        <html:option value="5"/>
    </html:select>
 
 
 
</c:forEach>
 
<p>
    <html:submit value="Continue" styleClass="addButton"/>
</p>
 

</html:form>
 
"Populator" action
 
public class TestInit extends Action {
 
    private static final String NEXT="next";
 
    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws
Exception {
 
 
 
        DynaActionForm testForm = (DynaActionForm) form;
 
 
 
        TestRow row1=new TestRow();
        row1.setField1("Mark");
        row1.setField2(2);
 
        TestRow row2=new TestRow();
        row2.setField1("Fred");
        row2.setField2(5);
 
        TestRow[] rows=new TestRow[2];
        rows[0]=row1;
        rows[1]=row2;
 
        testForm.set("rows", rows);
        testForm.set("simple", "hello");
 
        return mapping.findForward(NEXT);
 
    }
}
 
"Form processor" action
 
public class TestProcess extends Action {
 
    private static final String NEXT="next";
 

    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws
Exception {
 

        DynaActionForm testForm = (DynaActionForm) form;
 
        String simple=(String)testForm.get("simple");
 
        System.out.println("Simple: " + simple);
 

        TestRow[] rows=(TestRow[])testForm.get("rows");
 
        for (int i=0;i<rows.length;i++) {
 
            System.out.println("Name: " + rows[i].getField1());
            System.out.println("No: " + rows[i].getField2());
 
        }
 
        return mapping.findForward(NEXT);
 
    }
}
 
TestRow bean
 
public class TestRow {
 
    private String field1;
    private int field2;
 
    public String getField1() {
        return field1;
    }
 
    public void setField1(String field1) {
        this.field1 = field1;
    }
 
    public int getField2() {
        return field2;
    }
 
    public void setField2(int field2) {
        this.field2 = field2;
    }
}


------------------------------------------------------------------------
 The information contained in this communication is  for the use of the 
 individual  or  entity  to  whom  it  is  addressed, and  may  contain 
 information which is the  subject of legal privilege and/or copyright. 
 If you have received this  communication in  error, please  notify the 
 sender by return E-Mail and delete the transmission, together with any 
 attachments, from your system. Thank you.
-------------------------------------------------------------------------

Reply via email to