You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Scott Ottesen <so...@utah.gov> on 2004/02/11 20:07:24 UTC

Again: ArrayList not getting values assigned from the JSP form on add or submit

Hello-

MY APOLOGIES! First post did not work; all example code didn't send right and was strung together....
 
I've searched high & low and did my homework to no avail on this problem...
 
I have a Struts web app that includes a wizard input (multiple JSP pages and form-properties to one form-bean).  Page 2 (JSP) of the wizard includes a table where the user will input information to be stored into an ArrayList, and subsequently be stored to an Oracle database via Hibernate.
 
When the page comes up for editing, an "Add" button appears.  When you click the button, it opens a new table row for editing.  You enter information; so far, so good.  Now, when you click add again to open another row, the second row opens, but the first row of information you typed in disappears!
 
Furthermore, when testing values from the action code, it appears that my ArrayList assignment isn't getting the information from the JSP (or DynaArrayValidation) form.  What could be wrong?  Below are my code examples:

=== Excerpt from JSP page ===
 
<h5>Matching Funds:</H5>
<BR>
 
<logic:notEmpty name="annualRptForm" property="matchingFundLines">
<TABLE border=0 cellspacing=1 cellpadding=0>
    <TR>
        <TD width='6' align=center valign=center><B>Del?</B></TD>
        <TD width='8' align=center valign=center><B>Federal or Private</B></TD>
        <TD width='35' align=center valign=center><B>Funding Entity Name</B></TD>
        <TD width='15' align=center valign=center><B>Current Fiscal Year</B></TD>
        <TD width='15' align=center valign=center><B>Cash</B></TD>
        <TD width='15' align=center valign=center><B>In Kind</B></TD>
        <TD width='15' align=center valign=center><B>Total</B></TD>
    </TR>
    <logic:iterate id="mfLine" name="annualRptForm" property="matchingFundLines">
    <TR>
        <TD><html:checkbox  name="mfLine" indexed="true" property="deleteMatchingFund" /></TD>
        <TD><html:text name="mfLine" indexed="true" property="federal" maxlength="1" size="3" /></TD>
        <TD><html:text name="mfLine" indexed="true" property="fundingEntity" maxlength="50" size="35" /></TD>
        <TD><html:text name="mfLine" indexed="true" property="fundingYear" maxlength="4" size="4" /></TD>
        <TD><html:text name="mfLine" indexed="true" property="cash" maxlength="8" size="8" /></TD>
        <TD><html:text name="mfLine" indexed="true" property="inKind" maxlength="8" size="8" /></TD>
        <TD><html:text name="mfLine" indexed="true" property="totalAmountMatchingFunds" maxlength="8" size="8" /></TD>
    </TR>
    </logic:iterate>
</TABLE>
</logic:notEmpty>
<html:image page="/images/public/addbtn.gif" property="addMatchingFund" value="addMatchingFund" onclick="bCancel=true;" />
<BR><BR>
 
 
 
=== Excerpt from AnnualRptAction class ===
 
                if (request.getParameter("addMatchingFund.x") != null) {
                    ArrayList matchingFund = (ArrayList)frm.get("matchingFundLines");
                    // System.out.println("size: " + matchingFund.size());
                    // System.out.println("matchingFund=" + matchingFund);
                    if ( matchingFund.size() > 0) {
                        // do some validations*
      }
                    frm.set("matchingFundLines",matchingFund);
                    saveToken(request);
                    return (new ActionForward(mapping.getInput()));
 
 
 
<struts-config>
    <form-beans>
            <form-bean name="annualRptForm" dynamic="true"  type="us.ut.state.dced.coep.forms.DynaValidatorCancelForm">
                    
                    <form-property name="matchingFundLines" type="java.util.ArrayList" />
            </form-bean>            
           
    </form-beans>
*
 
 
 
=== DynaValidatorCancelForm  / DynaActionValidator ===
 
package us.ut.state.dced.coep.forms;
 
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.*;
 
public class DynaValidatorCancelForm extends org.apache.struts.validator.DynaValidatorForm {
    
    /** Creates a new instance of DynaValidatorCancelForm */
    public DynaValidatorCancelForm() {
    }
    
    public ActionErrors validate(ActionMapping mapping,  javax.servlet.http.HttpServletRequest request)
    {
        if (request.getParameter("delete.x") != null || request.getParameter("cancel.x") != null  ) {
            return new ActionErrors();
        }
        return super.validate(mapping, request);
    }
 
}

 
Thanks!