Struts – MappingDispatchAction Example
Struts MappingDispatchAction class is used to group similar functionality into a single action class, and execute the function depends on parameter attribute of the corresponding ActionMapping. Here’s an example to show the use of MappingDispatchAction.
1. MappingDispatchAction class
Extends the MappingDispatchAction class, and declares two methods – generateXML() and generateExcel().
MyCustomDispatchAction.java
package com.mkyong.common.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.MappingDispatchAction; public class MyCustomDispatchAction extends MappingDispatchAction{ public ActionForward generateXML(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { request.setAttribute("method", "generateXML is called"); return mapping.findForward("success"); } public ActionForward generateExcel(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { request.setAttribute("method", "generateExcel is called"); return mapping.findForward("success"); } }
2. Struts configuration
Declares two action mappings, each point to same MyCustomDispatchAction class with different parameter attributes.
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd"> <struts-config> <action-mappings> <action path="/CustomDispatchActionXML" type="com.mkyong.common.action.MyCustomDispatchAction" parameter="generateXML" > <forward name="success" path="/pages/DispatchExample.jsp"/> </action> <action path="/CustomDispatchActionExcel" type="com.mkyong.common.action.MyCustomDispatchAction" parameter="generateExcel" > <forward name="success" path="/pages/DispatchExample.jsp"/> </action> <action path="/Test" type="org.apache.struts.actions.ForwardAction" parameter="/pages/TestForm.jsp" > </action> </action-mappings> </struts-config>
3. View page
In JSP page, the links work as following :
1. /CustomDispatchActionXML will execute the generateXML() method.
2. /CustomDispatchActionExcel will execute the generateExcel() method.
TestForm.jsp
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
</head>
<body>
<h2>Struts - DispatchAction Example</h2>
<h4>html:link</h4>
<p>
<html:link action="/CustomDispatchActionXML" >
Generate XML File
</html:link>
|
<html:link action="/CustomDispatchActionExcel" >
Generate Excel File
</html:link>
</p>
<h4>a href</h4>
<p>
<a href="CustomDispatchActionXML.do">
Generate XML File
</a>
|
<a href="CustomDispatchActionExcel.do" >
Generate Excel File
</a>
</p>
</body>
</html>DispatchExample.jsp
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> <html> <head> </head> <body> <h2>Struts - DispatchAction Example</h2> <bean:write name="method"/> </body> </html>
4. Test it
http://localhost:8080/StrutsExample/Test.do

If the “Generate XML File” link is clicked, it will forward to http://localhost:8080/StrutsExample/CustomDispatchActionXML.do

If the “Generate Excel File” link is clicked, it will forward to http://localhost:8080/StrutsExample/CustomDispatchActionExcel.do


Very helpful
Thanks
Hi Yong,
Is it possible to have one submit button (say: Generate XML/Excel) which will perform same above function (Generate XML file or Generate Excel file) instead of using hyperlinks? If so can you please provide us with an example?
I want to implement similar kind of functionality for Insert/Update action. Some how i did that with hidden value property of html to differentiate which method i have to use in action class. But want to know some other way.