In my previous article Aggregating Actions in Struts , I have given a brief idea of how to create action aggregations.
In my previous article Aggregating Actions in Struts , I have given a brief idea of how to create action aggregations.
In my previous article Aggregating Actions in Struts , I have given a brief idea of how to create action aggregations. An action aggregation is a grouping of a set of related actions into a single unified action in order to eliminate the need to write a new action class for every action. In this part, I will walk through a full-fledged practical example of each of the types presented in Part I namely the DispatchAction , LookupDispatchAction , MappingDispatchAction and ActionDispatcher along with two new aggregations which slightly differ in syntax but are more efficient than the previous ones. These are EventDispatchAction and EventActionDispatcher . I call these new actions as ?Event Aggregating Actions? and the ones in Part I as ?Non-Event Aggregating Actions.?
Now let's go into some details.
Non-Event Aggregating Actions
DispatchAction
How to create one?
? Extend your action class from DispatchAction.
// src/CRUDDispatchAction.java /** * This is an example class for demonstrating DispatchAction * functionality. Observe here that we are extending our * action class not from Action but from DispatchAction. * * @author Praveen Babu Kusuma * @version 1.0.0 * * http://www.javahome.co.nr * http://praveen.awardspace.com */ public final class CRUDDispatchAction extends DispatchAction { public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Code for Create Employee follows System.out.println("I am in CRUDDispatchAction - create"); return ( mapping.findForward("success") ); } ... } |
? Define a query string parameter or a hidden variable (?methodToCall' in our examples)
// dispatchaction.jsp <tr> <td> <html:link action="crudDispatchAction? methodToCall =create"><b>C</b>reate an Employee record</html:link> </td> </tr> |
? Set the parameter's value to the desired function name of the action class (create, read etc).
// dispatchaction.jsp <tr> <td> <html:link action="crudDispatchAction?methodToCall= create "><b>C</b>reate an Employee record</html:link> </td> </tr> |
What are the advantages?
What are the disadvantages?
LookupDispatchAction
How to create one?
1. Extend your action class from LookupDispatchAction .
// src/CRUDLookupDispatchAction.java /** * This is an example class for demonstrating CRUDLookupDispatchAction * functionality. Observe here that we are extending our * action class not from Action but from LookupDispatchAction. * * @author Praveen Babu Kusuma * @version 1.0.0 * * http://www.javahome.co.nr * http://praveen.awardspace.com */ public final class CRUDLookupDispatchAction extends LookupDispatchAction { protected Map getKeyMethodMap() { Map map = new HashMap(); map.put("button.create", "create"); map.put("button.read", "read"); map.put("button.update", "update"); map.put("button.delete", "delete"); return map; } public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Code for Create Employee follows System.out.println("I am in CRUDLookupDispatchAction - create"); return ( mapping.findForward("success") ); } ... } |
2. Write an html:form and change the action name to the desired action mapping name.
// lookupdispatchaction.jsp <html:form action="crudLookupDispatchAction" > ... |
3. Set the ?property' attribute of the submit button to parameter name which should hold the method name to call.
// lookupdispatchaction.jsp <tr> <td align="center"> <html:submit property="methodToCall" ><bean:message key="button.create"/></html:submit> </td> </tr> |
What are the advantages?
What are the disadvantages?
MappingDispatchAction
How to create one?
1. Extend your action class from MappingDispatchAction
// src/CRUDMappingDispatchAction.java /** * This is an example class for demonstrating MappingDispatchAction * functionality. Observe here that we are extending our * action class not from Action but from MappingDispatchAction. * * @author Praveen Babu Kusuma * @version 1.0.0 * * http://www.javahome.co.nr * http://praveen.awardspace.com */ public final class CRUDMappingDispatchAction extends MappingDispatchAction { public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Code for Create Employee follows System.out.println("I am in CRUDMappingDispatchAction - create"); return ( mapping.findForward("success") ); } ... } |
Define different mappings for each action as needed.
// struts-config.xml <!-- MappingDispatchAction mappings Starts --> <!-- MappingDispatchAction is used when the mappings differ (observe that the number/type of attributes differ for each action) --> <action path="/createMappingDispatchAction" type="com.CRUDMappingDispatchAction" scope="request" parameter="create" > <forward name="success" path="/success.jsp"/> </action> <action path="/readMappingDispatchAction" type="com.CRUDMappingDispatchAction" scope="session" parameter="read" > <forward name="success" path="/success.jsp"/> </action> <action path="/updateMappingDispatchAction" type="com.CRUDMappingDispatchAction" scope="request" input="/mappingdispatchaction.jsp" parameter="update" > <forward name="success" path="/success.jsp"/> </action> <action path="/deleteMappingDispatchAction" type="com.CRUDMappingDispatchAction" scope="request" name="employeeForm" parameter="delete" validate="false" > <forward name="success" path="/success.jsp"/> </action> <!-- MappingDispatchAction mappings Ends --> |
Ads