Isn't this similar to what the Dispatch action does? -----Original Message----- From: Chan, Charles [mailto:[EMAIL PROTECTED]] Sent: Monday, January 13, 2003 10:18 AM To: 'Struts Users Mailing List' Subject: One way of writing BaseAction
Hi, I just want to share with you my base action class implementation. I use reflection to avoid putting <if>..</else> logic in the execute() method. I am not sure if somone has done this before, so I want to share fragement of my codes here and ask for opinions. I have used it to implement a simple site and am quite happy with it. Let me know what you think or if you find it useful. :) Cheers Charles /** * This class is an abstract Struts <code>Action</code> class that all * <code>Action</code> classes should extend. A typical Action class * handles multiple actions (requests). For example, a EmailAction class should * be able to handle all actions related to Emails (sending, replying, viewing, * etc.). To avoid cluttering the <code>execute</code> method with <code>if... * else</code> block, this base Action class calls individual <code>doXXX</code> * methods in the derived class to perform the specific action. The exact name * of the method (the XXX) is defined as a <code>parameter</code> in the Action * mapping section of struts- config.xml. * <p> * An example of struts-config.xml for a EmailAction: * <p> * Calls EmailAction.doNew() when /email/new.do is requested. * <pre> * <action path="/email/new" * name="emailForm" * type="EmailAction" * parameter="new" * scope="request" * validate="true"> * <forward name="Success" * path="/jsp/form/emailForm.jsp" * redirect="false" /> * </action> * </pre> * <p> * Calls EmailAction.doView() when /email/view.do is requested. * <pre> * <action path="/email/view" * name="emailForm" * type="EmailAction" * parameter="view" * scope="request" * validate="true"> * <forward name="Success" * path="/jsp/form/emailForm.jsp" * redirect="false" /> * </action> * </pre> */ public abstract class BaseAction extends Action { /** * Our default implementation. If parameter is specified in ActionMapping, * we will do the new processing mode and call the method * "String doParameter()", e.g. if parameter is "edit", "String doEdit()" * is executed. The return String of that method is used to find the * ActionForward from the mapping. * * If no such parameter is found, we'll write some debugging information * to the response to let the programmer know that he forget to * implement the perform() method. */ public final ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { boolean hasForm = (form != null); /* Use our custom Request object to protect access to HttpServletRequest */ Request req = new Request(request); String mode = mapping.getParameter(); // invoke "doMode() with custom request object (using MethodUtils) // based on hasForm, we can either invoke doMode(req) or doMode(req, form) } } -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>