First, I really appreciate the quick response!

I'm a little confused on the suggestion, since save() is called automatically 
since it uses a dispatch action.  The struts-config.xml has a mapping for 
event_save=save, so if it's in save(), I wouldn't really need to test a form 
field called Action, since the dispatch occurred, right?  I also don't have a 
save forward, just a success.

The full save method is:

    public ActionForward save(ActionMapping mapping, 
                              ActionForm form, 
                              HttpServletRequest request, 
                              HttpServletResponse response) 
       throws Exception, 
              ServletException 
   {
        ActionForward fwd = mapping.getInputForward(); // default to input
        if (isFormValid(mapping, form, request)) {
             if ( mapping instanceof CRUDActionMapping ) {
                log.info("process CRUDActionMapping");
                CRUDActionMapping myMapping = (CRUDActionMapping) mapping;
                if ( myMapping.getFormType().equalsIgnoreCase("SINGLERECORD")) {
                   saveFormData(mapping, form, request);    
                }
                else if 
(myMapping.getFormType().equalsIgnoreCase("MULTIRECORD")) {
                    saveMultiRecordForm ( mapping,
                                          form,
                                          request );
                } // dispatch based on form type
            } // handle CRUDActionMapping type
            else {
              // original call to save which you override
              saveFormData(mapping, form, request);   
            }
            fwd = mapping.findForward("success");
        }
        return (fwd);
    } //save

The supporting methods:

    private boolean isFormValid(ActionMapping mapping, ActionForm form, 
                                HttpServletRequest request) {
        ActionMessages errors = form.validate(mapping, request);
        boolean formIsInvalid = (errors != null && !errors.isEmpty());
        if (formIsInvalid) {
            saveErrors(request, errors);
        }
        return (!formIsInvalid);
    } // isFormValid

Since I've only written something for multi-record, the default saveFormData 
must be over-ridden if the actionMapping is not of type CRUDActionMapping, or 
it's not defined as MULTIRECORD.  That is, this method is empty in the base 
class:

    public void saveFormData(ActionMapping mapping, 
                             ActionForm form, 
                             HttpServletRequest request) 
       throws Exception {
        // override in another class.  
    } //  saveFormData

If there's more code that's needed, let me know.  

The code has the hierarchy:
Action
   BaseEventActionDispatcher (base class for app to setup dispatch)
      BaseEventActionDispatcherCbp (the class I refer to above where I'm 
writing default multi-record handling/processing)
         CbdeqrEngCodeHoursAction (the action for a page)

The only codein BaseEventActionDispatcher is:

public class BaseEventActionDispatcher extends Action {
     /**
       * Instantiate event dispatcher
       */
      protected ActionDispatcher dispatcher = 
          new EventActionDispatcher(this);

      /**
       * Use event dispatcher to call an appropriate event handler. 
       * By using a dispatcher an action class does not need 
       * to extend DispatchAction.
       */
      public ActionForward execute(ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
          throws Exception {
          return dispatcher.execute(mapping, form, request, response);
      }

    public ActionForward cancelled(ActionMapping mapping, ActionForm form, 
                                 HttpServletRequest request, 
                                 HttpServletResponse response) throws 
IOException, 
                                                                      
ServletException, 
                                                                        
SQLException {
        
        // find global forward if action cancelled
        return mapping.findForward( "cancelpage");
    }// cancelled
       


-----Original Message-----
From: Martin Gainty [mailto:[EMAIL PROTECTED]
Sent: Wednesday, October 11, 2006 3:44 PM
To: Struts Users Mailing List
Subject: Re: Code reduction for Action classes


1)rewrite your save() logic to invoke form.getAction() and test on the returned 
parameter
if(form.getAction() == "save")
{
//do all your save logic here
  return (mapping.findForward("save"));
}
//the last thing you need to do in your save method is to return the mapping 
for success as in
return (mapping.findForward("success"));

I cant speculate on any of the other classes as you havent displayed the code 
for those.
M-

This e-mail communication and any attachments may contain confidential and 
privileged information for the use of the 
designated recipients named above. If you are not the intended recipient, you 
are hereby notified that you have received
this communication in error and that any review, disclosure, dissemination, 
distribution or copying of it or its 
contents

Reply via email to