Home >> Struts
Struts version 2.1.6 - Result Type as the Action chain with an example
I have sometimes felt that Action chaining is required if the business
requirement is to perform some generic action before forwarding request
to another page navigational action, like for example,
if certain service that is very generic in nature and should not be
bundled with all the View/UI/Page navigation Action class files,
instead if thie service has to be a re-usable component and associated
action should be called first and then the Page forward should happen.
Then in this case, Struts Action chain Result type definition can be
very useful.
In this example, I shall try to show a very simple functionality,
that you might have already read in some other example in this site.
|
|  |
|
Like for example, a screen having two fields testHeader and testFooter.
Both these text fields values are set by user and on submit for the form
, a Action (in this case ExampleInitialAction) will be called.
But surprisingly this Action class is not having these two fields/variables
in it, but it just return the result name (that is "preview"), but in
struts.xml configuration file, this result is of type "chain", and
some of the param such as "namespace" and "actionName" takes the processing
to another action that is "xslt-view" with namespace as "/sample-xslt".
And the action class file name is "ExampleXSLTAction".
this action receives values from those text fields "testHeader" and
"testFooter" and returns either "preview" or "input" string value.
Hence the output screen is shown with the help of appropriate XSLT file.
Let us see struts.xml file as follows:
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="initial" namespace="/sample"
extends="struts-default">
<action name="test" class="sample.ExampleInitialAction"
method="preview">
<result name="preview" type="chain">
<param name="namespace">/sample-xslt</param>
<param name="actionName">xslt-view</param>
</result>
</action>
</package>
<package name="xslt-example" namespace="/sample-xslt"
extends="struts-default">
<action name="xslt-view" class="sample.ExampleXSLTAction"
method="preview">
<result name="preview" type="xslt">
<param name="stylesheetLocation">
/sources/test.xslt
</param>
</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
|
As you can go through the above struts.xml file, we have here two Action
class files, as follows:
sample.ExampleInitialAction.java
package sample;
public class ExampleInitialAction
{
public String preview() throws Exception{
return "preview";
}
}
|
And
sample.ExampleXSLTAction.java
package sample;
public class ExampleXSLTAction {
private String testHeader;
private String testFooter;
public void setTestHeader(String arg) {
testHeader = arg;
}
public String getTestHeader(){
return testHeader;
}
public void setTestFooter(String arg) {
testFooter = arg;
}
public String getTestFooter(){
return testFooter;
}
public String preview() throws Exception {
if((testHeader != null && testHeader.length() >0) &&
(testFooter != null && testFooter.length() <0))
return "preview";
else
return "input";
}
}
|
We have a XSLT file as follows:
/sources/test.xslt
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html"/>
<xsl:template match="result">
<html>
<body>
<h4><xsl:value-of select="testHeader"/></h4>
<br/>
<xsl:value-of select="testFooter"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
and the index.jsp is very straight forward:
index.jsp
<%@ taglib uri="/struts-tags" prefix="struts2"%>
<html>
<head>
</head>
<body>
<struts2:form method="post" action="test" namespace="/sample">
<table>
<tr><td><struts2:textfield key="testHeader" label="Enter Header :"/>
</td></tr>
<tr><td><struts2:textfield key="testFooter" label="Enter Footer :"/>
</td></tr>
<tr><td colspan="2"><struts2:submit value="Register"/></td></tr>
</table>
</struts2:form>
</body>
</html>
|
Web Application Descriptor file is same as any other example from this
site:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>sample-filter</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>sample-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
|
Anybody having any technical difficulties in setting up and
running this example, please let me know by commenting in this
page using the form below.
Thanks for reading this.
If you like to share your comment/suggestions/feedback relating to this Page,
you can do so by droping us an email at
usingframeworks @ gmail . com
with the subject line mentioning URL for this Page (i.e,
/struts-result-chain.php) or use this
LINK.
As per this website's privacy policy, we never disclose your email id,
though we shall post your comments/suggestions/feedback with
your name (optional) and date on this Page. If you don't want your
comments/suggestions/feedback to be shared in this Page, please
mention so in your email to us. Thank you very much.....
If anything missed out , please let me know at
techienjoy at yahoo . com