One of my favorite subclasses is EventDispatchAction. Check it out: http://struts.apache.org/1.x/struts-extras/apidocs/org/apache/struts/ actions/EventDispatchAction.html

Basically, it works by allowing you to define various methods in your Action class, which are tied to your various submit buttons. By defining specific methods depending on your type of form submission, you can manually validate your form when you want to.

For example, if I have a form showing a record from a database, I might have 3 different submit buttons. "Delete", "Update", and "Retrieve". the code in the jsp would be like:
<html:form action="multipleButtons">
  <html:submit property="action_delete">Delete</html:submit>
  <html:submit property="action_update">Update</html:submit>
  <html:submit property="action_retrieve">Retrieve</html:submit>
</html:form>

The action mapping will contain a "parameter" attribute where you'll name all of the potential ways that you might submit this form. The comma delineated values will match the values of the "property" attributes in your submit buttons. These will then link up to methods with the same name in your subclass of EventDispatchAction. Your action mapping in the struts-config.xml might look like the following.

<action
        path="/multipleButtons"
        input="/WEB-INF/jsp/multipleButtons.jsp"
        type="MyEventDispatchAction"
        name="MyForm"
        validate="false"
        scope="request"
        parameter="action_delete,action_retrieve,action_update"
        >
</action>
                
Finally, your subclass of EventDispatchAction would look like this

public class MyEventDispatchAction extends EventDispatchAction {
        
        //Executes when the "action_delete" button is selected
        public ActionForward action_delete(ActionMapping mapping,
                ActionForm form,
                HttpServletRequest request,
                HttpServletResponse response
                )throws Exception{
                //no validation
                ActionForward forward = mapping.findForward("success");
                return forward;
        }

        //Executes when the "action_update" button is selected
        //This is where I want to validate
        public ActionForward action_update(ActionMapping mapping,
                ActionForm form,
                HttpServletRequest request,
                HttpServletResponse response
                )throws Exception{
                ActionForward forward = mapping.getInputForward();
                //I want validation here!
                ActionMessages errors = form.validate();
                if(errors.isEmpty){
                         //go ahead and save the record
                         forward = mapping.findForward("success");
                }
                return forward;
        }

        //Executes when the "action_retrieve" button is selected
        public ActionForward action_retrieve(ActionMapping mapping,
                ActionForm form,
                HttpServletRequest request,
                HttpServletResponse response
                )throws Exception{
                //no validation
                ActionForward forward = mapping.findForward("success");
                return forward;
        }
}

I've had good success using this class. I hope it fits the bill for you.

Eric Rank


On Dec 12, 2006, at 10:00 AM, Thom Burnett wrote:

I have a few buttons on my jsp page and I want to have validation happen on
some buttons and not on other buttons.

Is that possible? How? Any examples around?


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to