Hi Mark,

like Adam said, i also have one "super-action-class" :-)

i declare it as abstract an implement execute()-methode
form Action

inside execute(), i call an abstract methode (e.g. doExecute())

so our ActionServlet(it´s RequestProcessor...) calls execute()
and every subclassed doExecute().

there is a "sample-code" below:

instead of ActionForm-Klasses i also use DynaActionForms.
but i use DynaValidatorForm for using Validator-Framework.

<form-bean name="logonForm"
type="org.apache.struts.validator.DynaValidatorForm">
  <form-property name="user" type="java.lang.String" />
   <form-property name="password" type="java.lang.String" />
</form-bean>

i use PropertyUtils.copyProperties()
(from the nice jakarta-commons-beanutils-project)
inside an action.class to get the form-properties:
PropertyUtils.copyProperties(myDataTransferObject,form);
it copied all properities from form to your business-objects
if the props are named equal!!

for "manually" access
you have to use 
Integer integer = (Integer)form.get("ageOfMisterX");
form.set("ageOfMisterX",new Integer("33"));
because all properties are savaed in a HashMap

hope that helps.

cheers
Matthias

----------------------------------------------------
public abstract class SuperAction extends Action{

public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {

//do common things

return doExecute(mapping,form,request,response);
}
 
public abstract ActionForward doExecute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception;

}
-----Original Message-----
From: Adam Hardy [mailto:[EMAIL PROTECTED] 
Sent: Sunday, February 22, 2004 12:15 PM
To: Struts Users Mailing List
Subject: Re: [Newbie] Is it worth subclassing your own Action and
ActionForm classes to attain code re-use?


On 02/22/2004 05:40 AM Mark Jones wrote:
> My application allows a user to make various different types of 
> bookings for a (fictional!!!) hospital and logs them in a database. 
> Each type of booking has a set of common properties but also different

> ones depending on the type of booking being made.
> 
> I have divided my classes into a BookingAction and BookingActionForm 
> superclass and subclasses (such as AmbulanceBookingAction and
> AmbulanceBookingActionForm) because I anticipate creating other 
> subtypes of BookingAction that use the same properties in the 
> BookingAction class but not in the AmbulanceBookingAction subclass. 
> This initially seemed to me to be in keeping with programming for code

> re-use and extensibility.

I have just one Action class for the whole app that all my Action 
subclasses inherit. It does all the common processing that I need. It is

now after 2 years on the project fairly complex but it is really all 
common functionality.

I can't see any need in my situation for having a different Action 
superclass for each module.

> 
> My problem with this is, if a user submits a form which posts its data

> via the ActionServlet to the AmbulanceBookingAction subclass, how 
> would I ensure the BookingAction class did its stuff? Would it be 
> better / easier to use separate, non-derived (from my superclasses) 
> Actions and ActionForms to handle each type of booking and not 
> subclass BookingAction and BookingActionForm (even though I would be 
> repeating the some of the same properties common to each different 
> type of booking)?
> 

You make sure they do their stuff because they have the perform() or 
execute() method, and they call the actual AmbulanceBookingAction for 
example.

> I am concerned, though, not to lose points for not reusing code. It 
> just seems to me, though, that trying to divvy the handling of the 
> form data via inheritance is too complicated and / or unnecessary.
> 

I once had a ActionForm superclass with getter / setter methods for 
frequently occuring fields - but dropped it because the advantage was 
trivial. And I started using DynaActionForms.


Adam
-- 
struts 1.1 + tomcat 5.0.16 + java 1.4.2
Linux 2.4.20 Debian


---------------------------------------------------------------------
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]

Reply via email to