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:
   &lt;result type="redirectAction"&gt;Menu&lt;/result&gt;
   &lt;result name="input"&gt;/Logon.jsp&lt;/result&gt;
 &lt;/action&gt; </pre>
-</div></div><p>&#160;</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>
     &lt;s:submit/&gt;
 &lt;/s:form&gt;
 </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>&lt;action name="admin/home" 
class="tutorial.Admin"/&gt;</code>) you need to specifically allow slashes in 
your action names via a constant in the <code>struts.xml</code> file by 
specifying <code>&lt;constant name="struts.enable.SlashesInActionNames" 
value="true"/&gt;</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>&lt;action name="admin/home" 
class="tutorial.Admin"/&gt;</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>&lt;constant name="struts.enable.SlashesInActionNames" 
value="true"/&gt;</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:&#160;<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&#160;<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;">&lt;struts&gt;
+  &lt;constant name="struts.allowed.action.names" value="[a-z{}]"*/&gt;
+  ...
+&lt;/struts&gt;</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&amp;ActionProxyFactory">Next: Action Proxy 
&amp; 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[
-&lt;s:form action=&quot;baz&quot;&gt;
-    &lt;s:textfield label=&quot;Enter your name&quot; 
name=&quot;person.name&quot;/&gt;
-    &lt;s:submit value=&quot;Create person&quot;/&gt;
-    &lt;s:submit method=&quot;anotherMethod&quot; value=&quot;Cancel&quot;/&gt;
+</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&#160;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&#160;ensure a valid 
request.&#160;Accordingly, most ActionMappers do not need to consult the Struts 
configuration&#160;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.&#160;However, because HTTP requests (when shown in HTTP 
responses) must be in String form,&#160;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>&#160;(where ext&#160;usually <strong>action</strong>) 
pattern. The extension is looked up from the Struts&#160;configuration key 
{&lt;b&gt;{struts.action.extension}}.</p><p>To help with dealing with buttons 
and other related requirements, this&#160;mapper (and other {{ActionMapper}}s, 
we hope) has the ability to name a&#160;button with some predefined prefix and 
have that button name alter the&#160;execution behaviour. The four prefixes 
are:</p><ul style="list-style-type: square;"><li>Method prefix 
-&#160;<code>method:default</code></li><li>Action prefix 
-&#160;<code>action:dashboard</code></li></ul><p>In addition to these four 
prefixes, this mapper also understands the&#160;action naming pattern of 
<code>foo!bar</code>&#160;in either the extension form 
(eg:&#160;<code>foo!bar.action</code>) or in the prefix form (eg: 
<code>action:foo!bar</code>). This syntax tells&#160;this mapper to map to the 
 action named <code>foo</code>&#160;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>&#160;method (by&#160;default if 
it isn't overridden in <code>struts.xml</code>&#160;to be something else), the 
baz&#160;action's <code>anotherMethod()</code>&#160;will be called. A very 
elegant way determine which&#160;button is clicked. Alternatively, one would 
have submit button set a&#160;particular value on the action when clicked, and 
the <code>execute()</code>&#160;method decides&#160;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;">&lt;!-- START SNIPPET: method-example --&gt;
+&lt;s:form action="baz"&gt;
+    &lt;s:textfield label="Enter your name" name="person.name"/&gt;
+    &lt;s:submit value="Create person"/&gt;
+    &lt;s:submit method="anotherMethod" value="Cancel"/&gt;
 &lt;/s:form&gt;
-]]></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[
-&lt;s:form action=&quot;baz&quot;&gt;
-    &lt;s:textfield label=&quot;Enter your name&quot; 
name=&quot;person.name&quot;/&gt;
-    &lt;s:submit value=&quot;Create person&quot;/&gt;
-    &lt;s:submit action=&quot;anotherAction&quot; value=&quot;Cancel&quot;/&gt;
+&lt;!-- END SNIPPET: method-example --&gt;</pre>
+</div></div><h3 id="ActionMapper-Actionprefix">Action prefix</h3><p>With 
action-prefix, instead of executing baz action's 
<code>execute()</code>&#160;method (by&#160;default if it isn't overridden in 
struts.xml to be something else), the&#160;anotherAction action's 
<code>execute()</code>&#160;method (assuming again if it isn't 
overridden&#160;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;">&lt;!-- START SNIPPET: action-example --&gt;
+&lt;s:form action="baz"&gt;
+    &lt;s:textfield label="Enter your name" name="person.name"/&gt;
+    &lt;s:submit value="Create person"/&gt;
+    &lt;s:submit action="anotherAction" value="Cancel"/&gt;
 &lt;/s:form&gt;
-]]></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">
+&lt;!-- END SNIPPET: action-example --&gt;</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.&#160;<code>[a-zA-Z0-9._!/\-]*</code>. You redefine this 
RegEx by defining a constant in&#160;<code>struts.xml</code> 
named&#160;<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&#160;<code>index</code>. You can also redefine this by specifying 
constant&#160;<code>struts.default.action.name</code> 
in&#160;<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&#160;<code>struts.allowed.method.names</code> 
in&#160;<code>struts.xml</code>. If method doesn't match the RegEx a default
  method is returned, i.e.&#160;<code>execute</code>. This can be changed by 
defining constant&#160;<code>struts.default.method.name</code> 
in&#160;<code>struts.xml</code>.</p><p>Please note that this funcionallity only 
works when&#160;<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;">&lt;bean 
type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="mymapper" 
class="com.mycompany.myapp.MyActionMapper" /&gt;
 &lt;constant name="struts.mapper.class" value="mymapper" /&gt;
 </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:
 &lt;/action&gt;
 &lt;/package&gt;
 </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[
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
 &lt;!--
@@ -563,8 +563,8 @@ div.rbtoc1464698104770 li {margin-left:
 
 &lt;/struts&gt;
 ]]></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 &lt;interceptors&gt; 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 &lt;result 
type="chain"&gt; (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 &lt;param&gt; tags that are direct children of 
the &lt;action&gt; 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 &lt;interceptors&gt; 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 &lt;result 
type="chain"&gt; (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 &lt;param&gt; tags that are direct children of 
the &lt;action&gt; 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)


Reply via email to