As it turns out, some of my ideas about a "standard" property of type Map versus a "mapped property" were a bit off. So, if you're still interested, here's something I hacked together. You'll notice I used a session scoped form so that Struts doesn't choke when it tries to populate the form.
struts-config.xml: ------------------ <form-beans> <form-bean name="employeesForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="employeesMap" type="java.util.Map"/> </form-bean> </form-beans> <action-mappings> <action path="/employees/edit" type="com.dotech.EditEmployeesAction" name="employeesForm" scope="session" validate="false"> <forward name="success" path="/editEmployees.jsp"/> </action> <action path="/employees/save" type="org.apache.struts.actions.ForwardAction" parameter="/viewEmployees.jsp" name="employeesForm" scope="session" validate="false"/> </action-mappings> editEmployees.jsp: ------------------ <%@ taglib prefix="bean" uri="http://jakarta.apache.org/struts/tags-bean" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="html" uri="http://jakarta.apache.org/struts/tags-html" %> <%-- dynamically get a handle to the form --%> <bean:struts id="mapping" mapping="/employees/save"/> <c:set var="attribute" value="${mapping.attribute}"/> <c:set var="scope" value="${mapping.scope}"/> <c:choose> <c:when test="${scope eq 'request'}"> <c:set var="form" value="${requestScope[attribute]}"/> </c:when> <c:otherwise> <c:set var="form" value="${sessionScope[attribute]}"/> </c:otherwise> </c:choose> <html> <head><title>Edit Employees</title></head> <body> <html:form action="/employees/save"> <table> <c:forEach var="entry" items="${form.map.employeesMap}"> <tr> <td><c:out value="${entry.key}"/></td> <td> <input type="text" name="<c:out value="employeesMap(${entry.key}).name"/>" value="<c:out value="${entry.value.name}"/>"> </td> <td> <input type="text" name="<c:out value="employeesMap(${entry.key}).age"/>" value="<c:out value="${entry.value.age}"/>"> </td> </tr> </c:forEach> <tr> <td align="center" colspan="3"><html:submit/></td> </tr> </table> </html:form> </body> </html> EmployeeBean.java: ------------------ package com.dotech; public class EmployeeBean { private String name; private String age; public EmployeeBean(String name, String age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getAge() { return this.age; } public void setAge(String age) { this.age = age; } } EditEmployeesAction.java: ------------------------- package com.dotech; import java.util.*; import javax.servlet.http.*; import org.apache.commons.beanutils.*; import org.apache.struts.action.*; public class EditEmployeesAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Map empMap = new HashMap(); empMap.put("1111", new EmployeeBean("John Doe", "33")); empMap.put("2222", new EmployeeBean("Loser Boy", "22")); PropertyUtils.setProperty(form, "employeesMap", empMap); return mapping.findForward("success"); } } viewEmployees.jsp: ------------------ <%@ taglib prefix="bean" uri="http://jakarta.apache.org/struts/tags-bean" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%-- dynamically get a handle to the form --%> <bean:struts id="mapping" mapping="/employees/save"/> <c:set var="attribute" value="${mapping.attribute}"/> <c:set var="scope" value="${mapping.scope}"/> <c:choose> <c:when test="${scope eq 'request'}"> <c:set var="form" value="${requestScope[attribute]}"/> </c:when> <c:otherwise> <c:set var="form" value="${sessionScope[attribute]}"/> </c:otherwise> </c:choose> <html> <head><title>View Employees</title></head> <body> <table> <c:forEach var="entry" items="${form.map.employeesMap}"> <tr> <td><c:out value="${entry.key}"/></td> <td><c:out value="${entry.value.name}"/></td> <td><c:out value="${entry.value.age}"/></td> </tr> </c:forEach> </table> </body> </html> Quoting Kris Schneider <[EMAIL PROTECTED]>: > Okay, so that's way too much work ;-). I'm not sure, but I think one of the > issues you're running into is the difference between a "standard" property > of > type Map and a "mapped property". The first is declared like: > > public Map getEmployeesMap() > public void setEmployeesMap(Map m) > > The second is declared like: > > public Object getEmployeeMapped(String key) > public void setEmployeeMapped(String key, Object value) > > For a mapped property, you'd use a reference like "employeeMapped(1111)" to > get > the object stored under the "1111" key. I really haven't played much with > either > of the above cases, so I may be off base... > > Quoting Rick Reumann <[EMAIL PROTECTED]>: > > > Ok stupid subject line, but now I can get back to something I was > > curious about that I posted around a week ago. I'm really curious how to > > do accomplish this and yes have tried it a bunch of different ways... > > > > Here's the challenge.... > > > > First challenge is just with a regular ActionForm... > > > > 1) Your ActionForm has to have a property of type Map. For this > > adventure call it employeesMap. > > > > 2) Each map will hold for the key and employeeID ( String ssn - social > > security number whatever). The value will be an EmployeeBean. For > > testing sake just have it have two properties String name, String age. > > > > 3) Put two employees into the Map and put this Map into your ActionForm: > > HashMap empMap = new HashMap(); > > empMap.put( "1111", new EmployeeBean("John Doe", "33" ) ); > > empMap.put( "2222", new EmployeeBean("Loser Boy", "22" ) ); > > setEmployeesMap( empMap ); > > > > 4) Now have a jsp form iterate over this Map and provide text fields to > > edit the name and age of each employee. When the form is submitted there > > should be a way that it will submit this Map with updated EmployeeBeans > > with the new names and ages for each key (1111 and 2222 ). Pull the map > > out of the action you submit to and print the properties of the > > EmployeeBeans to test. > > > > > > Second challenge... is do the above using your employeesMap as a > > property of a DynaActionForm. > > > > Preferably use JSTL and/or struts-el also would be nice. > > > > (First one to successfully complete this challenge will win 100 dollars > > for each person that they forward this e-mail to, as Microsoft will be > > monitoring all the e-mails as well. That kid doing this project for his > > science fair project to see how far e-mails travel will also be > > involved, so please reply to him. The 100 dollars will come from that > > African tribe leader with that money he is just dying to give away if > > you just contact him. Some of the money might come from the stolen > > tourist kidney sales in Mexico, but I'm not positive of that). > > > > -- > > Rick > > -- > Kris Schneider <mailto:[EMAIL PROTECTED]> > D.O.Tech <http://www.dotech.com/> -- Kris Schneider <mailto:[EMAIL PROTECTED]> D.O.Tech <http://www.dotech.com/> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]