Hello Mark,
*************************************************************** MG> I have not found this but I have: If the source code for a class contains no declared constructors, the Java compiler automatically supplies a constructor with no parameters. Adding one or more constructor declarations to the source code of such a class will prevent this default constructor from being supplied automatically, effectively deleting a constructor, unless one of the new constructors also has no parameters, thus replacing the default constructor. JLS, page 267 MG> in the spec, but I believe the no-argument constructor MG> is available at anytime for a concrete class. This would be a good one to MG> test.... MG> -----Original Message----- MG> From: Michael Duffy [mailto:[EMAIL PROTECTED] MG> Sent: Wednesday, July 16, 2003 10:27 AM MG> To: Struts Users Mailing List MG> Subject: RE: [OT] Re: 4th Of July Struts Challenge... MG> It's my understanding that you ONLY get the default if MG> there are no other constructors written. The minute MG> you write ANY constructor, you're on your own. If you MG> still want a default ctor, you've gotta supply it. MG> I'll be happy to learn something if this is incorrect. MG> - MOD MG> --- 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/> >> >> MG> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: >> [EMAIL PROTECTED] >> >> >> >> MG> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: >> [EMAIL PROTECTED] >> MG> __________________________________ MG> Do you Yahoo!? MG> SBC Yahoo! DSL - Now only $29.95 per month! http://sbc.yahoo.com MG> --------------------------------------------------------------------- MG> To unsubscribe, e-mail: [EMAIL PROTECTED] MG> For additional commands, e-mail: [EMAIL PROTECTED] MG> --------------------------------------------------------------------- MG> To unsubscribe, e-mail: [EMAIL PROTECTED] MG> For additional commands, e-mail: [EMAIL PROTECTED] Regards, Dirk +------- Quality leads ---------------------------------------+ | Dirk Markert [EMAIL PROTECTED] | | Dr. Markert Softwaretechnik AG | | Joseph-von-Fraunhofer-Str. 20 | | 44227 Dortmund | +---------------------------------->>>>>>> to success! <<<<<<-+ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]