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]

Reply via email to