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]