You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2015/08/25 09:18:22 UTC

svn commit: r963014 [6/7] - /websites/production/struts/content/docs/

Modified: websites/production/struts/content/docs/security.html
==============================================================================
--- websites/production/struts/content/docs/security.html (original)
+++ websites/production/struts/content/docs/security.html Tue Aug 25 07:18:20 2015
@@ -138,14 +138,14 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><h3 id="Security-/*&lt;![CDATA[*/div.rbtoc1438274444920{padding:0px;}div.rbtoc1438274444920ul{list-style:disc;margin-left:0px;}div.rbtoc1438274444920li{margin-left:0px;padding-left:0px;}/*]]&gt;*/#Security-Securitytips#Security-SecuritytipsRestrictaccesstotheConfigBrow"><style type="text/css">/*<![CDATA[*/
-div.rbtoc1438274444920 {padding: 0px;}
-div.rbtoc1438274444920 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1438274444920 li {margin-left: 0px;padding-left: 0px;}
+            <div id="ConfluenceContent"><h3 id="Security-/*&lt;![CDATA[*/div.rbtoc1440486694001{padding:0px;}div.rbtoc1440486694001ul{list-style:disc;margin-left:0px;}div.rbtoc1440486694001li{margin-left:0px;padding-left:0px;}/*]]&gt;*/#Security-Securitytips#Security-SecuritytipsRestrictaccesstotheConfigBrow"><style type="text/css">/*<![CDATA[*/
+div.rbtoc1440486694001 {padding: 0px;}
+div.rbtoc1440486694001 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1440486694001 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></h3><div class="toc-macro rbtoc1438274444920">
+/*]]>*/</style></h3><div class="toc-macro rbtoc1440486694001">
 <ul class="toc-indentation"><li><a shape="rect" href="#Security-"></a></li><li><a shape="rect" href="#Security-Securitytips">Security tips</a>
-<ul class="toc-indentation"><li><a shape="rect" href="#Security-RestrictaccesstotheConfigBrowser">Restrict access to the Config Browser</a></li><li><a shape="rect" href="#Security-Don'tmixdifferentaccesslevelsinthesamenamespace">Don't mix different access levels in the same namespace</a></li><li><a shape="rect" href="#Security-NeverexposeJSPfilesdirectly">Never expose JSP files directly</a></li></ul>
+<ul class="toc-indentation"><li><a shape="rect" href="#Security-RestrictaccesstotheConfigBrowser">Restrict access to the Config Browser</a></li><li><a shape="rect" href="#Security-Don'tmixdifferentaccesslevelsinthesamenamespace">Don't mix different access levels in the same namespace</a></li><li><a shape="rect" href="#Security-NeverexposeJSPfilesdirectly">Never expose JSP files directly</a></li><li><a shape="rect" href="#Security-DisabledevMode">Disable devMode</a></li></ul>
 </li><li><a shape="rect" href="#Security-Internalsecuritymechanism">Internal security mechanism</a>
 <ul class="toc-indentation"><li><a shape="rect" href="#Security-Accessingstaticmethods">Accessing static methods</a></li><li><a shape="rect" href="#Security-OGNLisusedtocallaction'smethods">OGNL is used to call action's methods</a></li><li><a shape="rect" href="#Security-Accepted/Excludedpatterns">Accepted / Excluded patterns</a></li></ul>
 </li></ul>
@@ -177,7 +177,7 @@ div.rbtoc1438274444920 li {margin-left:
     &lt;description&gt;Don't assign users to this role&lt;/description&gt;
     &lt;role-name&gt;no-users&lt;/role-name&gt;
 &lt;/security-role&gt;</pre>
-</div></div><p>The best approach is to used the both solutions.</p><h3 id="Security-Internalsecuritymechanism">Internal security mechanism</h3><p>The Apache Struts 2 contains internal security manager which blocks access to particular classes and Java packages - it's a OGNL-wide mechanism which means it affects any aspect of the framework ie. incoming parameters, expressions used in JSPs, etc.</p><p>The defaults are as follow:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>The best approach is to used the both solutions.</p><h4 id="Security-DisabledevMode">Disable devMode</h4><p>The&#160;<code style="line-height: 1.4285715;">devMode</code> is very useful option back can expose your application presenting too many informations of application's internals. Please always disable the&#160;<code>devMode</code> before deploying your application to a production environment.</p><h3 id="Security-Internalsecuritymechanism">Internal security mechanism</h3><p>The Apache Struts 2 contains internal security manager which blocks access to particular classes and Java packages - it's a OGNL-wide mechanism which means it affects any aspect of the framework ie. incoming parameters, expressions used in JSPs, etc.</p><p>The defaults are as follow:</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;constant name="struts.excludedClasses"
               value="
                 java.lang.Object,

Modified: websites/production/struts/content/docs/short-validator.html
==============================================================================
--- websites/production/struts/content/docs/short-validator.html (original)
+++ websites/production/struts/content/docs/short-validator.html Tue Aug 25 07:18:20 2015
@@ -139,16 +139,49 @@ under the License.
     <div class="pagecontent">
         <div class="wiki-content">
             <div id="ConfluenceContent"><h1 id="shortvalidator-Description">Description</h1>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p>Field Validator that checks if the short specified is within a certain range.</p>
 
 <h1 id="shortvalidator-Parameters">Parameters</h1>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p></p><ul><li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li><li>min - the minimum value (if none is specified, it will not be checked) </li><li>max - the maximum value (if none is specified, it will not be checked) </li><li>parse - if set to true, minExpression and maxExpression will be evaluated to find min/max</li><li>minExpression - expression to calculate the minimum value (if none is specified, it will not be checked) </li><li>maxExpression - expression to calculate the maximum value (if none is specified, it will not be checked) </li></ul>
+
+<p>You can either use the min / max value or minExpression / maxExpression (when parse is set to true) -
+using expression can be slightly slower, see the example below.</p>
 
 <div class="confluence-information-macro confluence-information-macro-warning"><p class="title">Warning</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div></div>
+<p>Do not use ${minExpression} and ${maxExpression} as an expression as this will turn into infinitive loop!</p></div></div>
 
 <h1 id="shortvalidator-Examples">Examples</h1>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div>
+<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;validators&gt;
+     &lt;!-- Plain Validator Syntax --&gt;
+     &lt;validator type=&quot;short&quot;&gt;
+         &lt;param name=&quot;fieldName&quot;&gt;age&lt;/param&gt;
+         &lt;param name=&quot;min&quot;&gt;20&lt;/param&gt;
+         &lt;param name=&quot;max&quot;&gt;50&lt;/param&gt;
+         &lt;message&gt;Age needs to be between ${min} and ${max}&lt;/message&gt;
+     &lt;/validator&gt;
+
+     &lt;!-- Field Validator Syntax --&gt;
+     &lt;field name=&quot;age&quot;&gt;
+         &lt;field-validator type=&quot;short&quot;&gt;
+             &lt;param name=&quot;min&quot;&gt;20&lt;/param&gt;
+             &lt;param name=&quot;max&quot;&gt;50&lt;/param&gt;
+             &lt;message&gt;Age needs to be between ${min} and ${max}&lt;/message&gt;
+         &lt;/field-validator&gt;
+     &lt;/field&gt;
+
+     &lt;!-- Field Validator Syntax with expression --&gt;
+     &lt;field name=&quot;age&quot;&gt;
+         &lt;field-validator type=&quot;short&quot;&gt;
+             &lt;param name=&quot;minExpression&quot;&gt;${minValue}&lt;/param&gt; &lt;!-- will be evaluated as: Short getMinValue() --&gt;
+             &lt;param name=&quot;maxExpression&quot;&gt;${maxValue}&lt;/param&gt; &lt;!-- will be evaluated as: Short getMaxValue() --&gt;
+             &lt;message&gt;Age needs to be between ${min} and ${max}&lt;/message&gt;
+         &lt;/field-validator&gt;
+     &lt;/field&gt;
+ &lt;/validators&gt;
+]]></script>
+</div></div></div>
         </div>
 
         

Modified: websites/production/struts/content/docs/static-parameters-interceptor.html
==============================================================================
--- websites/production/struts/content/docs/static-parameters-interceptor.html (original)
+++ websites/production/struts/content/docs/static-parameters-interceptor.html Tue Aug 25 07:18:20 2015
@@ -138,19 +138,39 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+            <div id="ConfluenceContent">
+<p>This interceptor populates the action with the static parameters defined in the action configuration. If the action
+implements Parameterizable, a map of the static parameters will be also be passed directly to the action.
+The static params will be added to the request params map, unless "merge" is set to false.</p>
+
+<p></p><p> Parameters are typically defined with &lt;param&gt; elements within xwork.xml.</p>
+
 
 <h2 id="StaticParametersInterceptor-Parameters">Parameters</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+
+<p></p><ul></ul><p></p><ul><li>None</li></ul><p></p>
+
 
 <h2 id="StaticParametersInterceptor-ExtendingtheInterceptor">Extending the Interceptor</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+
+<p></p><p>There are no extension points to this interceptor.</p>
+
 
 <h2 id="StaticParametersInterceptor-Examples">Examples</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div>
+<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;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
+    &lt;interceptor-ref name=&quot;staticParams&quot;&gt;
+         &lt;param name=&quot;parse&quot;&gt;true&lt;/param&gt;
+         &lt;param name=&quot;overwrite&quot;&gt;false&lt;/param&gt;
+    &lt;/interceptor-ref&gt;
+    &lt;result name=&quot;success&quot;&gt;good_result.ftl&lt;/result&gt;
+&lt;/action&gt;
+]]></script>
+</div></div></div>
         </div>
 
         

Modified: websites/production/struts/content/docs/stringlength-validator.html
==============================================================================
--- websites/production/struts/content/docs/stringlength-validator.html (original)
+++ websites/production/struts/content/docs/stringlength-validator.html Tue Aug 25 07:18:20 2015
@@ -139,16 +139,53 @@ under the License.
     <div class="pagecontent">
         <div class="wiki-content">
             <div id="ConfluenceContent"><h1 id="stringlengthvalidator-Description">Description</h1>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p>StringLengthFieldValidator checks that a String field is of a certain length.  If the "minLength"
+parameter is specified, it will make sure that the String has at least that many characters.  If
+the "maxLength" parameter is specified, it will make sure that the String has at most that many
+characters.  The "trim" parameter determines whether it will {@link String#trim() trim} the
+String before performing the length check.  If unspecified, the String will be trimmed.</p>
 
 <h1 id="stringlengthvalidator-Parameters">Parameters</h1>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p></p><ul><li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li><li>maxLength - Integer. The max length of the field value. Default ignore.</li><li>minLength - Integer. The min length of the field value. Default ignore.</li><li>trim - (Optional) Boolean, default true. Trim the field value before evaluating its min/max length. Default true.</li><li>maxLengthExpression - (Optional) String. Defines the max length param as an OGNL expression</li><li>minLengthExpression - (Optional) String. Defines the min length param as an OGNL expression</li><li>trimExpression - (Optional) String. Defines th trim param as an OGNL expression</li></ul>
 
 <div class="confluence-information-macro confluence-information-macro-warning"><p class="title">Warning</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div></div>
+<p>Do not use ${minLengthExpression}, ${maxLengthExpression} and ${trimExpression} as an expression as this will turn into infinitive loop!</p></div></div>
 
 <h1 id="stringlengthvalidator-Examples">Examples</h1>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div>
+<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;validators&gt;
+    &lt;!-- Plain Validator Syntax --&gt;
+    &lt;validator type=&quot;stringlength&quot;&gt;
+        &lt;param name=&quot;fieldName&quot;&gt;myPurchaseCode&lt;/param&gt;
+        &lt;param name=&quot;minLength&quot;&gt;10&lt;/param&gt;
+        &lt;param name=&quot;maxLength&quot;&gt;10&lt;/param&gt;
+        &lt;param name=&quot;trim&quot;&gt;true&lt;/param&gt;
+        &lt;message&gt;Your purchase code needs to be 10 characters long&lt;/message&gt;
+    &lt;/validator&gt;
+
+    &lt;!-- Field Validator Syntax --&gt;
+    &lt;field name=&quot;myPurchaseCode&quot;&gt;
+        &lt;field-validator type=&quot;stringlength&quot;&gt;
+             &lt;param name=&quot;minLength&quot;&gt;10&lt;/param&gt;
+             &lt;param name=&quot;maxLength&quot;&gt;10&lt;/param&gt;
+             &lt;param name=&quot;trim&quot;&gt;true&lt;/param&gt;
+             &lt;message&gt;Your purchase code needs to be 10 characters long&lt;/message&gt;
+        &lt;/field-validator&gt;
+    &lt;/field&gt;
+
+    &lt;!-- Field Validator Syntax with expression --&gt;
+    &lt;field name=&quot;myPurchaseCode&quot;&gt;
+        &lt;field-validator type=&quot;stringlength&quot;&gt;
+             &lt;param name=&quot;minLengthExpression&quot;&gt;${minLengthValue}&lt;/param&gt; &lt;!-- will be evaluated as: Integer getMinLengthValue() --&gt;
+             &lt;param name=&quot;maxLengthExpression&quot;&gt;${maxLengthValue}&lt;/param&gt; &lt;!-- will be evaluated as: Integer getMaxLengthValue() --&gt;
+             &lt;param name=&quot;trimExpression&quot;&gt;${trimValue}&lt;/param&gt; &lt;!-- will be evaluated as: boolean getTrimValue() --&gt;
+             &lt;message&gt;Your purchase code needs to be 10 characters long&lt;/message&gt;
+        &lt;/field-validator&gt;
+    &lt;/field&gt;
+&lt;/validators&gt;
+]]></script>
+</div></div></div>
         </div>
 
         

Modified: websites/production/struts/content/docs/stringlengthfieldvalidator-annotation.html
==============================================================================
--- websites/production/struts/content/docs/stringlengthfieldvalidator-annotation.html (original)
+++ websites/production/struts/content/docs/stringlengthfieldvalidator-annotation.html Tue Aug 25 07:18:20 2015
@@ -138,19 +138,27 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+            <div id="ConfluenceContent"><p>This validator checks that a String field is of the right length. It assumes that the field is a String.
+If neither minLength nor maxLength is set, nothing will be done.</p>
 
 <h2 id="StringLengthFieldValidatorAnnotation-Usage">Usage</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p></p><p>The annotation must be applied at method level.</p>
 
 <h2 id="StringLengthFieldValidatorAnnotation-Parameters">Parameters</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p><table class="confluenceTable" summary=""><tr><th colspan="1" rowspan="1" class="confluenceTh"> Parameter </th><th colspan="1" rowspan="1" class="confluenceTh"> Required </th><th colspan="1" rowspan="1" class="confluenceTh"> Default </th><th colspan="1" rowspan="1" class="confluenceTh"> Notes </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">message</td><td colspan="1" rowspan="1" class="confluenceTd">yes</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">field error message</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">key</td><td colspan="1" rowspan="1" class="confluenceTd">no</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">i18n key from language specific properties file.</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">messageParams</td><td colspan="1" rowspan="1" class="confluenceTd">no</td><td colspan="1" row
 span="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">Additional params to be used to customize message - will be evaluated against the Value Stack</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">fieldName</td><td colspan="1" rowspan="1" class="confluenceTd">no</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">shortCircuit</td><td colspan="1" rowspan="1" class="confluenceTd">no</td><td colspan="1" rowspan="1" class="confluenceTd">false</td><td colspan="1" rowspan="1" class="confluenceTd">If this validator should be used as shortCircuit.</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">type</td><td colspan="1" rowspan="1" class="confluenceTd">yes</td><td colspan="1" rowspan="1" class="confluenceTd">ValidatorType.FIELD</td><td colspan="1" rowspan="1" class="confluenceTd">Enum value from Valida
 torType. Either FIELD or SIMPLE can be used here.</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> trim </td><td colspan="1" rowspan="1" class="confluenceTd"> no </td><td colspan="1" rowspan="1" class="confluenceTd"> true </td><td colspan="1" rowspan="1" class="confluenceTd"> Boolean property.  Determines whether the String is trimmed before performing the length check.  </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> minLength </td><td colspan="1" rowspan="1" class="confluenceTd"> no </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"> Integer property.  The minimum length the String must be. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> minLengthExpression </td><td colspan="1" rowspan="1" class="confluenceTd"> no </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">OGNL expression used to obtain the minimum lengt
 h the String must be. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> maxLength </td><td colspan="1" rowspan="1" class="confluenceTd"> no </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"> Integer property.  The maximum length the String can be. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> maxLengthExpression </td><td colspan="1" rowspan="1" class="confluenceTd"> no </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">OGNL expression used to obtain the maximum length the String can be. </td></tr></table></p>
+
+<p></p><p>If neither <em>minLength</em> nor <em>maxLength</em> is set, nothing will be done.</p>
+
 
 <h2 id="StringLengthFieldValidatorAnnotation-Examples">Examples</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div>
+<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+@StringLengthFieldValidator(message = &quot;Default message&quot;, key = &quot;i18n.key&quot;, shortCircuit = true, trim = true, minLength = &quot;5&quot;,  maxLength = &quot;12&quot;)
+]]></script>
+</div></div></div>
         </div>
 
         

Modified: websites/production/struts/content/docs/struts-2-blank-archetype.html
==============================================================================
--- websites/production/struts/content/docs/struts-2-blank-archetype.html (original)
+++ websites/production/struts/content/docs/struts-2-blank-archetype.html Tue Aug 25 07:18:20 2015
@@ -149,11 +149,11 @@ under the License.
 <p><strong>Contents</strong></p>
 
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1438274335116 {padding: 0px;}
-div.rbtoc1438274335116 ul {list-style: none;margin-left: 0px;padding-left: 1em;}
-div.rbtoc1438274335116 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1440486562322 {padding: 0px;}
+div.rbtoc1440486562322 ul {list-style: none;margin-left: 0px;padding-left: 1em;}
+div.rbtoc1440486562322 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1438274335116">
+/*]]>*/</style><div class="toc-macro rbtoc1440486562322">
 <ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a shape="rect" href="#Struts2BlankArchetype-CreatingOurblank-archetypeProject">Creating Our blank-archetype Project</a>
 <ul class="toc-indentation"><li><span class="TOCOutline">1.1</span> <a shape="rect" href="#Struts2BlankArchetype-Stagingrepository">Staging repository</a></li></ul>
 </li><li><span class="TOCOutline">2</span> <a shape="rect" href="#Struts2BlankArchetype-ProjectStructure">Project Structure</a>

Modified: websites/production/struts/content/docs/struts-2-maven-archetypes.html
==============================================================================
--- websites/production/struts/content/docs/struts-2-maven-archetypes.html (original)
+++ websites/production/struts/content/docs/struts-2-maven-archetypes.html Tue Aug 25 07:18:20 2015
@@ -143,11 +143,11 @@ under the License.
 <p><strong>Contents</strong></p>
 
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1438274332141 {padding: 0px;}
-div.rbtoc1438274332141 ul {list-style: none;margin-left: 0px;padding-left: 1em;}
-div.rbtoc1438274332141 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1440486563546 {padding: 0px;}
+div.rbtoc1440486563546 ul {list-style: none;margin-left: 0px;padding-left: 1em;}
+div.rbtoc1440486563546 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1438274332141">
+/*]]>*/</style><div class="toc-macro rbtoc1440486563546">
 <ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a shape="rect" href="#Struts2MavenArchetypes-Quickstart">Quickstart</a></li><li><span class="TOCOutline">2</span> <a shape="rect" href="#Struts2MavenArchetypes-AvailableArchetypes">Available Archetypes</a>
 <ul class="toc-indentation"><li><span class="TOCOutline">2.1</span> <a shape="rect" href="#Struts2MavenArchetypes-TheBlankConventionArchetype(struts2-archetype-convention)">The Blank Convention Archetype (struts2-archetype-convention)</a></li><li><span class="TOCOutline">2.2</span> <a shape="rect" href="#Struts2MavenArchetypes-TheBlankArchetype(struts2-archetype-blank)">The Blank Archetype (struts2-archetype-blank)</a></li><li><span class="TOCOutline">2.3</span> <a shape="rect" href="#Struts2MavenArchetypes-TheStarterArchetype(struts2-archetype-starter)">The Starter Archetype (struts2-archetype-starter)</a></li><li><span class="TOCOutline">2.4</span> <a shape="rect" href="#Struts2MavenArchetypes-TheAngularJSArchetype(struts2-archetype-angularjs)">The AngularJS Archetype (struts2-archetype-angularjs)</a></li><li><span class="TOCOutline">2.5</span> <a shape="rect" href="#Struts2MavenArchetypes-ThePortletBlankArchetype(struts2-archetype-portlet)">The Portlet Blank Archetype (struts2-ar
 chetype-portlet)</a></li><li><span class="TOCOutline">2.6</span> <a shape="rect" href="#Struts2MavenArchetypes-ThePortletDatabaseArchetype(struts2-archetype-dbportlet)">The Portlet Database Archetype (struts2-archetype-dbportlet)</a></li><li><span class="TOCOutline">2.7</span> <a shape="rect" href="#Struts2MavenArchetypes-ThePluginArchetype(struts2-archetype-plugin)">The Plugin Archetype (struts2-archetype-plugin)</a></li></ul>
 </li><li><span class="TOCOutline">3</span> <a shape="rect" href="#Struts2MavenArchetypes-CreatinganApplicationUsingaMavenArchetype">Creating an Application Using a Maven Archetype</a>

Modified: websites/production/struts/content/docs/struts-2-spring-2-jpa-ajax.html
==============================================================================
--- websites/production/struts/content/docs/struts-2-spring-2-jpa-ajax.html (original)
+++ websites/production/struts/content/docs/struts-2-spring-2-jpa-ajax.html Tue Aug 25 07:18:20 2015
@@ -145,11 +145,11 @@ under the License.
 <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>Following this tutorial verbatim will require use of a Struts 2 deployment greater than 2.0.3</p></div></div>
 
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1438274224300 {padding: 0px;}
-div.rbtoc1438274224300 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1438274224300 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1440486429793 {padding: 0px;}
+div.rbtoc1440486429793 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1440486429793 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1438274224300">
+/*]]>*/</style><div class="toc-macro rbtoc1440486429793">
 <ul class="toc-indentation"><li><a shape="rect" href="#Struts2+Spring2+JPA+AJAX-Prerequisites">Prerequisites</a>
 <ul class="toc-indentation"><li><a shape="rect" href="#Struts2+Spring2+JPA+AJAX-Tomcat">Tomcat</a></li><li><a shape="rect" href="#Struts2+Spring2+JPA+AJAX-MySql">MySql</a></li></ul>
 </li><li><a shape="rect" href="#Struts2+Spring2+JPA+AJAX-Getthecode">Get the code</a>

Modified: websites/production/struts/content/docs/struts-next.html
==============================================================================
--- websites/production/struts/content/docs/struts-next.html (original)
+++ websites/production/struts/content/docs/struts-next.html Tue Aug 25 07:18:20 2015
@@ -125,12 +125,12 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><h3 id="StrutsNext-/*&lt;![CDATA[*/div.rbtoc1438274394124{padding:0px;}div.rbtoc1438274394124ul{list-style:disc;margin-left:0px;}div.rbtoc1438274394124li{margin-left:0px;padding-left:0px;}/*]]&gt;*/#StrutsNext-Whatshouldbeimproved/changed#StrutsNext-Whatshouldbeimprove"><style type="text/css">/*<![CDATA[*/
-div.rbtoc1438274394124 {padding: 0px;}
-div.rbtoc1438274394124 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1438274394124 li {margin-left: 0px;padding-left: 0px;}
+            <div id="ConfluenceContent"><h3 id="StrutsNext-/*&lt;![CDATA[*/div.rbtoc1440486666365{padding:0px;}div.rbtoc1440486666365ul{list-style:disc;margin-left:0px;}div.rbtoc1440486666365li{margin-left:0px;padding-left:0px;}/*]]&gt;*/#StrutsNext-Whatshouldbeimproved/changed#StrutsNext-Whatshouldbeimprove"><style type="text/css">/*<![CDATA[*/
+div.rbtoc1440486666365 {padding: 0px;}
+div.rbtoc1440486666365 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1440486666365 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></h3><div class="toc-macro rbtoc1438274394124">
+/*]]>*/</style></h3><div class="toc-macro rbtoc1440486666365">
 <ul class="toc-indentation"><li><a shape="rect" href="#StrutsNext-"></a></li></ul>
 <ul><li><a shape="rect" href="#StrutsNext-Whatshouldbeimproved/changed">What should be improved / changed</a></li><li><a shape="rect" href="#StrutsNext-DevelopmentplanofStruts3">Development plan of Struts 3</a>
 <ul class="toc-indentation"><li><a shape="rect" href="#StrutsNext-M1(akaStruts2.5)">M1 (aka Struts 2.5)</a></li><li><a shape="rect" href="#StrutsNext-M2(alphaStruts3)">M2 (alpha Struts 3)</a></li><li><a shape="rect" href="#StrutsNext-M3(alphaStruts3)">M3 (alpha Struts 3)</a></li><li><a shape="rect" href="#StrutsNext-M4(beta1Struts3)">M4 (beta 1 Struts 3)</a></li></ul>

Modified: websites/production/struts/content/docs/struts-tags.html
==============================================================================
--- websites/production/struts/content/docs/struts-tags.html (original)
+++ websites/production/struts/content/docs/struts-tags.html Tue Aug 25 07:18:20 2015
@@ -129,7 +129,7 @@ under the License.
 
 <p>The types of tags can be broken in to two types: generic and UI. Besides function and responsibility, the biggest difference between the two is that the HTML tags support <em>templates</em> and <em>themes</em>. In addition to the general tag reference, we also provide examples for using these generic tags in each of the support languages.</p>
 
-<p><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"> Be sure to read the <a shape="rect" href="tag-syntax.html">Tag Syntax</a> document to learn how tag attribute syntax works.</p>
+<p><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"> Be sure to read the <a shape="rect" href="tag-syntax.html">Tag Syntax</a> document to learn how tag attribute syntax works.</p>
 
 <h2 id="StrutsTags-FAQs">FAQs </h2>
 

Modified: websites/production/struts/content/docs/themes-and-templates.html
==============================================================================
--- websites/production/struts/content/docs/themes-and-templates.html (original)
+++ websites/production/struts/content/docs/themes-and-templates.html Tue Aug 25 07:18:20 2015
@@ -131,7 +131,7 @@ under the License.
 
 <div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> tag </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> A small piece of code executed from within <a shape="rect" href="jsp.html">JSP</a>, <a shape="rect" href="freemarker.html">FreeMarker</a>, or <a shape="rect" href="velocity.html">Velocity</a>. </p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> template </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> A bit of code, usually written in <a shape="rect" href="freemarker.html">FreeMarker</a>, that can be rendered by certain tags (HTML tags) </p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> theme </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> A  collection of <em>templates</em> packaged together to provide common functionality </p></td></tr></tbody></table></div>
 
-<p><img class="emoticon emoticon-light-on" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/lightbulb_on.png" data-emoticon-name="light-on" alt="(lightbulb)"> See <a shape="rect" href="struts-tags.html">Struts Tags</a> for more about the HTML and other tags provided by the framework.</p>
+<p><img class="emoticon emoticon-light-on" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/lightbulb_on.png" data-emoticon-name="light-on" alt="(lightbulb)"> See <a shape="rect" href="struts-tags.html">Struts Tags</a> for more about the HTML and other tags provided by the framework.</p>
 
 <h2 id="ThemesandTemplates-TemplateBasics">Template Basics</h2>
 

Modified: websites/production/struts/content/docs/timer-interceptor.html
==============================================================================
--- websites/production/struts/content/docs/timer-interceptor.html (original)
+++ websites/production/struts/content/docs/timer-interceptor.html Tue Aug 25 07:18:20 2015
@@ -138,19 +138,44 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+            <div id="ConfluenceContent"><p>This interceptor logs the amount of time in milliseconds. In order for this interceptor to work properly, the
+logging framework must be set to at least the <tt>INFO</tt> level.
+This interceptor relies on the <a shape="rect" href="http://jakarta.apache.org/commons/logging/">Commons Logging API</a> to
+report its execution-time value.</p>
 
 <h2 id="TimerInterceptor-Parameters">Parameters</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+
+<p></p><ul></ul><p></p><ul><li>logLevel (optional) - what log level should we use (<code>trace, debug, info, warn, error, fatal</code>)? - defaut is <code>info</code></li></ul><p></p><ul><li>logCategory (optional) - If provided we would use this category (eg. <code>com.mycompany.app</code>).
+Default is to use <code>com.opensymphony.xwork2.interceptor.TimerInterceptor</code>.</li></ul><p></p>
+
+<p>The parameters above enables us to log all action execution times in our own logfile.</p>
+
 
 <h2 id="TimerInterceptor-ExtendingtheInterceptor">Extending the Interceptor</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p>This interceptor can be extended to provide custom message format. Users should override the
+<code>invokeUnderTiming</code> method.</p>
 
 <h2 id="TimerInterceptor-Examples">Examples</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div>
+<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;!-- records only the action&#39;s execution time --&gt;
+&lt;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
+    &lt;interceptor-ref name=&quot;completeStack&quot;/&gt;
+    &lt;interceptor-ref name=&quot;timer&quot;/&gt;
+    &lt;result name=&quot;success&quot;&gt;good_result.ftl&lt;/result&gt;
+&lt;/action&gt;
+
+&lt;!-- records action&#39;s execution time as well as other interceptors--&gt;
+&lt;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
+    &lt;interceptor-ref name=&quot;timer&quot;/&gt;
+    &lt;interceptor-ref name=&quot;completeStack&quot;/&gt;
+    &lt;result name=&quot;success&quot;&gt;good_result.ftl&lt;/result&gt;
+&lt;/action&gt;
+]]></script>
+</div></div></div>
         </div>
 
         

Modified: websites/production/struts/content/docs/type-conversion.html
==============================================================================
--- websites/production/struts/content/docs/type-conversion.html (original)
+++ websites/production/struts/content/docs/type-conversion.html Tue Aug 25 07:18:20 2015
@@ -141,11 +141,11 @@ under the License.
             <div id="ConfluenceContent"><p>Routine type conversion in the framework is transparent. Generally, all you need to do is ensure that HTML inputs have names that can be used in <a shape="rect" href="ognl.html">OGNL</a> expressions. (HTML inputs are form elements and other GET/POST parameters.)</p>
 
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1438273942175 {padding: 0px;}
-div.rbtoc1438273942175 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1438273942175 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1440486120543 {padding: 0px;}
+div.rbtoc1440486120543 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1440486120543 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1438273942175">
+/*]]>*/</style><div class="toc-macro rbtoc1440486120543">
 <ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a shape="rect" href="#TypeConversion-BuiltinTypeConversionSupport">Built in Type Conversion Support</a></li><li><span class="TOCOutline">2</span> <a shape="rect" href="#TypeConversion-RelationshiptoParameterNames">Relationship to Parameter Names</a></li><li><span class="TOCOutline">3</span> <a shape="rect" href="#TypeConversion-CreatingaTypeConverter">Creating a Type Converter</a></li><li><span class="TOCOutline">4</span> <a shape="rect" href="#TypeConversion-ApplyingaTypeConvertertoanAction">Applying a Type Converter to an Action</a></li><li><span class="TOCOutline">5</span> <a shape="rect" href="#TypeConversion-ApplyingaTypeConvertertoabeanormodel">Applying a Type Converter to a bean or model</a></li><li><span class="TOCOutline">6</span> <a shape="rect" href="#TypeConversion-ApplyingaTypeConverterforanapplication">Applying a Type Converter for an application</a></li><li><span class="TOCOutline">7</span> <a shape="r
 ect" href="#TypeConversion-ASimpleExample">A Simple Example</a></li><li><span class="TOCOutline">8</span> <a shape="rect" href="#TypeConversion-AdvancedTypeConversion">Advanced Type Conversion</a>
 <ul class="toc-indentation"><li><span class="TOCOutline">8.1</span> <a shape="rect" href="#TypeConversion-NullPropertyHandling">Null Property Handling</a></li><li><span class="TOCOutline">8.2</span> <a shape="rect" href="#TypeConversion-CollectionandMapSupport">Collection and Map Support</a>
 <ul class="toc-indentation"><li><span class="TOCOutline">8.2.1</span> <a shape="rect" href="#TypeConversion-Indexingacollectionbyapropertyofthatcollection">Indexing a collection by a property of that collection</a></li></ul>
@@ -157,7 +157,19 @@ div.rbtoc1438273942175 li {margin-left:
 
 <h2 id="TypeConversion-BuiltinTypeConversionSupport">Built in Type Conversion Support</h2>
 <p>Type Conversion is implemented by XWork.</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p></p><p>
+XWork will automatically handle the most common type conversion for you. This includes support for converting to
+and from Strings for each of the following:
+</p>
+
+<p></p><ul><li>String</li><li>boolean / Boolean</li><li>char / Character</li><li>int / Integer, float / Float, long / Long, double / Double</li><li>dates - uses the SHORT format for the Locale associated with the current request</li><li>arrays - assuming the individual strings can be coverted to the individual items</li><li>collections - if not object type can be determined, it is assumed to be a String and a new ArrayList is
+created</li></ul>
+
+<p></p><p> Note that with arrays the type conversion will defer to the type of the array elements and try to convert each
+item individually. As with any other type conversion, if the conversion can't be performed the standard type
+conversion error reporting is used to indicate a problem occurred while processing the type conversion.
+</p>
+
 <ul><li>Enumerations</li><li>BigDecimal and BigInteger</li></ul>
 
 
@@ -233,9 +245,51 @@ java.math.BigDecimal = com.acme.MyBigDec
 
 <h2 id="TypeConversion-ASimpleExample">A Simple Example</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+
+<p></p><p>
+Type conversion is great for situations where you need to turn a String in to a more complex object. Because the web
+is type-agnostic (everything is a string in HTTP), Struts 2's type conversion features are very useful. For instance,
+if you were prompting a user to enter in coordinates in the form of a string (such as "3, 22"), you could have
+Struts 2 do the conversion both from String to Point and from Point to String.
+</p>
+
+<p></p><p>
+Using this "point" example, if your action (or another compound object in which you are setting properties on)
+has a corresponding ClassName-conversion.properties file, Struts 2 will use the configured type converters for
+conversion to and from strings. So turning "3, 22" in to new Point(3, 22) is done by merely adding the following
+entry to <b>ClassName-conversion.properties</b> (Note that the PointConverter should impl the TypeConverter
+interface):
+</p>
+<p><b>point = com.acme.PointConverter</b></p>
+
+<p></p><p>
+Your type converter should be sure to check what class type it is being requested to convert. Because it is used
+for both to and from strings, you will need to split the conversion method in to two parts: one that turns Strings in
+to Points, and one that turns Points in to Strings.
+</p>
+
+<p></p><p>
+After this is done, you can now reference your point (using &lt;s:property value="point"/&gt; in JSP or ${point}
+in FreeMarker) and it will be printed as "3, 22" again. As such, if you submit this back to an action, it will be
+converted back to a Point once again.
+</p>
+
+<p></p><p>
+In some situations you may wish to apply a type converter globally. This can be done by editing the file
+<b>xwork-conversion.properties</b> in the root of your class path (typically WEB-INF/classes) and providing a
+property in the form of the class name of the object you wish to convert on the left hand side and the class name of
+the type converter on the right hand side. For example, providing a type converter for all Point objects would mean
+adding the following entry:
+</p>
+
+<p></p><p><b>com.acme.Point = com.acme.PointConverter</b></p>
+
 <div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div></div>
+<p></p><p>
+Type conversion should not be used as a substitute for i18n. It is not recommended to use this feature to print out
+properly formatted dates. Rather, you should use the i18n features of Struts 2 (and consult the JavaDocs for JDK's
+MessageFormat object) to see how a properly formatted date should be displayed.
+</p></div></div>
 <p>The framework ships with a base helper class that simplifies converting to and from Strings, <code>org.apache.struts2.util.StrutsTypeConverter</code>. The helper class makes it easy to write type converters that handle converting objects to Strings as well as from Strings.</p>
 
 <p>From the JavaDocs:</p>
@@ -264,15 +318,43 @@ preferable a TypeConversionException.
 <h3 id="TypeConversion-NullPropertyHandling">Null Property Handling</h3>
 
 <p>Null property handling will automatically create objects where null references are found.</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p></p><p>
+Provided that the key ReflectionContextState#CREATE_NULL_OBJECTS is in the action context with a value of true (this key is set
+only during the execution of the com.opensymphony.xwork2.interceptor.ParametersInterceptor), OGNL expressions
+that have caused a NullPointerException will be temporarily stopped for evaluation while the system automatically
+tries to solve the null references by automatically creating the object.
+</p>
+
+<p></p><p>The following rules are used when handling null references:</p>
+
+<p></p><ul><li>If the property is declared <i>exactly</i> as a Collection or List, then an ArrayList shall be
+returned and assigned to the null references.</li><li>If the property is declared as a Map, then a HashMap will be returned and assigned to the null
+references.</li><li>If the null property is a simple bean with a no-arg constructor, it will simply be created using the {@link
+ObjectFactory#buildBean(java.lang.Class, java.util.Map)} method.</li></ul>
+
+<p></p><p>
+For example, if a form element has a text field named <b>person.name</b> and the expression <i>person</i> evaluates
+to null, then this class will be invoked. Because the <i>person</i> expression evaluates to a <i>Person</i> class, a
+new Person is created and assigned to the null reference. Finally, the name is set on that object and the overall
+effect is that the system automatically created a Person object for you, set it by calling setUsers() and then
+finally called getUsers().setName() as you would typically expect.
+</p>
 
 <h3 id="TypeConversion-CollectionandMapSupport">Collection and Map Support</h3>
 
 <p>Collection and Map support provides intelligent null handling and type conversion for Java Collections.</p>
 
 <p>The framework supports ways to discover the object type for elements in a collection. The discover is made via an <em>ObjectTypeDeterminer</em>. A default implementation is provided with the framework. The Javadocs explain how Map and Collection support is discovered in the <code>DefaultObjectTypeDeterminer</code>.</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+
+<p>This ObjectTypeDeterminer looks at the <b>Class-conversion.properties</b> for entries that indicated what
+objects are contained within Maps and Collections. For Collections, such as Lists, the element is specified using the
+pattern <b>Element_xxx</b>, where xxx is the field name of the collection property in your action or object. For
+Maps, both the key and the value may be specified by using the pattern <b>Key_xxx</b> and <b>Element_xxx</b>,
+respectively.</p>
+
+<p></p><p> From WebWork 2.1.x, the <b>Collection_xxx</b> format is still supported and honored, although it is deprecated
+and will be removed eventually.</p>
+
 <p>Additionally, you can create your own custom <code>ObjectTypeDeterminer</code> by implementing the <code>ObjectTypeDeterminer</code> interface. There is also an optional ObjectTypeDeterminer that utilizes Java 5 generics. See the <a shape="rect" href="annotations.html">Annotations</a> page for more information.</p>
 
 <h4 id="TypeConversion-Indexingacollectionbyapropertyofthatcollection">Indexing a collection by a property of that collection</h4>
@@ -407,7 +489,26 @@ CreateIfNull_beanList=true
 <h2 id="TypeConversion-TypeConversionErrorHandling">Type Conversion Error Handling</h2>
 
 <p>Type conversion error handling provides a simple way to distinguish between an input <em>validation</em> problem and an input <em>type conversion</em> problem.</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p></p><p>
+Any error that occurs during type conversion may or may not wish to be reported. For example, reporting that the
+input "abc" could not be converted to a number might be important. On the other hand, reporting that an empty string,
+"", cannot be converted to a number might not be important - especially in a web environment where it is hard to
+distinguish between a user not entering a value vs. entering a blank value.
+</p>
+<p> By default, all conversion errors are reported using the generic i18n key <b>xwork.default.invalid.fieldvalue</b>,
+which you can override (the default text is <i>Invalid field value for field "xxx"</i>, where xxx is the field name)
+in your global i18n resource bundle.
+</p>
+
+<p></p><p>However, sometimes you may wish to override this message on a per-field basis. You can do this by adding an i18n
+key associated with just your action (Action.properties) using the pattern <b>invalid.fieldvalue.xxx</b>, where xxx
+is the field name.
+</p>
+
+<p></p><p>It is important to know that none of these errors are actually reported directly. Rather, they are added to a map
+called <i>conversionErrors</i> in the ActionContext. There are several ways this map can then be accessed and the
+errors can be reported accordingly.
+</p>
 <p>There are two ways the error reporting can occur:</p>
 <ol><li>Globally, using the <a shape="rect" href="conversion-error-interceptor.html">Conversion Error Interceptor</a></li><li>On a per-field basis, using the <a shape="rect" href="conversion-validator.html">conversion validator</a></li></ol>
 

Modified: websites/production/struts/content/docs/typeconversion-annotation.html
==============================================================================
--- websites/production/struts/content/docs/typeconversion-annotation.html (original)
+++ websites/production/struts/content/docs/typeconversion-annotation.html Tue Aug 25 07:18:20 2015
@@ -138,19 +138,71 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+            <div id="ConfluenceContent"><p>This annotation is used for class and application wide conversion rules.</p>
+
+<p></p><p>
+Class wide conversion:<br clear="none">
+The conversion rules will be assembled in a file called <code>XXXAction-conversion.properties</code>
+within the same package as the related action class.
+Set type to: <code>type = ConversionType.CLASS</code>
+</p>
+
+<p></p><p>
+Application wide conversion:<br clear="none">
+The conversion rules will be assembled within the <code>xwork-conversion.properties</code> file within the classpath root.
+Set type to: <code>type = ConversionType.APPLICATION</code>
+</p>
 
 <h2 id="TypeConversionAnnotation-Usage">Usage</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p></p><p>The TypeConversion annotation can be applied at property and method level.</p>
 
 <h2 id="TypeConversionAnnotation-Parameters">Parameters</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p><table summary=""><thead><tr><th colspan="1" rowspan="1">Parameter</th><th colspan="1" rowspan="1">Required</th><th colspan="1" rowspan="1">Default</th><th colspan="1" rowspan="1">Description</th></tr></thead><tbody><tr><td colspan="1" rowspan="1">key</td><td colspan="1" rowspan="1">no</td><td colspan="1" rowspan="1">The annotated property/key name</td><td colspan="1" rowspan="1">The optional property name mostly used within TYPE level annotations.</td></tr><tr><td colspan="1" rowspan="1">type</td><td colspan="1" rowspan="1">no</td><td colspan="1" rowspan="1">ConversionType.CLASS</td><td colspan="1" rowspan="1">Enum value of ConversionType.  Determines whether the conversion should be applied at application or class level.</td></tr><tr><td colspan="1" rowspan="1">rule</td><td colspan="1" rowspan="1">no</td><td colspan="1" rowspan="1">ConversionRule.PROPERTY</td><td colspan="1" rowspan="1">Enum value of ConversionRule. The ConversionRule can be a property, a Collection or a Map.</
 td></tr><tr><td colspan="1" rowspan="1">converter</td><td colspan="1" rowspan="1">either this or value</td><td colspan="1" rowspan="1">&#160;</td><td colspan="1" rowspan="1">The class name of the TypeConverter to be used as converter.</td></tr><tr><td colspan="1" rowspan="1">value</td><td colspan="1" rowspan="1">either converter or this</td><td colspan="1" rowspan="1">&#160;</td><td colspan="1" rowspan="1">The value to set for ConversionRule.KEY_PROPERTY.</td></tr></tbody></table></p>
+
 
 <h2 id="TypeConversionAnnotation-Examples">Examples</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div>
+<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+@Conversion()
+public class ConversionAction implements Action {
+
+  private String convertInt;
+
+  private String convertDouble;
+  private List users = null;
+
+  private HashMap keyValues = null;
+
+  @TypeConversion(type = ConversionType.APPLICATION, converter = &quot;com.opensymphony.xwork2.util.XWorkBasicConverter&quot;)
+  public void setConvertInt( String convertInt ) {
+      this.convertInt = convertInt;
+  }
+
+  @TypeConversion(converter = &quot;com.opensymphony.xwork2.util.XWorkBasicConverter&quot;)
+  public void setConvertDouble( String convertDouble ) {
+      this.convertDouble = convertDouble;
+  }
+
+  @TypeConversion(rule = ConversionRule.COLLECTION, converter = &quot;java.util.String&quot;)
+  public void setUsers( List users ) {
+      this.users = users;
+  }
+
+  @TypeConversion(rule = ConversionRule.MAP, converter = &quot;java.math.BigInteger&quot;)
+  public void setKeyValues( HashMap keyValues ) {
+      this.keyValues = keyValues;
+  }
+
+  @TypeConversion(type = ConversionType.APPLICATION, property = &quot;java.util.Date&quot;, converter = &quot;com.opensymphony.xwork2.util.XWorkBasicConverter&quot;)
+  public String execute() throws Exception {
+      return SUCCESS;
+  }
+}
+]]></script>
+</div></div></div>
         </div>
 
         

Modified: websites/production/struts/content/docs/using-freemarker-templates.html
==============================================================================
--- websites/production/struts/content/docs/using-freemarker-templates.html (original)
+++ websites/production/struts/content/docs/using-freemarker-templates.html Tue Aug 25 07:18:20 2015
@@ -141,11 +141,11 @@ under the License.
             <div id="ConfluenceContent"><p><a shape="rect" class="external-link" href="http://freemarker.sourceforge.net/" rel="nofollow">FreeMarker</a> is a Java-based template engine that is a great alternative to <a shape="rect" href="jsp.html">JSP</a>. FreeMarker is ideal for situations where your action results can possibly be loaded from outside a Servlet container. For example, if you wished to support plugins in your application, you might wish to use FreeMarker so that the plugins could provide the entire action class and view in a single jar that is loaded from the classloader.</p>
 
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1438274239530 {padding: 0px;}
-div.rbtoc1438274239530 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1438274239530 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1440486450795 {padding: 0px;}
+div.rbtoc1440486450795 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1440486450795 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1438274239530">
+/*]]>*/</style><div class="toc-macro rbtoc1440486450795">
 <ul class="toc-indentation"><li><a shape="rect" href="#UsingFreemarkerTemplates-Configureyouractiontousethe&quot;freemarker&quot;resulttype">Configure your action to use the "freemarker" result type</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Usingproperties">Using properties</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Servlet/JSPScopedObjects">Servlet / JSP Scoped Objects</a>
 <ul class="toc-indentation"><li><a shape="rect" href="#UsingFreemarkerTemplates-ApplicationScopeAttribute">Application Scope Attribute</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-SessionScopeAttribute">Session Scope Attribute</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-RequestScopeAttribute">Request Scope Attribute</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-RequestParameter">Request Parameter</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Contextparameter">Context parameter</a></li></ul>
 </li><li><a shape="rect" href="#UsingFreemarkerTemplates-TemplateLoading">Template Loading</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-VariableResolution">Variable Resolution</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-FreeMarkerconfiguration">FreeMarker configuration</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Tags">Tags</a>

Modified: websites/production/struts/content/docs/validation-annotation.html
==============================================================================
--- websites/production/struts/content/docs/validation-annotation.html (original)
+++ websites/production/struts/content/docs/validation-annotation.html Tue Aug 25 07:18:20 2015
@@ -138,15 +138,16 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+            <div id="ConfluenceContent"><p>This annotation has been deprecated since 2.1 as its previous purpose, to define classes that support annotation validations,
+is no longer necessary.</p>
 
 <h2 id="ValidationAnnotation-Usage">Usage</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p></p><p>The Validation annotation must be applied at Type level.</p>
 
 <h2 id="ValidationAnnotation-Parameters">Parameters</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p><table class="confluenceTable" summary=""><tr><th colspan="1" rowspan="1" class="confluenceTh"> Parameter </th><th colspan="1" rowspan="1" class="confluenceTh"> Required </th><th colspan="1" rowspan="1" class="confluenceTh"> Default </th><th colspan="1" rowspan="1" class="confluenceTh"> Notes </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">validations</td><td colspan="1" rowspan="1" class="confluenceTd">yes</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"></td></tr></table></p>
 
 <h2 id="ValidationAnnotation-Examples">Examples</h2>
 
@@ -154,9 +155,69 @@ under the License.
 <ul><li>Mark the interface with @Validation()</li><li>Apply standard or custom annoations at method level</li></ul>
 
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+@Validation()
+public interface AnnotationDataAware {
+
+    void setBarObj(Bar b);
+
+    Bar getBarObj();
+
+    @RequiredFieldValidator(message = &quot;You must enter a value for data.&quot;)
+    @RequiredStringValidator(message = &quot;You must enter a value for data.&quot;)
+    void setData(String data);
+
+    String getData();
+}
+]]></script>
+</div></div>
 <p><strong>An Annotated Class</strong></p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+@Validation()
+public class SimpleAnnotationAction extends ActionSupport {
+
+    @RequiredFieldValidator(type = ValidatorType.FIELD, message = &quot;You must enter a value for bar.&quot;)
+    @IntRangeFieldValidator(type = ValidatorType.FIELD, min = &quot;6&quot;, max = &quot;10&quot;, message = &quot;bar must be between ${min} and ${max}, current value is ${bar}.&quot;)
+    public void setBar(int bar) {
+        this.bar = bar;
+    }
+
+    public int getBar() {
+        return bar;
+    }
+
+    @Validations(
+            requiredFields =
+                    {@RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = &quot;customfield&quot;, message = &quot;You must enter a value for field.&quot;)},
+            requiredStrings =
+                    {@RequiredStringValidator(type = ValidatorType.SIMPLE, fieldName = &quot;stringisrequired&quot;, message = &quot;You must enter a value for string.&quot;)},
+            emails =
+                    { @EmailValidator(type = ValidatorType.SIMPLE, fieldName = &quot;emailaddress&quot;, message = &quot;You must enter a value for email.&quot;)},
+            urls =
+                    { @UrlValidator(type = ValidatorType.SIMPLE, fieldName = &quot;hreflocation&quot;, message = &quot;You must enter a value for email.&quot;)},
+            stringLengthFields =
+                    {@StringLengthFieldValidator(type = ValidatorType.SIMPLE, trim = true, minLength=&quot;10&quot; , maxLength = &quot;12&quot;, fieldName = &quot;needstringlength&quot;, message = &quot;You must enter a stringlength.&quot;)},
+            intRangeFields =
+                    { @IntRangeFieldValidator(type = ValidatorType.SIMPLE, fieldName = &quot;intfield&quot;, min = &quot;6&quot;, max = &quot;10&quot;, message = &quot;bar must be between ${min} and ${max}, current value is ${bar}.&quot;)},
+            dateRangeFields =
+                    {@DateRangeFieldValidator(type = ValidatorType.SIMPLE, fieldName = &quot;datefield&quot;, min = &quot;-1&quot;, max = &quot;99&quot;, message = &quot;bar must be between ${min} and ${max}, current value is ${bar}.&quot;)},
+            expressions = {
+                @ExpressionValidator(expression = &quot;foo &gt; 1&quot;, message = &quot;Foo must be greater than Bar 1. Foo = ${foo}, Bar = ${bar}.&quot;),
+                @ExpressionValidator(expression = &quot;foo &gt; 2&quot;, message = &quot;Foo must be greater than Bar 2. Foo = ${foo}, Bar = ${bar}.&quot;),
+                @ExpressionValidator(expression = &quot;foo &gt; 3&quot;, message = &quot;Foo must be greater than Bar 3. Foo = ${foo}, Bar = ${bar}.&quot;),
+                @ExpressionValidator(expression = &quot;foo &gt; 4&quot;, message = &quot;Foo must be greater than Bar 4. Foo = ${foo}, Bar = ${bar}.&quot;),
+                @ExpressionValidator(expression = &quot;foo &gt; 5&quot;, message = &quot;Foo must be greater than Bar 5. Foo = ${foo}, Bar = ${bar}.&quot;)
+    }
+    )
+    public String execute() throws Exception {
+        return SUCCESS;
+    }
+}
+
+]]></script>
+</div></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>When multiple methods are used to map different actions on the same class, and one of them is annotated with <em>@Validations</em>, those validators will be triggered for all the actions, unless they are annotated with @SkipValidation or <em>validateAnnotatedMethodOnly</em> is set to <em>true</em> in the "validation" interceptor, like:</p>

Modified: websites/production/struts/content/docs/validation-interceptor.html
==============================================================================
--- websites/production/struts/content/docs/validation-interceptor.html (original)
+++ websites/production/struts/content/docs/validation-interceptor.html Tue Aug 25 07:18:20 2015
@@ -138,19 +138,86 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+            <div id="ConfluenceContent">
+<p></p><p>
+This interceptor runs the action through the standard validation framework, which in turn checks the action against
+any validation rules (found in files such as <i>ActionClass-validation.xml</i>) and adds field-level and action-level
+error messages (provided that the action implements ValidationAware). This interceptor
+is often one of the last (or second to last) interceptors applied in a stack, as it assumes that all values have
+already been set on the action.
+</p>
+
+<p></p><p>
+This interceptor does nothing if the name of the method being invoked is specified in the <b>excludeMethods</b>
+parameter. <b>excludeMethods</b> accepts a comma-delimited list of method names. For example, requests to
+<b>foo!input.action</b> and <b>foo!back.action</b> will be skipped by this interceptor if you set the
+<b>excludeMethods</b> parameter to "input, back".
+</p>
+
+<p></p><p>
+The workflow of the action request does not change due to this interceptor. Rather,
+this interceptor is often used in conjunction with the <b>workflow</b> interceptor.
+</p>
+
+<p></p><p>
+<b>NOTE:</b> As this method extends off MethodFilterInterceptor, it is capable of
+deciding if it is applicable only to selective methods in the action class. See
+<code>MethodFilterInterceptor</code> for more info.
+</p>
+
 
 <h2 id="ValidationInterceptor-Parameters">Parameters</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+
+<p></p><ul></ul><p></p><ul><li>alwaysInvokeValidate - Defaults to true. If true validate() method will always
+be invoked, otherwise it will not.</li></ul><p></p><ul><li>programmatic - Defaults to true. If true and the action is Validateable call validate(),
+and any method that starts with "validate".
+</li></ul><p></p><ul><li>declarative - Defaults to true. Perform validation based on xml or annotations.</li></ul><p></p>
+
 
 <h2 id="ValidationInterceptor-ExtendingtheInterceptor">Extending the Interceptor</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+
+<p>There are no known extension points for this interceptor.</p>
+
 
 <h2 id="ValidationInterceptor-Examples">Examples</h2>
 
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div>
+<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;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
+    &lt;interceptor-ref name=&quot;params&quot;/&gt;
+    &lt;interceptor-ref name=&quot;validation&quot;/&gt;
+    &lt;interceptor-ref name=&quot;workflow&quot;/&gt;
+    &lt;result name=&quot;success&quot;&gt;good_result.ftl&lt;/result&gt;
+&lt;/action&gt;
+
+&lt;-- in the following case myMethod of the action class will not
+       get validated --&gt;
+&lt;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
+    &lt;interceptor-ref name=&quot;params&quot;/&gt;
+    &lt;interceptor-ref name=&quot;validation&quot;&gt;
+        &lt;param name=&quot;excludeMethods&quot;&gt;myMethod&lt;/param&gt;
+    &lt;/interceptor-ref&gt;
+    &lt;interceptor-ref name=&quot;workflow&quot;/&gt;
+    &lt;result name=&quot;success&quot;&gt;good_result.ftl&lt;/result&gt;
+&lt;/action&gt;
+
+&lt;-- in the following case only annotated methods of the action class will
+       be validated --&gt;
+&lt;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
+    &lt;interceptor-ref name=&quot;params&quot;/&gt;
+    &lt;interceptor-ref name=&quot;validation&quot;&gt;
+        &lt;param name=&quot;validateAnnotatedMethodOnly&quot;&gt;true&lt;/param&gt;
+    &lt;/interceptor-ref&gt;
+    &lt;interceptor-ref name=&quot;workflow&quot;/&gt;
+    &lt;result name=&quot;success&quot;&gt;good_result.ftl&lt;/result&gt;
+&lt;/action&gt;
+
+
+]]></script>
+</div></div></div>
         </div>