Author: lukaszlenart
Date: Fri Sep 2 05:58:25 2016
New Revision: 996489
Log:
Updates production
Added:
websites/production/struts/content/docs/struts-23-to-25-migration.html
Modified:
websites/production/struts/content/docs/action-configuration.html
websites/production/struts/content/docs/actionmapper.html
websites/production/struts/content/docs/interceptors.html
websites/production/struts/content/docs/migration-guide.html
websites/production/struts/content/docs/webxml.html
Modified: websites/production/struts/content/docs/action-configuration.html
==============================================================================
--- websites/production/struts/content/docs/action-configuration.html (original)
+++ websites/production/struts/content/docs/action-configuration.html Fri Sep
2 05:58:25 2016
@@ -139,12 +139,14 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><p>The action mappings are the basic
"unit-of-work" in the framework. Essentially, the action maps an identifier to
a handler class. When a request matches the action's name, the framework uses
the mapping to determine how to process the request.</p><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1462940751946 {padding: 0px;}
-div.rbtoc1462940751946 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1462940751946 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1472795634518 {padding: 0px;}
+div.rbtoc1472795634518 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1472795634518 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1462940751946">
-<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-ActionMappings">Action Mappings</a></li><li><a
shape="rect" href="#ActionConfiguration-ActionNames">Action
Names</a></li><li><a shape="rect"
href="#ActionConfiguration-ActionMethods">Action Methods</a></li><li><a
shape="rect" href="#ActionConfiguration-WildcardMethod">Wildcard
Method</a></li><li><a shape="rect"
href="#ActionConfiguration-DynamicMethodInvocation">Dynamic Method
Invocation</a>
+/*]]>*/</style></p><div class="toc-macro rbtoc1472795634518">
+<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-ActionMappings">Action Mappings</a></li><li><a
shape="rect" href="#ActionConfiguration-ActionNames">Action Names</a>
+<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-ActionNamesWithSlashes">Action Names With
Slashes</a></li><li><a shape="rect"
href="#ActionConfiguration-ActionNameswithDotsandDashes">Action Names with Dots
and Dashes</a></li><li><a shape="rect"
href="#ActionConfiguration-Allowedactionnames">Allowed action
names</a></li></ul>
+</li><li><a shape="rect" href="#ActionConfiguration-ActionMethods">Action
Methods</a></li><li><a shape="rect"
href="#ActionConfiguration-WildcardMethod">Wildcard Method</a></li><li><a
shape="rect" href="#ActionConfiguration-DynamicMethodInvocation">Dynamic Method
Invocation</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-StrictDMI">Strict DMI</a></li><li><a shape="rect"
href="#ActionConfiguration-StrictMethodInvocation">Strict Method
Invocation</a></li></ul>
</li><li><a shape="rect"
href="#ActionConfiguration-ActionSupportDefault">ActionSupport
Default</a></li><li><a shape="rect"
href="#ActionConfiguration-Post-BackDefault">Post-Back Default</a></li><li><a
shape="rect" href="#ActionConfiguration-ActionDefault">Action Default</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-WildcardDefault">Wildcard Default</a></li></ul>
@@ -154,7 +156,7 @@ div.rbtoc1462940751946 li {margin-left:
<result type="redirectAction">Menu</result>
<result name="input">/Logon.jsp</result>
</action> </pre>
-</div></div><p> </p><p>When using <a shape="rect"
href="convention-plugin.html">Convention Plugin</a> the action mapping can be
configured with annotations:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>A Logon Action with
annotations</b></div><div class="codeContent panelContent pdl">
+</div></div><p>When using <a shape="rect"
href="convention-plugin.html">Convention Plugin</a> the action mapping can be
configured with annotations:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>A Logon Action with
annotations</b></div><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">package tutorial
@Action("Logon") // actually that is not necessary as it is added by convention
@@ -169,7 +171,12 @@ public class Logon {</pre>
<s:submit/>
</s:form>
</pre>
-</div></div><div class="confluence-information-macro
confluence-information-macro-information"><p class="title">Action Names With
Slashes</p><span class="aui-icon aui-icon-small aui-iconfont-info
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>If your action names have slashes
in them (for example, <code><action name="admin/home"
class="tutorial.Admin"/></code>) you need to specifically allow slashes in
your action names via a constant in the <code>struts.xml</code> file by
specifying <code><constant name="struts.enable.SlashesInActionNames"
value="true"/></code>. See <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-1383">JIRA Issue WW-1383</a> for
discussion as there are side effects to setting this property to
<code>true</code>.</p></div></div><div class="confluence-information-macro
confluence-information-macro-note"><p class="title">Action Names with Dots and
Dashes</p><span class="aui-ic
on aui-icon-small aui-iconfont-warning
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Although action naming is pretty
flexible, one should pay attention when using dots (eg.
<code>create.user</code>) and/or dashes (eg. <code>my-action</code>). While the
dot notation has no known side effects at this time, the dash notation will
cause problems with the generated JavaScript for certain tags and themes. Use
with caution, and always try to use camelcase action names (eg.
<code>createUser</code>) or underscores (eg.
<code>my_action</code>).</p></div></div><h2
id="ActionConfiguration-ActionMethods">Action Methods</h2><p>The default entry
method to the handler class is defined by the Action interface.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Action
interface</b></div><div class="codeContent panelContent pdl">
+</div></div><h3 id="ActionConfiguration-ActionNamesWithSlashes">Action Names
With Slashes</h3><p><span>If your action names have slashes in them (for
example, </span><code><action name="admin/home"
class="tutorial.Admin"/></code><span>) you need to specifically allow
slashes in your action names via a constant in the
</span><code>struts.xml</code><span> file by specifying
</span><code><constant name="struts.enable.SlashesInActionNames"
value="true"/></code><span>. See </span><a shape="rect"
class="external-link" href="https://issues.apache.org/jira/browse/WW-1383">JIRA
Issue WW-1383</a><span> for discussion as there are side effects to setting
this property to </span><code>true</code><span>.</span></p><h3
id="ActionConfiguration-ActionNameswithDotsandDashes">Action Names with Dots
and Dashes</h3><p>Although action naming is pretty flexible, one should pay
attention when using dots (eg. create.user) and/or dashes (eg. my-action).
While the dot notation has no known side e
ffects at this time, the dash notation will cause problems with the generated
JavaScript for certain tags and themes. Use with caution, and always try to use
camelcase action names (eg. createUser) or underscores (eg. my_action).</p><h3
id="ActionConfiguration-Allowedactionnames">Allowed action
names</h3><p><code>DefaultActionMapper</code> is using pre-defined RegEx to
check if action name matches allowed names. The default RegEx is defined as
follow: <code>[a-zA-Z0-9._!/\-]*</code> - if at some point this doesn't
match your action naming schema you can define your own RegEx and override the
default using constant named <code>struts.allowed.action.names</code>,
e.g.:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><struts>
+ <constant name="struts.allowed.action.names" value="[a-z{}]"*/>
+ ...
+</struts></pre>
+</div></div><p><strong>NOTE</strong>: Please be aware that action names not
matching the RegEx will rise an exception.</p><h2
id="ActionConfiguration-ActionMethods">Action Methods</h2><p>The default entry
method to the handler class is defined by the Action interface.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Action
interface</b></div><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">public interface Action {
public String execute() throws Exception;
}
Modified: websites/production/struts/content/docs/actionmapper.html
==============================================================================
--- websites/production/struts/content/docs/actionmapper.html (original)
+++ websites/production/struts/content/docs/actionmapper.html Fri Sep 2
05:58:25 2016
@@ -139,85 +139,33 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1464698209808 {padding: 0px;}
-div.rbtoc1464698209808 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1464698209808 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1472795636335 {padding: 0px;}
+div.rbtoc1472795636335 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1472795636335 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1464698209808">
+/*]]>*/</style></p><div class="toc-macro rbtoc1472795636335">
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionMapper-Description">Description</a></li><li><a shape="rect"
href="#ActionMapper-DefaultActionMapper">DefaultActionMapper</a>
-<ul class="toc-indentation"><li><a shape="rect"
href="#ActionMapper-Methodprefix">Method prefix</a></li><li><a shape="rect"
href="#ActionMapper-Actionprefix">Action prefix</a></li></ul>
+<ul class="toc-indentation"><li><a shape="rect"
href="#ActionMapper-Methodprefix">Method prefix</a></li><li><a shape="rect"
href="#ActionMapper-Actionprefix">Action prefix</a></li><li><a shape="rect"
href="#ActionMapper-AllowedactionnameRegEx">Allowed action name
RegEx</a></li><li><a shape="rect"
href="#ActionMapper-AllowedmethodnameRegEx">Allowed method name
RegEx</a></li></ul>
</li><li><a shape="rect" href="#ActionMapper-CustomActionMapper">Custom
ActionMapper</a></li><li><a shape="rect"
href="#ActionMapper-CompositeActionMapper">CompositeActionMapper</a></li><li><a
shape="rect"
href="#ActionMapper-PrefixBasedActionMapper">PrefixBasedActionMapper</a></li><li><a
shape="rect"
href="#ActionMapper-ActionMapperandActionMappingobjects">ActionMapper and
ActionMapping objects</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionMapper-Customize">Customize</a></li></ul>
</li><li><a shape="rect"
href="#ActionMapper-Next:ActionProxy&ActionProxyFactory">Next: Action Proxy
& ActionProxy Factory</a></li></ul>
-</div><h2 id="ActionMapper-Description">Description</h2><p></p><p></p><p>
-The ActionMapper interface provides a mapping between HTTP requests and action
invocation requests and vice-versa.
-</p>
-
-<p></p><p>
-When given an HttpServletRequest, the ActionMapper may return null if no
action invocation request matches,
-or it may return an ActionMapping that describes an action invocation for the
framework to try.
-</p>
-
-<p></p><p>
-The ActionMapper is not required to guarantee that the ActionMapping returned
be a real action or otherwise
-ensure a valid request.
-Accordingly, most ActionMappers do not need to consult the Struts configuration
-just to determine if a request should be mapped.
-</p>
-
-<p></p><p>
-Just as requests can be mapped from HTTP to an action invocation, the opposite
is true as well.
-However, because HTTP requests (when shown in HTTP responses) must be in
String form,
-a String is returned rather than an actual request object.
-</p><h2 id="ActionMapper-DefaultActionMapper">DefaultActionMapper</h2><p>By
default, the DefaultActionMapper is used:</p><p></p><p>
-Default action mapper implementation, using the standard *.[ext] (where ext
-usually "action") pattern. The extension is looked up from the Struts
-configuration key <b>struts.action.extension</b>.
-</p>
-
-<p></p><p>
-To help with dealing with buttons and other related requirements, this
-mapper (and other ActionMappers, we hope) has the ability to name a
-button with some predefined prefix and have that button name alter the
-execution behaviour. The four prefixes are:
-</p>
-
-<p></p><ul><li>Method prefix - <i>method:default</i></li><li>Action prefix -
<i>action:dashboard</i></li></ul>
-
-<p></p><p>
-In addition to these four prefixes, this mapper also understands the
-action naming pattern of <i>foo!bar</i> in either the extension form (eg:
-foo!bar.action) or in the prefix form (eg: action:foo!bar). This syntax tells
-this mapper to map to the action named <i>foo</i> and the method <i>bar</i>.
-</p><h3 id="ActionMapper-Methodprefix">Method prefix</h3><p></p><p></p><p>
-With method-prefix, instead of calling baz action's execute() method (by
-default if it isn't overriden in struts.xml to be something else), the baz
-action's anotherMethod() will be called. A very elegant way determine which
-button is clicked. Alternatively, one would have submit button set a
-particular value on the action when clicked, and the execute() method decides
-on what to do with the setted value depending on which button is clicked.
-</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
-<s:form action="baz">
- <s:textfield label="Enter your name"
name="person.name"/>
- <s:submit value="Create person"/>
- <s:submit method="anotherMethod" value="Cancel"/>
+</div><h2 id="ActionMapper-Description">Description</h2><p>The ActionMapper
interface provides a mapping between HTTP requests and action invocation
requests and vice-versa.</p><p>When given an HttpServletRequest, the
ActionMapper may return null if no action invocation request matches or it
may return an {{ActionMapping}} that describes an action invocation for the
framework to try.</p><p>The ActionMapper is not required to guarantee that the
{{ActionMapping}} returned be a real action or otherwise ensure a valid
request. Accordingly, most ActionMappers do not need to consult the Struts
configuration just to determine if a request should be mapped.</p><p>Just
as requests can be mapped from HTTP to an action invocation, the opposite is
true as well. However, because HTTP requests (when shown in HTTP
responses) must be in String form, a String is returned rather than an
actual request object.</p><h2
id="ActionMapper-DefaultActionMapper">DefaultActionMapp
er</h2><p>Default action mapper implementation, using the standard
<code>*.[ext]</code> (where ext usually <strong>action</strong>)
pattern. The extension is looked up from the Struts configuration key
{<b>{struts.action.extension}}.</p><p>To help with dealing with buttons
and other related requirements, this mapper (and other {{ActionMapper}}s,
we hope) has the ability to name a button with some predefined prefix and
have that button name alter the execution behaviour. The four prefixes
are:</p><ul style="list-style-type: square;"><li>Method prefix
- <code>method:default</code></li><li>Action prefix
- <code>action:dashboard</code></li></ul><p>In addition to these four
prefixes, this mapper also understands the action naming pattern of
<code>foo!bar</code> in either the extension form
(eg: <code>foo!bar.action</code>) or in the prefix form (eg:
<code>action:foo!bar</code>). This syntax tells this mapper to map to the
action named <code>foo</code> and the method <code>bar</code>.</p><h3
id="ActionMapper-Methodprefix">Method prefix</h3><p>With method-prefix, instead
of calling baz action's <code>execute()</code> method (by default if
it isn't overridden in <code>struts.xml</code> to be something else), the
baz action's <code>anotherMethod()</code> will be called. A very
elegant way determine which button is clicked. Alternatively, one would
have submit button set a particular value on the action when clicked, and
the <code>execute()</code> method decides on what to do with the
setted value depending on which button is clicked.</p><div class="code panel
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><!-- START SNIPPET: method-example -->
+<s:form action="baz">
+ <s:textfield label="Enter your name" name="person.name"/>
+ <s:submit value="Create person"/>
+ <s:submit method="anotherMethod" value="Cancel"/>
</s:form>
-]]></script>
-</div></div><h3 id="ActionMapper-Actionprefix">Action
prefix</h3><p></p><p></p><p>
-With action-prefix, instead of executing baz action's execute() method (by
-default if it isn't overridden in struts.xml to be something else), the
-anotherAction action's execute() method (assuming again if it isn't overridden
-with something else in struts.xml) will be executed.
-</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
-<s:form action="baz">
- <s:textfield label="Enter your name"
name="person.name"/>
- <s:submit value="Create person"/>
- <s:submit action="anotherAction" value="Cancel"/>
+<!-- END SNIPPET: method-example --></pre>
+</div></div><h3 id="ActionMapper-Actionprefix">Action prefix</h3><p>With
action-prefix, instead of executing baz action's
<code>execute()</code> method (by default if it isn't overridden in
struts.xml to be something else), the anotherAction action's
<code>execute()</code> method (assuming again if it isn't
overridden with something else in <code>struts.xml</code>) will be
executed.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><!-- START SNIPPET: action-example -->
+<s:form action="baz">
+ <s:textfield label="Enter your name" name="person.name"/>
+ <s:submit value="Create person"/>
+ <s:submit action="anotherAction" value="Cancel"/>
</s:form>
-]]></script>
-</div></div><h2 id="ActionMapper-CustomActionMapper">Custom
ActionMapper</h2><p>You can define your own ActionMapper by implementing
<code>org.apache.struts2.dispatcher.mapper.ActionMapper</code> then configuring
Struts 2 to use the new class in struts.xml</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<!-- END SNIPPET: action-example --></pre>
+</div></div><h3 id="ActionMapper-AllowedactionnameRegEx">Allowed action name
RegEx</h3><p>By default the mapper will check if extracted action name matches
provided RegEx, i.e. <code>[a-zA-Z0-9._!/\-]*</code>. You redefine this
RegEx by defining a constant in <code>struts.xml</code>
named <code>struts.allowed.action.names</code>. If action name doesn't
match the RegEx a default action name will be returned which is defined
as <code>index</code>. You can also redefine this by specifying
constant <code>struts.default.action.name</code>
in <code>struts.xml</code></p><h3
id="ActionMapper-AllowedmethodnameRegEx">Allowed method name RegEx</h3><p>The
same logic as above is used for extracted methods, the default RegEx
<code>(</code><code>[a-zA-Z_]*[0-9]*)</code> is used to check if method is
allowed, you can change this by setting
constant <code>struts.allowed.method.names</code>
in <code>struts.xml</code>. If method doesn't match the RegEx a default
method is returned, i.e. <code>execute</code>. This can be changed by
defining constant <code>struts.default.method.name</code>
in <code>struts.xml</code>.</p><p>Please note that this funcionallity only
works when <a shape="rect"
href="https://cwiki.apache.org/confluence/display/WW/Action+Configuration#ActionConfiguration-DynamicMethodInvocation">Dynamic
Method Invocation</a> is enabled.</p><h2
id="ActionMapper-CustomActionMapper">Custom ActionMapper</h2><p>You can define
your own ActionMapper by implementing
<code>org.apache.struts2.dispatcher.mapper.ActionMapper</code> then configuring
Struts 2 to use the new class in struts.xml</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><bean
type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="mymapper"
class="com.mycompany.myapp.MyActionMapper" />
<constant name="struts.mapper.class" value="mymapper" />
</pre>
Modified: websites/production/struts/content/docs/interceptors.html
==============================================================================
--- websites/production/struts/content/docs/interceptors.html (original)
+++ websites/production/struts/content/docs/interceptors.html Fri Sep 2
05:58:25 2016
@@ -139,11 +139,11 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><div
class="confluence-information-macro confluence-information-macro-tip"><span
class="aui-icon aui-icon-small aui-iconfont-approve
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>The default Interceptor stack is
designed to serve the needs of most applications. Most applications will
<strong>not</strong> need to add Interceptors or change the Interceptor
stack.</p></div></div><p>Many Actions share common concerns. Some Actions need
input validated. Other Actions may need a file upload to be pre-processed.
Another Action might need protection from a double submit. Many Actions need
drop-down lists and other controls pre-populated before the page
displays.</p><p>The framework makes it easy to share solutions to these
concerns using an "Interceptor" strategy. When you request a resource that maps
to an "action", the framework invokes the Action object. But, before the Action
is executed, the invocatio
n can be intercepted by another object. After the Action executes, the
invocation could be intercepted again. Unsurprisingly, we call these objects
"Interceptors."</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1464698104770 {padding: 0px;}
-div.rbtoc1464698104770 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1464698104770 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1472795632122 {padding: 0px;}
+div.rbtoc1472795632122 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1472795632122 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1464698104770">
+/*]]>*/</style></p><div class="toc-macro rbtoc1472795632122">
<ul class="toc-indentation"><li><a shape="rect"
href="#Interceptors-UnderstandingInterceptors">Understanding
Interceptors</a></li><li><a shape="rect"
href="#Interceptors-ConfiguringInterceptors">Configuring
Interceptors</a></li><li><a shape="rect"
href="#Interceptors-StackingInterceptors">Stacking Interceptors</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#Interceptors-TheDefaultConfiguration">The Default
Configuration</a></li></ul>
</li><li><a shape="rect" href="#Interceptors-FrameworkInterceptors">Framework
Interceptors</a>
@@ -186,7 +186,7 @@ div.rbtoc1464698104770 li {margin-left:
</action>
</package>
</pre>
-</div></div><p>Looking inside <code>struts-default.xml</code>, we can see how
it's done.</p><h3 id="Interceptors-TheDefaultConfiguration">The Default
Configuration</h3><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+</div></div><p>Looking inside <code>struts-default.xml</code>, we can see how
it's done.</p><h3 id="Interceptors-TheDefaultConfiguration">The Default
Configuration</h3><p></p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<?xml version="1.0" encoding="UTF-8" ?>
<!--
@@ -563,8 +563,8 @@ div.rbtoc1464698104770 li {margin-left:
</struts>
]]></script>
-</div></div><p>Since the <code>struts-default.xml</code> is included in the
application's configuration by default, all of the predefined interceptors and
stacks are available "out of the box".</p><h2
id="Interceptors-FrameworkInterceptors">Framework
Interceptors</h2><p>Interceptor classes are also defined using a key-value pair
specified in the Struts configuration file. The names specified below come
specified in <a shape="rect"
href="struts-defaultxml.html">struts-default.xml</a>. If you extend the
<code>struts-default</code> package, then you can use the names below.
Otherwise, they must be defined in your package with a name-class pair
specified in the <interceptors> tag.</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Interceptor</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" ro
wspan="1" class="confluenceTd"><p><a shape="rect"
href="alias-interceptor.html">Alias Interceptor</a></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>alias</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Converts similar parameters that may be named
differently between requests.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="chaining-interceptor.html">Chaining Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>chain</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Makes the previous Action's properties
available to the current Action. Commonly used together with <result
type="chain"> (in the previous Action).</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a shape="rect"
href="checkbox-interceptor.html">Checkbox Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>checkbox</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><
p>Adds automatic checkbox handling code that detect an unchecked checkbox and
add it as a parameter with a default (usually 'false') value. Uses a specially
named hidden field to detect unsubmitted checkboxes. The default unchecked
value is overridable for non-boolean value'd checkboxes.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect"
href="cookie-interceptor.html">Cookie Interceptor</a></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>cookie</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Inject cookie with a certain configurable name / value
into action. (Since 2.0.7.)</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="cookieprovider-interceptor.html">CookieProvider
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>cookieProvider</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Transfer cookies from action to response (Since
2.3.15.)</p></td></tr
><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect"
>href="conversion-error-interceptor.html">Conversion Error
>Interceptor</a></p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p>conversionError</p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p>Adds conversion errors from the ActionContext to the
>Action's field errors</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p><a shape="rect"
>href="create-session-interceptor.html">Create Session
>Interceptor</a></p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p>createSession</p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p>Create an HttpSession automatically, useful with
>certain Interceptors that require a HttpSession to work properly (like the
>TokenInterceptor)</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p><a shape="rect"
>href="debugginginterceptor.html">DebuggingInterceptor</a></p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>debug
ging</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Provides
several different debugging screens to provide insight into the data behind the
page.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect"
href="deprecationinterceptor.html">DeprecationInterceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>deprecation</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>When devMode is on, logs all
unknown or deprecated settings</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="execute-and-wait-interceptor.html">Execute and Wait
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>execAndWait</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Executes the Action in the background and then sends
the user off to an intermediate waiting page.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a shape="rect" href="exception-interce
ptor.html">Exception Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Maps exceptions to a result.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect"
href="file-upload-interceptor.html">File Upload Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>fileUpload</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>An Interceptor that adds easy
access to file upload support.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="i18n-interceptor.html">I18n
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>i18n</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Remembers the locale selected for a user's
session.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="logger-interceptor.html">Logger
Interceptor</a></p></td><
td colspan="1" rowspan="1" class="confluenceTd"><p>logger</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Outputs the name of the
Action.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="message-store-interceptor.html">Message Store
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>store</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Store and retrieve action messages / errors / field
errors for action that implements ValidationAware interface into
session.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="model-driven-interceptor.html">Model Driven Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>modelDriven</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the Action implements
ModelDriven, pushes the <code>getModel</code> Result onto the Value
Stack.</p></td></tr><tr><td colspan="1" rowspan="1" class="conflue
nceTd"><p><a shape="rect" href="scoped-model-driven-interceptor.html">Scoped
Model Driven Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>scopedModelDriven</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>If the Action implements ScopedModelDriven, the
interceptor retrieves and stores the model from a scope and sets it on the
action calling <code>setModel</code>.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a shape="rect"
href="parameters-interceptor.html">Parameters Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>params</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Sets the request parameters onto the
Action.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="prepare-interceptor.html">Prepare
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>prepare</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>If t
he Action implements Preparable, calls its <code>prepare</code>
method.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="scope-interceptor.html">Scope Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>scope</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Simple mechanism for storing Action state
in the session or application scope.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a shape="rect"
href="servlet-config-interceptor.html">Servlet Config
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>servletConfig</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Provide access to Maps representing HttpServletRequest
and HttpServletResponse.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="static-parameters-interceptor.html">Static Parameters
Interceptor</a></p></td><td colspan="1" rowspan="1" class="confluence
Td"><p>staticParams</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Sets the <code>struts.xml</code> defined parameters
onto the action. These are the <param> tags that are direct children of
the <action> tag.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="roles-interceptor.html">Roles
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>roles</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Action will only be executed if the user has the
correct JAAS role.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="timer-interceptor.html">Timer
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>timer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Outputs how long the Action takes to execute (including
nested Interceptors and View)</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect
" href="token-interceptor.html">Token Interceptor</a></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>token</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Checks for valid token presence in Action, prevents
duplicate form submission.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="token-session-interceptor.html">Token Session Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>tokenSession</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Same as Token Interceptor, but
stores the submitted data in session when handed an invalid
token</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="validation-interceptor.html">Validation
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>validation</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Performs validation using the validators defined in
<em>action</em>-validatio
n.xml</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="default-workflow-interceptor.html">Default Workflow
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>workflow</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Calls the <code>validate</code> method in your Action
class. If Action errors are created then it returns the <code>INPUT</code>
view.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="parameter-filter-interceptor.html">Parameter Filter
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>N/A</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Removes parameters from the list of those available to
Actions</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="profiling-interceptor.html">Profiling
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>profiling</p></td
><td colspan="1" rowspan="1" class="confluenceTd"><p>Activate profiling
>through parameter</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p><a shape="rect"
>href="multiselect-interceptor.html">Multiselect Interceptor</a></p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>multiselect</p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>Like the checkbox interceptor
>detects that no value was selected for a field with multiple values (like a
>select) and adds an empty parameter</p></td></tr></tbody></table></div><div
>class="confluence-information-macro
>confluence-information-macro-warning"><span class="aui-icon aui-icon-small
>aui-iconfont-error confluence-information-macro-icon"></span><div
>class="confluence-information-macro-body"><p>Since 2.0.7, Interceptors and
>Results with hyphenated names were converted to camelCase. (The former
>model-driven is now modelDriven.) The original hyphenated names are retained
>as "aliases" until Struts 2.1.0. For clarity
, the hyphenated versions are not listed here, but might be referenced in
prior versions of the documentation.</p></div></div><h3
id="Interceptors-MethodFiltering">Method Filtering</h3>
-<p></p><p>
+</div></div>Since the <code>struts-default.xml</code> is included in the
application's configuration by default, all of the predefined interceptors and
stacks are available "out of the box".<h2
id="Interceptors-FrameworkInterceptors">Framework
Interceptors</h2><p>Interceptor classes are also defined using a key-value pair
specified in the Struts configuration file. The names specified below come
specified in <a shape="rect"
href="struts-defaultxml.html">struts-default.xml</a>. If you extend the
<code>struts-default</code> package, then you can use the names below.
Otherwise, they must be defined in your package with a name-class pair
specified in the <interceptors> tag.</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Interceptor</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="
1" class="confluenceTd"><p><a shape="rect" href="alias-interceptor.html">Alias
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>alias</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Converts similar parameters that may be named
differently between requests.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="chaining-interceptor.html">Chaining Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>chain</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Makes the previous Action's properties
available to the current Action. Commonly used together with <result
type="chain"> (in the previous Action).</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a shape="rect"
href="checkbox-interceptor.html">Checkbox Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>checkbox</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Adds
automatic checkbox handling code that detect an unchecked checkbox and add it
as a parameter with a default (usually 'false') value. Uses a specially named
hidden field to detect unsubmitted checkboxes. The default unchecked value is
overridable for non-boolean value'd checkboxes.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect"
href="cookie-interceptor.html">Cookie Interceptor</a></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>cookie</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Inject cookie with a certain configurable name / value
into action. (Since 2.0.7.)</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="cookieprovider-interceptor.html">CookieProvider
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>cookieProvider</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Transfer cookies from action to response (Since
2.3.15.)</p></td></tr><tr><t
d colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect"
href="conversion-error-interceptor.html">Conversion Error
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>conversionError</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Adds conversion errors from the ActionContext to the
Action's field errors</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="create-session-interceptor.html">Create Session
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>createSession</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Create an HttpSession automatically, useful with
certain Interceptors that require a HttpSession to work properly (like the
TokenInterceptor)</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="debugginginterceptor.html">DebuggingInterceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>debugging</p
></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Provides several
>different debugging screens to provide insight into the data behind the
>page.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
>shape="rect" href="execute-and-wait-interceptor.html">Execute and Wait
>Interceptor</a></p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p>execAndWait</p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p>Executes the Action in the background and then sends
>the user off to an intermediate waiting page.</p></td></tr><tr><td
>colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect"
>href="exception-interceptor.html">Exception Interceptor</a></p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>exception</p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>Maps exceptions to a
>result.</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p><a shape="rect"
>href="file-upload-interceptor.html">File Upload Interceptor</a></
p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>fileUpload</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>An Interceptor that adds easy access to file upload
support.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="i18n-interceptor.html">I18n
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>i18n</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Remembers the locale selected for a user's
session.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="logger-interceptor.html">Logger
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>logger</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Outputs the name of the Action.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect"
href="message-store-interceptor.html">Message Store Interceptor</a></p></td><td
colspan="1" rowspan="1" class="
confluenceTd"><p>store</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Store and retrieve action messages / errors / field
errors for action that implements ValidationAware interface into
session.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="model-driven-interceptor.html">Model Driven Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>modelDriven</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the Action implements
ModelDriven, pushes the <code>getModel</code> Result onto the Value
Stack.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="scoped-model-driven-interceptor.html">Scoped Model Driven
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>scopedModelDriven</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>If the Action implements ScopedModelDriven, the
interceptor retrieves and stores the model from a scop
e and sets it on the action calling
<code>setModel</code>.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="parameters-interceptor.html">Parameters Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>params</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Sets the request parameters onto the
Action.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="prepare-interceptor.html">Prepare
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>prepare</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>If the Action implements Preparable, calls its
<code>prepare</code> method.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="scope-interceptor.html">Scope
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>scope</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Simple mech
anism for storing Action state in the session or application
scope.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="servlet-config-interceptor.html">Servlet Config
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>servletConfig</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Provide access to Maps representing HttpServletRequest
and HttpServletResponse.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="static-parameters-interceptor.html">Static Parameters
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>staticParams</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Sets the <code>struts.xml</code> defined parameters
onto the action. These are the <param> tags that are direct children of
the <action> tag.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="roles-interceptor.htm
l">Roles Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>roles</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Action will only be executed if the user has the
correct JAAS role.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="timer-interceptor.html">Timer
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>timer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Outputs how long the Action takes to execute (including
nested Interceptors and View)</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" href="token-interceptor.html">Token
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>token</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Checks for valid token presence in Action, prevents
duplicate form submission.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect" hr
ef="token-session-interceptor.html">Token Session Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>tokenSession</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Same as Token Interceptor, but
stores the submitted data in session when handed an invalid
token</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="validation-interceptor.html">Validation
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>validation</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Performs validation using the validators defined in
<em>action</em>-validation.xml</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="default-workflow-interceptor.html">Default Workflow
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>workflow</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Calls the <code>validate</code> method in your Actio
n class. If Action errors are created then it returns the <code>INPUT</code>
view.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="parameter-filter-interceptor.html">Parameter Filter
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>N/A</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Removes parameters from the list of those available to
Actions</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
shape="rect" href="profiling-interceptor.html">Profiling
Interceptor</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>profiling</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Activate profiling through
parameter</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a shape="rect"
href="multiselect-interceptor.html">Multiselect Interceptor</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>multiselect</p></td><td
colspan="1" rowspan="1"
class="confluenceTd"><p>Like the checkbox interceptor detects that no value
was selected for a field with multiple values (like a select) and adds an empty
parameter</p></td></tr></tbody></table></div><div
class="confluence-information-macro confluence-information-macro-warning"><span
class="aui-icon aui-icon-small aui-iconfont-error
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Since 2.0.7, Interceptors and
Results with hyphenated names were converted to camelCase. (The former
model-driven is now modelDriven.) The original hyphenated names are retained as
"aliases" until Struts 2.1.0. For clarity, the hyphenated versions are not
listed here, but might be referenced in prior versions of the
documentation.</p></div></div><h3 id="Interceptors-MethodFiltering">Method
Filtering</h3><p>
+</p><p></p><p>
MethodFilterInterceptor is an abstract <code>Interceptor</code> used as
a base class for interceptors that will filter execution based on method
names according to specified included/excluded method lists.</p>
@@ -683,9 +683,6 @@ thisWillRunFirstInterceptor
<span class="smalltext">(Apache Struts 2
Documentation)</span>
<br>
$page.link($child)
- <span class="smalltext">(Apache Struts 2
Documentation)</span>
- <br>
- $page.link($child)
<span class="smalltext">(Apache Struts 2
Documentation)</span>
<br>
$page.link($child)
Modified: websites/production/struts/content/docs/migration-guide.html
==============================================================================
--- websites/production/struts/content/docs/migration-guide.html (original)
+++ websites/production/struts/content/docs/migration-guide.html Fri Sep 2
05:58:25 2016
@@ -125,7 +125,7 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
- <div id="ConfluenceContent"><p>Getting here from there.</p><h3
id="MigrationGuide-VersionNotes2.5.x">Version Notes 2.5.x</h3><ul><li><a
shape="rect" href="version-notes-252.html">Version Notes 2.5.2</a></li><li><a
shape="rect" href="version-notes-251.html">Version Notes 2.5.1</a></li><li><a
shape="rect" href="version-notes-25.html">Version Notes 2.5</a></li></ul><h3
id="MigrationGuide-VersionNotes2.3.x">Version Notes 2.3.x</h3><ul><li><a
shape="rect" href="version-notes-2330.html">Version Notes 2.3.30</a></li><li><a
shape="rect" href="version-notes-2329.html">Version Notes 2.3.29</a></li><li><a
shape="rect" href="version-notes-23281.html">Version Notes
2.3.28.1</a></li><li><a shape="rect" href="version-notes-2328.html">Version
Notes 2.3.28</a></li><li><a shape="rect"
href="version-notes-23243.html">Version Notes 2.3.24.3</a></li><li><a
shape="rect" href="version-notes-23241.html">Version Notes
2.3.24.1</a></li><li><a shape="rect" href="version-notes-2324.html">Version No
tes 2.3.24</a></li><li><a shape="rect" href="version-notes-23203.html">Version
Notes 2.3.20.3</a></li><li><a shape="rect"
href="version-notes-23201.html">Version Notes 2.3.20.1</a></li><li><a
shape="rect" href="version-notes-2320.html">Version Notes 2.3.20</a></li><li><a
shape="rect" href="version-notes-23163.html">Version Notes
2.3.16.3</a></li><li><a shape="rect" href="version-notes-23162.html">Version
Notes 2.3.16.2</a></li><li><a shape="rect"
href="version-notes-2316.html">Version Notes 2.3.16.1</a></li><li><a
shape="rect" href="version-notes-2316.html">Version Notes 2.3.16</a></li><li><a
shape="rect" href="version-notes-23153.html">Version Notes
2.3.15.3</a></li><li><a shape="rect" href="version-notes-23152.html">Version
Notes 2.3.15.2</a></li><li><a shape="rect"
href="version-notes-23151.html">Version Notes 2.3.15.1</a></li><li><a
shape="rect" href="version-notes-2315.html">Version Notes 2.3.15</a></li><li><a
shape="rect" href="version-notes-23143.html">Version Notes 2.3.14.3<
/a></li><li><a shape="rect" href="version-notes-23142.html">Version Notes
2.3.14.2</a></li><li><a shape="rect" href="version-notes-23141.html">Version
Notes 2.3.14.1</a></li><li><a shape="rect"
href="version-notes-2314.html">Version Notes 2.3.14</a></li><li><a shape="rect"
href="version-notes-23120.html">Version Notes 2.3.12.0</a></li><li><a
shape="rect" href="version-notes-238.html">Version Notes 2.3.8</a></li><li><a
shape="rect" href="version-notes-237.html">Version Notes 2.3.7</a></li><li><a
shape="rect" href="version-notes-2341.html">Version Notes
2.3.4.1</a></li><li><a shape="rect" href="version-notes-234.html">Version Notes
2.3.4</a></li><li><a shape="rect" href="version-notes-233.html">Version Notes
2.3.3</a></li><li><a shape="rect" href="version-notes-2312.html">Version Notes
2.3.1.2</a></li><li><a shape="rect" href="version-notes-2311.html">Version
Notes 2.3.1.1</a></li><li><a shape="rect" href="version-notes-231.html">Version
Notes 2.3.1</a></li></ul><h3 id="MigrationGuide
-VersionNotes2.2.x">Version Notes 2.2.x</h3><ul><li><a shape="rect"
href="version-notes-2231.html">Version Notes 2.2.3.1</a></li><li><a
shape="rect" href="version-notes-223.html">Version Notes 2.2.3</a></li><li><a
shape="rect" href="version-notes-2211.html">Version Notes
2.2.1.1</a></li><li><a shape="rect" href="version-notes-221.html">Version Notes
2.2.1</a></li></ul><h3 id="MigrationGuide-VersionNotes2.1.x">Version Notes
2.1.x</h3><ul><li><a shape="rect" href="version-notes-2181.html">Version Notes
2.1.8.1</a></li><li><a shape="rect" href="version-notes-218.html">Version Notes
2.1.8</a></li><li><a shape="rect" href="version-notes-216.html">Version Notes
2.1.6</a></li><li><a shape="rect" href="version-notes-215.html">Version Notes
2.1.5</a></li><li><a shape="rect" href="version-notes-214.html">Version Notes
2.1.4</a></li><li><a shape="rect" href="version-notes-213.html">Version Notes
2.1.3</a></li><li><a shape="rect" href="version-notes-212.html">Version Notes
2.1.2</a></li><li><a
shape="rect" href="version-notes-211.html">Version Notes 2.1.1</a></li><li><a
shape="rect" href="version-notes-210.html">Version Notes 2.1.0</a></li></ul><h3
id="MigrationGuide-ReleaseNotes2.0.x">Release Notes 2.0.x</h3><ul><li><a
shape="rect" href="release-notes-2014.html">Release Notes 2.0.14</a></li><li><a
shape="rect" href="release-notes-2013.html">Release Notes 2.0.13</a></li><li><a
shape="rect" href="release-notes-2012.html">Release Notes 2.0.12</a></li><li><a
shape="rect" href="release-notes-20112.html">Release Notes
2.0.11.2</a></li><li><a shape="rect" href="release-notes-20111.html">Release
Notes 2.0.11.1</a></li><li><a shape="rect"
href="release-notes-2011.html">Release Notes 2.0.11</a></li><li><a shape="rect"
href="release-notes-2010.html">Release Notes 2.0.10</a></li><li><a shape="rect"
href="release-notes-209.html">Release Notes 2.0.9</a></li><li><a shape="rect"
href="release-notes-208.html">Release Notes 2.0.8</a></li><li><a shape="rect"
href="release-notes-207.html">R
elease Notes 2.0.7</a></li><li><a shape="rect"
href="release-notes-206.html">Release Notes 2.0.6</a></li><li><a shape="rect"
href="release-notes-205.html">Release Notes 2.0.5</a></li><li><a shape="rect"
href="release-notes-204.html">Release Notes 2.0.4</a></li><li><a shape="rect"
href="release-notes-203.html">Release Notes 2.0.3</a></li><li><a shape="rect"
href="release-notes-202.html">Release Notes 2.0.2</a></li><li><a shape="rect"
href="release-notes-201.html">Release Notes 2.0.1</a></li><li><a shape="rect"
href="release-notes-200.html">Release Notes 2.0.0</a></li></ul><h3
id="MigrationGuide-Struts1toStruts2">Struts 1 to Struts 2</h3><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p><a shape="rect"
href="comparing-struts-1-and-2.html">Comparing Struts 1 and 2</a></p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p>How are Struts 1 and Struts 2
alike? How are they different?</p></td></tr><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p><a shape="rect"
href="struts-1-solutions.html">Struts 1 Solutions</a></p></th><td colspan="1"
rowspan="1" class="confluenceTd"><p>Various issues (and hopefully their
solutions!) encountered during migrations to Struts 2.</p></td></tr><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect"
href="migration-strategies.html">Migration Strategies</a></p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p>Steps and overall strategies
for migrating Struts 1 applications to Struts 2.</p></td></tr><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect"
href="migration-tools.html">Migration Tools</a></p></th><td colspan="1"
rowspan="1" class="confluenceTd"><p>Development tools to help aid the migration
process.</p></td></tr></tbody></table></div><h4
id="MigrationGuide-Tutorials">Tutorials</h4><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="r
ect" class="external-link" href="http://www.infoq.com/news/migrating-struts2"
rel="nofollow">Migrating Applications to Struts 2 </a></p></th><td colspan="1"
rowspan="1" class="confluenceTd"><p>A three-part series by Ian Roughley (Sep
2006)</p></td></tr></tbody></table></div><h4
id="MigrationGuide-Roadmap">Roadmap</h4><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect" class="external-link"
href="http://struts.apache.org/roadmap.html#new">Roadmap FAQ</a></p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p>What's in store for Struts
2?</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a
shape="rect" class="external-link"
href="http://www.oreillynet.com/onjava/blog/2006/10/my_history_of_struts_2.html"
rel="nofollow">A History of Struts 2</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Don Brown's summary of
events</p></td></tr></tbody></table></div><h3 id="Migra
tionGuide-Webwork2.2toStruts2">Webwork 2.2 to Struts 2</h3><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p><a shape="rect"
href="key-changes-from-webwork-2.html">Key Changes From WebWork
2</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>What has been
removed or changed from WebWork 2.2 to Struts 2</p></td></tr><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect"
href="webwork-2-migration-strategies.html">WebWork 2 Migration
Strategies</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Steps and overall strategies for migrating WebWork 2
applications to Struts 2.</p></td></tr></tbody></table></div><h2
id="MigrationGuide-FAQs">FAQs</h2><ul><li><a shape="rect"
href="where-do-we-get-the-latest-version-the-framework.html">Where do we get
the latest version the framework</a>?</li><li><a shape="rect"
href="what-are-some-of-the-frameworks-best-features.html">What are some of
the framework's best features</a>?</li><li><a shape="rect"
href="what-is-the-actioncontext.html">What is the
ActionContext?</a></li></ul><h2 id="MigrationGuide-Next:">Next: <a shape="rect"
href="contributors-guide.html">Contributors Guide</a></h2></div>
+ <div id="ConfluenceContent"><p>Getting here from there.</p><h3
id="MigrationGuide-VersionNotes2.5.x">Version Notes 2.5.x</h3><ul><li><a
shape="rect" href="version-notes-252.html">Version Notes 2.5.2</a></li><li><a
shape="rect" href="version-notes-251.html">Version Notes 2.5.1</a></li><li><a
shape="rect" href="version-notes-25.html">Version Notes 2.5</a></li></ul><h3
id="MigrationGuide-VersionNotes2.3.x">Version Notes 2.3.x</h3><ul><li><a
shape="rect" href="version-notes-2330.html">Version Notes 2.3.30</a></li><li><a
shape="rect" href="version-notes-2329.html">Version Notes 2.3.29</a></li><li><a
shape="rect" href="version-notes-23281.html">Version Notes
2.3.28.1</a></li><li><a shape="rect" href="version-notes-2328.html">Version
Notes 2.3.28</a></li><li><a shape="rect"
href="version-notes-23243.html">Version Notes 2.3.24.3</a></li><li><a
shape="rect" href="version-notes-23241.html">Version Notes
2.3.24.1</a></li><li><a shape="rect" href="version-notes-2324.html">Version No
tes 2.3.24</a></li><li><a shape="rect" href="version-notes-23203.html">Version
Notes 2.3.20.3</a></li><li><a shape="rect"
href="version-notes-23201.html">Version Notes 2.3.20.1</a></li><li><a
shape="rect" href="version-notes-2320.html">Version Notes 2.3.20</a></li><li><a
shape="rect" href="version-notes-23163.html">Version Notes
2.3.16.3</a></li><li><a shape="rect" href="version-notes-23162.html">Version
Notes 2.3.16.2</a></li><li><a shape="rect"
href="version-notes-2316.html">Version Notes 2.3.16.1</a></li><li><a
shape="rect" href="version-notes-2316.html">Version Notes 2.3.16</a></li><li><a
shape="rect" href="version-notes-23153.html">Version Notes
2.3.15.3</a></li><li><a shape="rect" href="version-notes-23152.html">Version
Notes 2.3.15.2</a></li><li><a shape="rect"
href="version-notes-23151.html">Version Notes 2.3.15.1</a></li><li><a
shape="rect" href="version-notes-2315.html">Version Notes 2.3.15</a></li><li><a
shape="rect" href="version-notes-23143.html">Version Notes 2.3.14.3<
/a></li><li><a shape="rect" href="version-notes-23142.html">Version Notes
2.3.14.2</a></li><li><a shape="rect" href="version-notes-23141.html">Version
Notes 2.3.14.1</a></li><li><a shape="rect"
href="version-notes-2314.html">Version Notes 2.3.14</a></li><li><a shape="rect"
href="version-notes-23120.html">Version Notes 2.3.12.0</a></li><li><a
shape="rect" href="version-notes-238.html">Version Notes 2.3.8</a></li><li><a
shape="rect" href="version-notes-237.html">Version Notes 2.3.7</a></li><li><a
shape="rect" href="version-notes-2341.html">Version Notes
2.3.4.1</a></li><li><a shape="rect" href="version-notes-234.html">Version Notes
2.3.4</a></li><li><a shape="rect" href="version-notes-233.html">Version Notes
2.3.3</a></li><li><a shape="rect" href="version-notes-2312.html">Version Notes
2.3.1.2</a></li><li><a shape="rect" href="version-notes-2311.html">Version
Notes 2.3.1.1</a></li><li><a shape="rect" href="version-notes-231.html">Version
Notes 2.3.1</a></li></ul><h3 id="MigrationGuide
-VersionNotes2.2.x">Version Notes 2.2.x</h3><ul><li><a shape="rect"
href="version-notes-2231.html">Version Notes 2.2.3.1</a></li><li><a
shape="rect" href="version-notes-223.html">Version Notes 2.2.3</a></li><li><a
shape="rect" href="version-notes-2211.html">Version Notes
2.2.1.1</a></li><li><a shape="rect" href="version-notes-221.html">Version Notes
2.2.1</a></li></ul><h3 id="MigrationGuide-VersionNotes2.1.x">Version Notes
2.1.x</h3><ul><li><a shape="rect" href="version-notes-2181.html">Version Notes
2.1.8.1</a></li><li><a shape="rect" href="version-notes-218.html">Version Notes
2.1.8</a></li><li><a shape="rect" href="version-notes-216.html">Version Notes
2.1.6</a></li><li><a shape="rect" href="version-notes-215.html">Version Notes
2.1.5</a></li><li><a shape="rect" href="version-notes-214.html">Version Notes
2.1.4</a></li><li><a shape="rect" href="version-notes-213.html">Version Notes
2.1.3</a></li><li><a shape="rect" href="version-notes-212.html">Version Notes
2.1.2</a></li><li><a
shape="rect" href="version-notes-211.html">Version Notes 2.1.1</a></li><li><a
shape="rect" href="version-notes-210.html">Version Notes 2.1.0</a></li></ul><h3
id="MigrationGuide-ReleaseNotes2.0.x">Release Notes 2.0.x</h3><ul><li><a
shape="rect" href="release-notes-2014.html">Release Notes 2.0.14</a></li><li><a
shape="rect" href="release-notes-2013.html">Release Notes 2.0.13</a></li><li><a
shape="rect" href="release-notes-2012.html">Release Notes 2.0.12</a></li><li><a
shape="rect" href="release-notes-20112.html">Release Notes
2.0.11.2</a></li><li><a shape="rect" href="release-notes-20111.html">Release
Notes 2.0.11.1</a></li><li><a shape="rect"
href="release-notes-2011.html">Release Notes 2.0.11</a></li><li><a shape="rect"
href="release-notes-2010.html">Release Notes 2.0.10</a></li><li><a shape="rect"
href="release-notes-209.html">Release Notes 2.0.9</a></li><li><a shape="rect"
href="release-notes-208.html">Release Notes 2.0.8</a></li><li><a shape="rect"
href="release-notes-207.html">R
elease Notes 2.0.7</a></li><li><a shape="rect"
href="release-notes-206.html">Release Notes 2.0.6</a></li><li><a shape="rect"
href="release-notes-205.html">Release Notes 2.0.5</a></li><li><a shape="rect"
href="release-notes-204.html">Release Notes 2.0.4</a></li><li><a shape="rect"
href="release-notes-203.html">Release Notes 2.0.3</a></li><li><a shape="rect"
href="release-notes-202.html">Release Notes 2.0.2</a></li><li><a shape="rect"
href="release-notes-201.html">Release Notes 2.0.1</a></li><li><a shape="rect"
href="release-notes-200.html">Release Notes 2.0.0</a></li></ul><h3
id="MigrationGuide-Struts2.3toStruts2.5">Struts 2.3 to Struts 2.5</h3><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p><a shape="rect"
href="struts-23-to-25-migration.html">Struts 2.3 to 2.5
migration</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd">Migration guide.</td></tr></tbody></table></div><h3
id="MigrationGuide-Struts1toStru
ts2">Struts 1 to Struts 2</h3><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect"
href="comparing-struts-1-and-2.html">Comparing Struts 1 and 2</a></p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p>How are Struts 1 and Struts 2
alike? How are they different?</p></td></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect" href="struts-1-solutions.html">Struts 1
Solutions</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Various issues (and hopefully their solutions!)
encountered during migrations to Struts 2.</p></td></tr><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p><a shape="rect"
href="migration-strategies.html">Migration Strategies</a></p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p>Steps and overall strategies
for migrating Struts 1 applications to Struts 2.</p></td></tr><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p><a sha
pe="rect" href="migration-tools.html">Migration Tools</a></p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p>Development tools to help aid
the migration process.</p></td></tr></tbody></table></div><h4
id="MigrationGuide-Tutorials">Tutorials</h4><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect" class="external-link"
href="http://www.infoq.com/news/migrating-struts2" rel="nofollow">Migrating
Applications to Struts 2 </a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>A three-part series by Ian Roughley (Sep
2006)</p></td></tr></tbody></table></div><h4
id="MigrationGuide-Roadmap">Roadmap</h4><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect" class="external-link"
href="http://struts.apache.org/roadmap.html#new">Roadmap FAQ</a></p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p>What's in stor
e for Struts 2?</p></td></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect" class="external-link"
href="http://www.oreillynet.com/onjava/blog/2006/10/my_history_of_struts_2.html"
rel="nofollow">A History of Struts 2</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Don Brown's summary of
events</p></td></tr></tbody></table></div><h3
id="MigrationGuide-Webwork2.2toStruts2">Webwork 2.2 to Struts 2</h3><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p><a shape="rect"
href="key-changes-from-webwork-2.html">Key Changes From WebWork
2</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>What has been
removed or changed from WebWork 2.2 to Struts 2</p></td></tr><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect"
href="webwork-2-migration-strategies.html">WebWork 2 Migration
Strategies</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Steps
and overall strategies for migrating WebWork 2 applications to Struts
2.</p></td></tr></tbody></table></div><h2
id="MigrationGuide-FAQs">FAQs</h2><ul><li><a shape="rect"
href="where-do-we-get-the-latest-version-the-framework.html">Where do we get
the latest version the framework</a>?</li><li><a shape="rect"
href="what-are-some-of-the-frameworks-best-features.html">What are some of the
framework's best features</a>?</li><li><a shape="rect"
href="what-is-the-actioncontext.html">What is the
ActionContext?</a></li></ul><h2 id="MigrationGuide-Next:">Next: <a shape="rect"
href="contributors-guide.html">Contributors Guide</a></h2></div>
</div>
<div class="tabletitle">
@@ -140,6 +140,9 @@ under the License.
<span class="smalltext">(Apache Struts 2
Documentation)</span>
<br>
$page.link($child)
+ <span class="smalltext">(Apache Struts 2
Documentation)</span>
+ <br>
+ $page.link($child)
<span class="smalltext">(Apache Struts 2
Documentation)</span>
<br>
$page.link($child)