It's my understanding that you ONLY get the default if there are no other constructors written. The minute you write ANY constructor, you're on your own. If you still want a default ctor, you've gotta supply it.
I'll be happy to learn something if this is incorrect. - MOD --- Mark Galbreath <[EMAIL PROTECTED]> wrote: > The no-argument constructor is the default and does > not have to be declared. > You have a 2-arg constructor. As for JSTL (or any > EL) acting like straight > scripting, I've never had an argument with using > scripting where > appropriate. Pragmatism should be the rule of the > day. Finally, I don't > know why declaring DynaActionForm beans as Maps > didn't work for me, but > neither is it a big issue. I realize the constraints > of declaring a variable > as a concrete/abstract class vs. as an interface. > > Besides, I like what you've created. :-) > > -----Original Message----- > From: Kris Schneider [mailto:[EMAIL PROTECTED] > Sent: Wednesday, July 16, 2003 8:55 AM > To: Struts Users Mailing List > Subject: RE: [OT] Re: 4th Of July Struts > Challenge... > > > Quoting Mark Galbreath <[EMAIL PROTECTED]>: > > > A few comments: > > > > 1. I got runtime errors when I declared a > DynaActionForm bean of type > > Map; I had to declare it of type HashMap. > > Not sure what you're doing, but the example works as > coded. If it matters, > post some details and we'll see if something needs > fixing. > > > 2. You may be using JSTL, but it still looks like > scripting to > > me..... > > Fair enough. What's your recommended alternative to > JSTL when using JSP for > your view layer? > > > 3. Strictly speaking, JavaBeans do not contain a > constructor and > > implement Serializable. > > Strictly speaking, a JavaBean *does* contain a > construtctor (or even more > than one), just like any other Java class. It's just > that a "real" bean > needs to have a no-arg constructor. The actual code > that I uploaded to Rick > includes a no-arg construtctor for EmployeeBean but > omitted implementing > Serializable or Externalizable. The bean also fails > to act as an event > source and it doesn't check for things like null > values passed to either its > construtctor or its set methods. > > > Mark > > > > -----Original Message----- > > From: Rick Reumann [mailto:[EMAIL PROTECTED] > > Sent: Tuesday, July 15, 2003 11:44 PM > > To: Struts Users Mailing List > > Subject: [OT] Re: 4th Of July Struts Challenge... > > > > > > Kris... this was just awesome! Thanks. You da > 'man:) > > > > On Tue, Jul 15,'03 (11:25 AM GMT-0400), Kris > wrote: > > > > > 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/> > > > > > > > > > -- > > Rick > > -- > 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] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] > __________________________________ Do you Yahoo!? SBC Yahoo! DSL - Now only $29.95 per month! http://sbc.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]