Services | Updates | Contact
Home | Ajax | BioInformatics | Dojo | EAI | EJB | Hibernate | J2ME | Java | Java Glossary | Java Servlets | JavaScript | Jboss | JDBC | JDO | Jmeter | JSF | JSP | JUnit | Maven | MySQL | Spring Framework | SQL | Struts | Technology | WAP | Web Services | XML
Search All Tutorials
Top Search: Loan Struts Open Source
Alternate Layout Managers
The JGoodies offerings have some of the best layout tools.
 
WEBSERVICE USING APACHE AXIS - TUTORIAL-2 AXIS FOR EJB-WEBSERVICE (part-5)
In DeveloperIQ ( March-2004) , we had seen parts 1 to 4 of this tutorial on exposing an EJB as XML-Webservice using Axis
 
More Tutorials...

Programming Tutorials: Ajax | Articles | JSP | Bioinformatics | Database | Free Books | Hibernate | J2EE | J2ME | Java | JavaScript | JDBC | JMS | Linux | MS Technology | PHP | RMI | Web-Services | Servlets | Struts | UML

 
 
Struts
Comments
 
 

 

Aggregating Actions In Struts Revisited

                         

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? 

  1. If you observed carefully, we have created only one action class (CRUDDispatchAction) instead of four different classes for each of the Create, Read, Update and Delete actions. This is why aggregating actions are for. 
  2. Easy to use. 
  3. Cleaner code syntax. 

What are the disadvantages? 

  1. We cannot extend our CRUDDispatchAction from any custom base class and still have the aggregation. 
  2. Observe that we have used html:link in dispatchaction.jsp and a query string variable appended to the URL. So, the method name is visible in the URL. In order to avoid this, we need to set it using javascript. 
  3. Cannot attach events. More about this later. 

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? 

  1. Multiple submit buttons within the same form only differing in their name. 
  2. The actual method to call is mapped in the action class. 
  3. Button names can be set in a properties file. 

What are the disadvantages? 

  1. We cannot extend our CRUDLookupDispatchAction from any custom base class and still have the aggregation. 
  2. Change to the button name requires JVM restart. 
  3. Extra overhead of creating a separate method for button-to-method name mapping.(getKeyMethodMap() in our example) 
  4. Cannot attach events. More about this later. 

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 --> 


                         

 
Facing Programming Problem?
Add This Tutorial To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 

Current Comments

1 comments so far (post your own) View All Comments Latest 10 Comments:

It was one of the beatiful articles in my search query of www.google.com?search=struts+tutorial

Wonderful and an excellent consolidated article

Thanks for the article

Posted by kishore on Friday, 12.7.07 @ 01:46am | #41477

Leave your comment:

Name:

Email:

URL:

Title:

Comments:


Enter Code:

 

Note: Emails will not be visible or used in any way, and are not required. Please keep comments relevant. Any content deemed inappropriate or offensive may be edited and/or deleted.

No HTML code is allowed. Line breaks will be converted automatically. URLs will be auto-linked. Please use BBCode to format your text.

  EAI Articles
  Java Certification
Tell A Friend
Your Friend Name
Search Tutorials

 

 
 
Browse all Java Tutorials
Java JSP Struts Servlets Hibernate XML
Ajax JDBC EJB MySQL JavaScript JSF
Maven2 Tutorial JEE5 Tutorial Java Threading Tutorial Photoshop Tutorials Linux Technology
Technology Revolutions Eclipse Spring Tutorial Bioinformatics Tutorials Tools SQL
 

Home | JSP | EJB | JDBC | Java Servlets | WAP  | Free JSP Hosting  | Search Engine | News Archive | Jboss 3.0 tutorial | Free Linux CD's | Forum | Blogs

About Us | Advertising On RoseIndia.net  | Site Map

India News

Send your comments, Suggestions or Queries regarding this site at roseindia_net@yahoo.com.

Copyright © 2007. All rights reserved.