The following article seems to differ in approach from how the posters to this forum implement indexed properties in struts:
http://www.developer.com/java/other/article.php/2233591
In this article, the author uses a DynaActionForm which automatically builds an array of "normal" beans. By "normal", I mean that the beans have methods like this:
String getFoo() void setFoo(String foo)
rather than this, as is often advocated in this forum:
String getFoo(int index) void setFoo(String foo, int index)
I prefer the former approach except for one minor factor: it doesn't seem to work. :(
Struts seems to be creating me a valid form. I say this becuase I have an iterator on my form that displays the right number of rows of text boxes, and they all have names like "mybean[0].foo". Furthermore, if I change the "property" attribute of my "html:text" tag to "bar", I get an exception when I render the page that there is no "bar" property.
So things seem to be working well, up to this point, but in the implementation of the action, my form bean doesn't have any values set. They're not even blank; they're null. I stuck a println in a setter method -- it's not even being called.
I can, however, see the values in the request parameters if I print them out in the implementation of the action.
Help! Actual code follows.
Thanks in advance,
-- Mike
STRUTS-CONFIG.XML
<form-bean name="shipmentFormBean" type="org.apache.struts.action.DynaActionForm"> <form-property name="action" type="java.lang.String" /> <form-property name="shipments" type="com.interactivate.cachandler.ShipmentFormBean[]" size="12" /> </form-bean>
<action path="/data-upload/Shipments" name="shipmentFormBean" forward="shipments.page" scope="request" validate="false" roles="data-upl" />
<action path="/data-upload/SubmitShipments" type="com.interactivate.cachandler.SubmitShipmentsAction" name="shipmentFormBean" scope="request" validate="true" input="shipments.page" roles="data-upl" />
SHIPMENTFORMBEAN.JAVA --
public class ShipmentFormBean { private String mDestination; private String mSize; private String mVariety; private String mQuantity; private String mPrice; private String mZipCode;
// YANKED A BUNCH OF GETTERS/SETTERS
public String getSize() { return mSize; }
public void setSize(String size) { System.out.println("### setting size to " + size); mSize = size; } }
SHIPMENTS.JSP
<html:form action="/data-upload/SubmitShipments.do"> <logic:iterate id="shipment" name="shipmentFormBean" property="shipments"> <%-- lots of jsp code and html yanked --%> <html:select name="shipment" property="size" indexed="true"> <option value="70"> 70 </option> <option value="84"> 84 </option> </html:select> <html:select name="shipment" property="destination" indexed="true"> <option value="" selected>Select a city</option> <option value="">------------- </option> <jsp:include page="destinations.jsp" /> </html:select> <html:text name="shipment" property="zipCode" indexed="true" size="10" maxlength="5" /> </logic:iterate> </html:form>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]