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!