struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Duffy <duff...@yahoo.com>
Subject RE: [OT] Re: 4th Of July Struts Challenge...
Date Wed, 16 Jul 2003 14:26:31 GMT

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 <mark_galbreath@qat.com> 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:kris@dotech.com] 
> 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 <mark_galbreath@qat.com>:
> 
> > 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:r@reumann.net]
> > 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 <kris@dotech.com>:
> > > 
> > > > 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 <r@reumann.net>:
> > > > 
> > > > > 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:kris@dotech.com>
> > > > D.O.Tech       <http://www.dotech.com/>
> > > 
> > 
> > 
> > --
> > Rick
> 
> -- 
> Kris Schneider <mailto:kris@dotech.com>
> D.O.Tech       <http://www.dotech.com/>
> 
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail:
> struts-user-help@jakarta.apache.org
> 
> 
> 
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail:
> struts-user-help@jakarta.apache.org
> 


__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


Mime
View raw message