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 --> |
If you are facing any programming issue, such as compilation errors or not able to find the code you are looking for.
Ask your questions, our development team will try to give answers to your questions.
Ask Questions? Discuss: Aggregating Actions In Struts Revisited View All Comments
Post your Comment