Modified:
websites/production/struts/content/docs/customvalidator-annotation.html
==============================================================================
--- websites/production/struts/content/docs/customvalidator-annotation.html
(original)
+++ websites/production/struts/content/docs/customvalidator-annotation.html Tue
Aug 25 07:18:20 2015
@@ -138,19 +138,23 @@ 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 can be used for
custom validators. Use the ValidationParameter annotation to supply additional
params.</p>
<h2 id="CustomValidatorAnnotation-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 or type level.</p>
<h2 id="CustomValidatorAnnotation-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"> </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"> </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"> </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"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> </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">name of validator</td><td colspan="1" rowspan="1"
class="confluenceTd">Simple string which iden
tifies that validator among other</td></tr></table></p>
<h2 id="CustomValidatorAnnotation-Examples">Examples</h2>
-<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[
+@CustomValidator(type ="customValidatorName", fieldName =
"myField")
+]]></script>
+</div></div>
<h2 id="CustomValidatorAnnotation-AddingParameters">Adding Parameters</h2>
Modified: websites/production/struts/content/docs/date-validator.html
==============================================================================
--- websites/production/struts/content/docs/date-validator.html (original)
+++ websites/production/struts/content/docs/date-validator.html Tue Aug 25
07:18:20 2015
@@ -139,16 +139,57 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="datevalidator-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 date supplied is within a specific
range.</p>
+
+<p><b>NOTE:</b> If no date converter is specified, XWorkBasicConverter will
kick
+in to do the date conversion, which by default using the
<code>Date.SHORT</code> format using
+the a problematically specified locale else falling back to the system
+default locale.</p>
+
+
<h1 id="datevalidator-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 min date range. If not specified will not be checked.</li><li>max - the max
date range. If not specified 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="datevalidator-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[
+<validators>
+ <!-- Plain Validator syntax -->
+ <validator type="date">
+ <param name="fieldName">birthday</param>
+ <param name="min">01/01/1990</param>
+ <param name="max">01/01/2000</param>
+ <message>Birthday must be within ${min} and
${max}</message>
+ </validator>
+
+ <!-- Field Validator Syntax -->
+ <field name="birthday">
+ <field-validator type="date">
+ <param name="min">01/01/1990</param>
+ <param name="max">01/01/2000</param>
+ <message>Birthday must be within ${min} and
${max}</message>
+ </field>
+ </field>
+
+ <!-- Field Validator Syntax with expression -->
+ <field name="birthday">
+ <field-validator type="date">
+ <param
name="minExpression">${minValue}</param> <!-- will be
evaluated as: Date getMinValue() -->
+ <param
name="maxExpression">${maxValue}</param> <!-- will be
evaluated as: Date getMaxValue() -->
+ <message>Age needs to be between ${min} and
${max}</message>
+ </field-validator>
+ </field>
+</validators>
+]]></script>
+</div></div></div>
</div>
Modified:
websites/production/struts/content/docs/daterangefieldvalidator-annotation.html
==============================================================================
---
websites/production/struts/content/docs/daterangefieldvalidator-annotation.html
(original)
+++
websites/production/struts/content/docs/daterangefieldvalidator-annotation.html
Tue Aug 25 07:18:20 2015
@@ -138,19 +138,25 @@ 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 date
field has a value within a specified range.</p>
<h2 id="DateRangeFieldValidatorAnnotation-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="DateRangeFieldValidatorAnnotation-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"> </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"> </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"> </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"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> </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"> min </td><td colspan="1" rowspan="1"
class="confluenceTd"> no </td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> Date property. The minimum the date must be.
</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">minExpression</td><td colspan="1" rowspan="1"
class="confluenceTd">no</td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd">OGNL expression used to obtain the minimum the date must
be.</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> max </td><td
colspan="1" rowspan="1" class="confluenceTd"> no </td><td colspan="1"
rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> Date property. The maximum date can be.
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">maxExpress
ion</td><td colspan="1" rowspan="1" class="confluenceTd">no</td><td
colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1"
rowspan="1" class="confluenceTd">OGNL expression used to obtain the maximum
date can be.</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">maxExpression</td><td colspan="1" rowspan="1"
class="confluenceTd">no</td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd">OGNL expression used to obtain the maximum date can
be.</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">dateFormat</td><td colspan="1" rowspan="1"
class="confluenceTd">no</td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd">Format used to parse min/max value.</td></tr></table></p>
+
+<p></p><p>If neither <em>min</em> nor <em>max</em> is set, nothing will be
done.</p>
<h2 id="DateRangeFieldValidatorAnnotation-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[
+@DateRangeFieldValidator(message = "Default message", key =
"i18n.key", shortCircuit = true, min = "2005/01/01", max =
"2005/12/31")
+]]></script>
+</div></div></div>
</div>
Modified:
websites/production/struts/content/docs/default-workflow-interceptor.html
==============================================================================
--- websites/production/struts/content/docs/default-workflow-interceptor.html
(original)
+++ websites/production/struts/content/docs/default-workflow-interceptor.html
Tue Aug 25 07:18:20 2015
@@ -138,20 +138,94 @@ 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 class="error"><span class="error">Error formatting macro: snippet:
java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+ <div id="ConfluenceContent"><p>
+An interceptor that makes sure there are not validation errors before allowing
the interceptor chain to continue.
+<b>This interceptor does not perform any validation</b>.
+</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>
+<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.
This is done by adding param tags
+for the interceptor element, naming either a list of excluded method names
and/or a list of included method
+names, whereby includeMethods overrides excludedMethods. A single * sign is
interpreted as wildcard matching
+all methods for both parameters.
+See MethodFilterInterceptor for more info.
+</p>
+
+<p></p><p>
+This interceptor also supports the following interfaces which can implemented
by actions:
+</p>
+
+<p></p><ul><li>ValidationAware - implemented by ActionSupport
class</li><li>ValidationWorkflowAware - allows changing result name
programmatically</li><li>ValidationErrorAware - notifies action about errors
and also allow change result name</li></ul>
+
+<p></p><p>
+You can also use InputConfig annotation to change result name returned when
validation errors occurred.
+</p>
+
+
+<p><b>In DefaultWorkflowInterceptor</b>
+</p><p>applies only when action implements
com.opensymphony.xwork2.Validateable</p>
+<ol><li>if the action class have validate{MethodName}(), it will be
invoked</li><li>else if the action class have validateDo{MethodName}(), it will
be invoked</li><li>no matter if 1] or 2] is performed, if alwaysInvokeValidate
property of the interceptor is "true" (which is by default "true"), validate()
will be invoked.</li></ol>
+
<h2 id="DefaultWorkflowInterceptor-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><li>inputResultName - Default to "input". Determine the result name
to be returned when
+an action / field error is found.</li></ul>
<h2 id="DefaultWorkflowInterceptor-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 known extension points for this interceptor.</p>
+
<h2 id="DefaultWorkflowInterceptor-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[
+
+<action name="someAction"
class="com.examples.SomeAction">
+ <interceptor-ref name="params"/>
+ <interceptor-ref name="validation"/>
+ <interceptor-ref name="workflow"/>
+ <result name="success">good_result.ftl</result>
+</action>
+
+<-- In this case myMethod as well as mySecondMethod of the action class
+ will not pass through the workflow process -->
+<action name="someAction"
class="com.examples.SomeAction">
+ <interceptor-ref name="params"/>
+ <interceptor-ref name="validation"/>
+ <interceptor-ref name="workflow">
+ <param
name="excludeMethods">myMethod,mySecondMethod</param>
+ </interceptor-ref name="workflow">
+ <result name="success">good_result.ftl</result>
+</action>
+
+<-- In this case, the result named "error" will be used when
+ an action / field error is found -->
+<-- The Interceptor will only be applied for myWorkflowMethod method of
action
+ classes, since this is the only included method while any others are
excluded -->
+<action name="someAction"
class="com.examples.SomeAction">
+ <interceptor-ref name="params"/>
+ <interceptor-ref name="validation"/>
+ <interceptor-ref name="workflow">
+ <param name="inputResultName">error</param>
+ <param name="excludeMethods">*</param>
+ <param
name="includeMethods">myWorkflowMethod</param>
+ </interceptor-ref>
+ <result name="success">good_result.ftl</result>
+</action>
+
+]]></script>
+</div></div></div>
</div>
Modified: websites/production/struts/content/docs/devmode.html
==============================================================================
--- websites/production/struts/content/docs/devmode.html (original)
+++ websites/production/struts/content/docs/devmode.html Tue Aug 25 07:18:20
2015
@@ -138,53 +138,15 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
- <div id="ConfluenceContent"><h2
id="devMode-DevelopmentMode(aka"devMode")">Development Mode (aka
"devMode")</h2>
-
-<p>Struts 2 has a setting (which can be set to <code>true</code> or
<code>false</code> in <a shape="rect"
href="strutsproperties.html">struts.properties</a>) called devMode (=
development mode). When this setting is enabled, Struts 2 will provide
additional logging and debug information, which can significantly speed up
development.</p>
-
-<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>You can also set this constant in your struts.xml file: <code><constant
name="struts.devMode" value="true" /></code>. </p>
-
-<p>This is the preferred method. See <a shape="rect"
href="constant-configuration.html">Constant Configuration</a> for more
information.</p></div></div>
-
-<h2 id="devMode-Whatdoesitdo?">What does it do?</h2>
-
-<ul class="alternate"><li>When enabled, Struts 2 will reload your
<strong>resource bundles on every request</strong> (meaning you can change your
.properties files, save them, and see the changes reflected on the next
request).<br clear="none">
-Note: this option can also be set standalone via <code>struts.i18n.reload =
true</code></li></ul>
-
-
-<ul class="alternate"><li>It will also <strong>reload your xml configuration
files</strong> (<a shape="rect" href="strutsxml.html">struts.xml</a>), your
<strong>validation files</strong>, and so on, on every request. This is useful
for testing or fine-tuning your configuration without having to redeploy your
application every time.<br clear="none">
-Note: this option can also be set standalone via
<code>struts.configuration.xml.reload = true</code></li></ul>
-
-
-<ul class="alternate"><li>And thirdly, perhaps the setting which is less
widely known, and therefore a source of much confusion: it will <strong>raise
the level of debug or normally ignorable problems to errors</strong>. For
example: when you <strong>submit a field which cannot be set on an
action</strong> 'someUnknownField', it will normally be ignored. However, when
you're in development mode, <strong>an exception will be thrown</strong>,
telling you an invalid field was submitted. This is very useful for debugging
or testing large forms, but can also be confusing if you're relying on
parameters in your request that are not set on the action, but which you are
using directly in your view layer (<strong>warning</strong>: bad practice, you
should always validate input from the web).</li></ul>
-
-
-<h2 id="devMode-Don'tforget...">Don't forget...</h2>
-
-<p>By default, the development mode is disabled, because it has a significant
impact on <a shape="rect" href="performance-tuning.html">performance</a>, since
the entire configuration will be reloaded on every request.</p>
-
-<h2 id="devMode-Pagerenderingisslow">Page rendering is slow</h2>
-
-<p>If you experience slow page rendering when <code>devMode</code> is on it's
mostly because Freemarker cache is disabled during <code>devMode</code>. You
can explicit enable cache and any other options disabled by
<code>devMode</code>, see example below:</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;">
-<constant name="struts.devMode" value="true" />
+ <div id="ConfluenceContent"><h2
id="devMode-DevelopmentMode(aka"devMode")">Development Mode (aka
"devMode")</h2><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>Please turn this option off before
deploying application to a production environment - it can expose sensitive
data of your application!</p></div></div><p>Struts 2 has a setting (which can
be set to <code style="line-height: 1.4285715;">true</code> or <code
style="line-height: 1.4285715;">false</code> in <a shape="rect"
href="strutsproperties.html">struts.properties</a>) called devMode (=
development mode). When this setting is enabled, Struts 2 will provide
additional logging and debug information, which can significantly speed up
development.</p><div class="confluence-information-macro
confluence-information-macro-tip"><span c
lass="aui-icon aui-icon-small aui-iconfont-approve
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>You can also set this constant in
your struts.xml file: <code><constant name="struts.devMode" value="true"
/></code>.</p><p>This is the preferred method. See <a shape="rect"
href="constant-configuration.html">Constant Configuration</a> for more
information.</p></div></div><h2 id="devMode-Whatdoesitdo?">What does it
do?</h2><ul class="alternate"><li>When enabled, Struts 2 will reload your
<strong>resource bundles on every request</strong> (meaning you can change your
.properties files, save them, and see the changes reflected on the next
request).<br clear="none"> Note: this option can also be set standalone via
<code>struts.i18n.reload = true</code></li></ul><ul class="alternate"><li>It
will also <strong>reload your xml configuration files</strong> (<a shape="rect"
href="strutsxml.html">struts.xml</a>), your <strong>validation files</st
rong>, and so on, on every request. This is useful for testing or fine-tuning
your configuration without having to redeploy your application every time.<br
clear="none"> Note: this option can also be set standalone via
<code>struts.configuration.xml.reload = true</code></li></ul><ul
class="alternate"><li>And thirdly, perhaps the setting which is less widely
known, and therefore a source of much confusion: it will <strong>raise the
level of debug or normally ignorable problems to errors</strong>. For example:
when you <strong>submit a field which cannot be set on an action</strong>
'someUnknownField', it will normally be ignored. However, when you're in
development mode, <strong>an exception will be thrown</strong>, telling you an
invalid field was submitted. This is very useful for debugging or testing large
forms, but can also be confusing if you're relying on parameters in your
request that are not set on the action, but which you are using directly in
your view layer (<strong>war
ning</strong>: bad practice, you should always validate input from the
web).</li></ul><h2 id="devMode-Don'tforget...">Don't forget...</h2><p>By
default, the development mode is disabled, because it has a significant impact
on <a shape="rect" href="performance-tuning.html">performance</a>, since the
entire configuration will be reloaded on every request.</p><h2
id="devMode-Pagerenderingisslow">Page rendering is slow</h2><p>If you
experience slow page rendering when <code>devMode</code> is on it's mostly
because Freemarker cache is disabled during <code>devMode</code>. You can
explicit enable cache and any other options disabled by <code>devMode</code>,
see example below:</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;"><constant name="struts.devMode" value="true" />
<constant name="struts.i18n.reload" value="false"/>
<constant name="struts.configuration.xml.reload" value="false"/>
<constant name="struts.freemarker.templatesCache" value="true"/>
<constant name="struts.freemarker.templatesCache.updateDelay"
value="120"/>
<constant name="struts.freemarker.mru.max.strong.size" value="120"/>
</pre>
-</div></div>
-
-<p>As you can see, you can switch <code>devMode</code> on and still have
production options on as well.</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">
-<p>Please remember to use production optimized options which can be different
than these used during development (especially cache related)!</p></div></div>
-
-<h2 id="devMode-Next:">Next: <a shape="rect"
href="zero-configuration.html">Zero Configuration</a></h2></div>
+</div></div><p>As you can see, you can switch <code>devMode</code> on and
still have production options on as well.</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"><p>Please remember to use production
optimized options which can be different than these used during development
(especially cache related)!</p></div></div><h2 id="devMode-Next:">Next: <a
shape="rect" href="zero-configuration.html">Zero Configuration</a></h2></div>
</div>
Modified: websites/production/struts/content/docs/double-validator.html
==============================================================================
--- websites/production/struts/content/docs/double-validator.html (original)
+++ websites/production/struts/content/docs/double-validator.html Tue Aug 25
07:18:20 2015
@@ -139,16 +139,51 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="doublevalidator-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 double specified is within a certain
range.</p>
<h1 id="doublevalidator-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>minInclusive - the minimum inclusive value in FloatValue
format specified by Java language (if none is specified, it will not be
checked) </li><li>maxInclusive - the maximum inclusive value in FloatValue
format specified by Java language (if none is specified, it will not be
checked) </li><li>minExclusive - the minimum exclusive value in FloatValue
format specified by Java language (if none is specified, it will not be
checked) </li><li>maxExclusive - the maximum exclusive value in FloatValue
format specified by Java language (if none is specified, it will not be
checked) </li><li>minInclusiveExpression - the minimum inclusive value
specified as a OGNL expression (if none is specified, it will not be checked)
</li><li>maxInclusiveExpression - the maximum inclusive value specified as a
OGNL expression (if none is specified, it will not be che
cked) </li><li>minExclusiveExpression - the minimum exclusive value specified
as a OGNL expression (if none is specified, it will not be checked)
</li><li>maxExclusiveExpression - the maximum exclusive value specified as a
OGNL expression (if none is specified, it will not be checked) </li></ul>
+
+<p>You can specify either minInclusive, maxInclusive, minExclusive and
maxExclusive or minInclusiveExpression, maxInclusiveExpression,
+minExclusiveExpression and maxExclusiveExpression as a OGNL expression, see
example below. You can always try to mix params
+but be aware that such behaviour was not tested.</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 ${minInclusiveExpression}, ${maxInclusiveExpression},
${minExclusiveExpressionExpression} and ${maxExclusive}
+as an expression as this will turn into infinitive loop!</p></div></div>
<h1 id="doublevalidator-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[
+<validators>
+ <!-- Plain Validator Syntax -->
+ <validator type="double">
+ <param name="fieldName">percentage</param>
+ <param name="minInclusive">20.1</param>
+ <param name="maxInclusive">50.1</param>
+ <message>Age needs to be between ${minInclusive} and
${maxInclusive} (inclusive)</message>
+ </validator>
+
+ <!-- Field Validator Syntax -->
+ <field name="percentage">
+ <field-validator type="double">
+ <param name="minExclusive">0.123</param>
+ <param name="maxExclusive">99.98</param>
+ <message>Percentage needs to be between ${minExclusive} and
${maxExclusive} (exclusive)</message>
+ </field-validator>
+ </field>
+
+ <!-- Field Validator Syntax with expression -->
+ <field name="percentage">
+ <field-validator type="double">
+ <param
name="minExclusiveExpression">${minExclusiveValue}</param>
<!-- will be evaluated as: Double getMinExclusiveValue() -->
+ <param
name="maxExclusiveExpression">${maxExclusiveValue}</param>
<!-- will be evaluated as: Double getMaxExclusiveValue() -->
+ <message>Percentage needs to be between ${minExclusive} and
${maxExclusive} (exclusive)</message>
+ </field-validator>
+ </field>
+</validators>
+]]></script>
+</div></div></div>
</div>
Modified:
websites/production/struts/content/docs/doublerangefieldvalidator-annotation.html
==============================================================================
---
websites/production/struts/content/docs/doublerangefieldvalidator-annotation.html
(original)
+++
websites/production/struts/content/docs/doublerangefieldvalidator-annotation.html
Tue Aug 25 07:18:20 2015
@@ -138,19 +138,28 @@ 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 double
field has a value within a specified range.
+If neither min nor max is set, nothing will be done.</p>
<h2 id="DoubleRangeFieldValidatorAnnotation-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="DoubleRangeFieldValidatorAnnotation-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"> </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"> </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"> </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"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> </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"> minInclusive </td><td colspan="1" rowspan="1"
class="confluenceTd"> no </td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> Double property. The inclusive minimum the number must
be. </td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">minInclusiveExpression</td><td colspan="1" rowspan="1"
class="confluenceTd">no</td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd">OGNL expression used to obtain the inclusive minimum the
number must be. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">
maxInclusive </td><td colspan="1" rowspan="1" class="confluenceTd"> no </td><td
colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1"
rowspan="1" class="confluenceTd"> Double property. The inclusive maximum
number can be. </td>
</tr><tr><td colspan="1" rowspan="1" class="confluenceTd">
maxInclusiveExpression </td><td colspan="1" rowspan="1" class="confluenceTd">
no </td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td
colspan="1" rowspan="1" class="confluenceTd">OGNL expression used to obtain the
inclusive maximum number can be. </td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"> minExclusive </td><td colspan="1" rowspan="1"
class="confluenceTd"> no </td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> Double property. The exclusive minimum the number must
be. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">
minExclusiveExpression </td><td colspan="1" rowspan="1" class="confluenceTd">
no </td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td
colspan="1" rowspan="1" class="confluenceTd">OGNL expression used to obtain the
exclusive minimum the number must be. </td></tr><tr><td colspan="1" row
span="1" class="confluenceTd"> maxExclusive </td><td colspan="1" rowspan="1"
class="confluenceTd"> no </td><td colspan="1" rowspan="1"
class="confluenceTd"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> Double property. The exclusive maximum number can be.
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">
maxExclusiveExpression </td><td colspan="1" rowspan="1" class="confluenceTd">
no </td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td
colspan="1" rowspan="1" class="confluenceTd">OGNL expression used to obtain the
exclusive maximum number can be. </td></tr></table></p>
+
+<p></p><p>If neither <em>min</em> nor <em>max</em> is set, nothing will be
done.</p>
+
+<p></p><p>The values for min and max must be inserted as String values so that
"0" can be handled as a possible value.</p>
<h2 id="DoubleRangeFieldValidatorAnnotation-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[
+@DoubleRangeFieldValidator(message = "Default message", key =
"i18n.key", shortCircuit = true, minInclusive = "0.123",
maxInclusive = "99.987")
+]]></script>
+</div></div></div>
</div>
Modified: websites/production/struts/content/docs/editing-the-documentation.html
==============================================================================
--- websites/production/struts/content/docs/editing-the-documentation.html
(original)
+++ websites/production/struts/content/docs/editing-the-documentation.html Tue
Aug 25 07:18:20 2015
@@ -137,7 +137,7 @@ under the License.
<h2 id="EditingtheDocumentation-DocumentationWorkflow">Documentation
Workflow</h2>
-<p>Since projects like Struts wear our code "on our sleeve", there's always a
discussion over whether the website should represent the latest documentation
or the documentation for the "best available" release. Over the years, we've
done it one way and the another, and now we do it both ways <img
class="emoticon emoticon-smile"
src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/smile.png"
data-emoticon-name="smile" alt="(smile)"> </p>
+<p>Since projects like Struts wear our code "on our sleeve", there's always a
discussion over whether the website should represent the latest documentation
or the documentation for the "best available" release. Over the years, we've
done it one way and the another, and now we do it both ways <img
class="emoticon emoticon-smile"
src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/smile.png"
data-emoticon-name="smile" alt="(smile)"> </p>
<p>The latest documentation for Struts 2.0.x is at </p>
Modified: websites/production/struts/content/docs/element-annotation.html
==============================================================================
--- websites/production/struts/content/docs/element-annotation.html (original)
+++ websites/production/struts/content/docs/element-annotation.html Tue Aug 25
07:18:20 2015
@@ -138,15 +138,15 @@ 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>Sets the Element for type
conversion.</p>
<h2 id="ElementAnnotation-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 Element annotation must be applied at field or method level.</p>
<h2 id="ElementAnnotation-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">value</td><td colspan="1" rowspan="1">no</td><td colspan="1"
rowspan="1">java.lang.Object.class</td><td colspan="1" rowspan="1">The element
property value.</td></tr></tbody></table></p>
<h2 id="ElementAnnotation-Examples">Examples</h2>
Modified: websites/production/struts/content/docs/email-validator.html
==============================================================================
--- websites/production/struts/content/docs/email-validator.html (original)
+++ websites/production/struts/content/docs/email-validator.html Tue Aug 25
07:18:20 2015
@@ -139,16 +139,54 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="emailvalidator-Description">Description</h1>
-<div class="error"><span class="error">Error formatting macro: snippet:
java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p>EmailValidator checks that a given String field, if not empty, is a valid
email address.</p>
+
+<p>The regular expression used to validate that the string is an email address
is:</p>
+
+<p></p><pre>
+\\b^['_a-z0-9-\\+]<span style="text-decoration: underline;
">(\\.['_a-z0-9-\\+]</span>)<strong>@[a-z0-9-]<span style="text-decoration:
underline;
">(\\.[a-z0-9-]</span>)</strong>\\.([a-z]{2}|aero|arpa|asia|biz|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|nato|net|org|pro|tel|travel|xxx)$\\b
+</pre>
+
+<p>You can also specify expression, caseSensitive and trim params as a OGNL
expression, see the example below.</p>
<h1 id="emailvalidator-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></ul>
+Check also documentation of the RegexpValidator for more details - the
EmailValidator bases on it.
<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 ${regexExpression}, ${caseSensitiveExpression} and
${trimExpression} as an expression as this will turn into infinitive
loop!</p></div></div>
<h1 id="emailvalidator-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[
+ <!-- Plain Validator Syntax -->
+ <validators>
+ <validator type="email">
+ <param name="fieldName">myEmail</param>
+ <message>Must provide a valid email</message>
+ </validator>
+ </validators>
+
+ <!-- Field Validator Syntax -->
+ <field name="myEmail">
+ <field-validator type="email">
+ <message>Must provide a valid email</message>
+ </field-validator>
+ </field>
+
+ <!-- Field Validator Syntax with expressions -->
+ <!-- Only available when used with xml based configuration, if you want
to have the same
+ flexibility with annotations use @RegexFieldValidator instead
-->
+ <field name="myEmail">
+ <field-validator type="email">
+ <param
name="regexExpression">${emailPattern}</param> <!-- will
be evaluated as: String getEmailPattern() -->
+ <param
name="caseSensitiveExpression">${emailCaseSensitive}</param>
<!-- will be evaluated as: boolean getEmailCaseSensitive() -->
+ <param
name="trimExpression">${trimEmail}</param> <!-- will be
evaluated as: boolean getTrimEmail() -->
+ <message>Must provide a valid email</message>
+ </field-validator>
+ </field>
+]]></script>
+</div></div></div>
</div>
Modified: websites/production/struts/content/docs/emailvalidator-annotation.html
==============================================================================
--- websites/production/struts/content/docs/emailvalidator-annotation.html
(original)
+++ websites/production/struts/content/docs/emailvalidator-annotation.html Tue
Aug 25 07:18:20 2015
@@ -138,19 +138,23 @@ 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 field
is a valid e-mail address if it contains a non-empty String.</p>
<h2 id="EmailValidatorAnnotation-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="EmailValidatorAnnotation-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"> </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"> </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"> </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"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> </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></table></p>
<h2 id="EmailValidatorAnnotation-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[
+@EmailValidator(message = "Default message", key =
"i18n.key", shortCircuit = true)
+]]></script>
+</div></div></div>
</div>
Modified: websites/production/struts/content/docs/exception-interceptor.html
==============================================================================
--- websites/production/struts/content/docs/exception-interceptor.html
(original)
+++ websites/production/struts/content/docs/exception-interceptor.html Tue Aug
25 07:18:20 2015
@@ -138,19 +138,66 @@ 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 forms the core functionality of the exception handling
feature. Exception handling allows you to map
+an exception to a result code, just as if the action returned a result code
instead of throwing an unexpected
+exception. When an exception is encountered, it is wrapped with an
ExceptionHolder and pushed on the stack,
+providing easy access to the exception from within your result.
+</p>
+
+<p></p><p>
+<b>Note:</b> While you can configure exception mapping in your configuration
file at any point, the configuration
+will not have any effect if this interceptor is not in the interceptor stack
for your actions. It is recommended that
+you make this interceptor the first interceptor on the stack, ensuring that it
has full access to catch any
+exception, even those caused by other interceptors.
+</p>
+
<h2 id="ExceptionInterceptor-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>logEnabled (optional) - Should exceptions also
be logged? (boolean true|false)</li></ul><p></p><ul><li>logLevel (optional) -
what log level should we use (<code>trace, debug, info, warn, error,
fatal</code>)? - defaut is
<code>debug</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.ExceptionMappingInterceptor</code>.</li></ul><p></p>
+
+<p></p><p>
+The parameters above enables us to log all thrown exceptions with stacktace in
our own logfile,
+and present a friendly webpage (with no stacktrace) to the end user.
+</p>
+
<h2 id="ExceptionInterceptor-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>
+If you want to add custom handling for publishing the Exception, you may
override
+{@link #publishException(com.opensymphony.xwork2.ActionInvocation,
ExceptionHolder)}. The default implementation
+pushes the given ExceptionHolder on value stack. A custom implementation could
add additional logging etc.
+</p>
<h2 id="ExceptionInterceptor-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[
+<xwork>
+ <package name="default" extends="xwork-default">
+ <global-results>
+ <result name="error"
type="freemarker">error.ftl</result>
+ </global-results>
+
+ <global-exception-mappings>
+ <exception-mapping exception="java.lang.Exception"
result="error"/>
+ </global-exception-mappings>
+
+ <action name="test">
+ <interceptor-ref name="exception"/>
+ <interceptor-ref name="basicStack"/>
+ <exception-mapping
exception="com.acme.CustomException"
result="custom_error"/>
+ <result
name="custom_error">custom_error.ftl</result>
+ <result name="success"
type="freemarker">test.ftl</result>
+ </action>
+ </package>
+</xwork>
+]]></script>
+</div></div></div>
</div>
Modified: websites/production/struts/content/docs/execute-action.html
==============================================================================
--- websites/production/struts/content/docs/execute-action.html (original)
+++ websites/production/struts/content/docs/execute-action.html Tue Aug 25
07:18:20 2015
@@ -142,7 +142,7 @@ under the License.
<h2 id="ExecuteAction-Extensions">Extensions</h2>
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> Step </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Branching Action </p></th></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td></tr><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p> 1a </p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p> </p></th></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p> .1 </p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p> </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> </p></td></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p> 2a </p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p> </p></th></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p> .1
</p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <img class="emoticon emoticon-information"
src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/information.png"
data-emoticon-name="information" alt="(info)">
</p></td></tr></tbody></table></div>
+<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> Step </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Branching Action </p></th></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td></tr><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p> 1a </p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p> </p></th></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p> .1 </p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p> </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> </p></td></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p> 2a </p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p> </p></th></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p> .1
</p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <img class="emoticon emoticon-information"
src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/information.png"
data-emoticon-name="information" alt="(info)">
</p></td></tr></tbody></table></div>
<hr>
Modified: websites/production/struts/content/docs/expression-validator.html
==============================================================================
--- websites/production/struts/content/docs/expression-validator.html (original)
+++ websites/production/struts/content/docs/expression-validator.html Tue Aug
25 07:18:20 2015
@@ -140,15 +140,24 @@ under the License.
<div class="wiki-content">
<div id="ConfluenceContent">
<h1 id="expressionvalidator-Description">Description</h1>
-<div class="error"><span class="error">Error formatting macro: snippet:
java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p>A Non-Field Level validator that validates based on regular expression
supplied.</p>
<h1 id="expressionvalidator-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>expression - the Ognl expression to be evaluated against the
stack (Must evaluate to a Boolean)</li></ul>
<h1 id="expressionvalidator-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[
+<validators>
+ <validator type="expression">
+ <param name="expression"> .... </param>
+ <message>Failed to meet Ognl Expression .... </message>
+ </validator>
+</validators>
+]]></script>
+</div></div></div>
</div>
Modified:
websites/production/struts/content/docs/expressionvalidator-annotation.html
==============================================================================
--- websites/production/struts/content/docs/expressionvalidator-annotation.html
(original)
+++ websites/production/struts/content/docs/expressionvalidator-annotation.html
Tue Aug 25 07:18:20 2015
@@ -141,19 +141,23 @@ under the License.
<div id="ConfluenceContent">
<h1
id="ExpressionValidatorAnnotation-ExpressionValidatorAnnotation">ExpressionValidator
Annotation</h1>
-<div class="error"><span class="error">Error formatting macro: snippet:
java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p>This non-field level validator validates a supplied regular expression.</p>
<h2 id="ExpressionValidatorAnnotation-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="ExpressionValidatorAnnotation-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"> </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"> </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"> </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">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">
expression </td><td colspan="1" rowspan="1" class="confluenceTd"> yes </td><td
colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1"
rowspan="1" class="confluenceTd"> An OGNL expression that returns a boolean
value. </td></tr></table></p>
<h2 id="ExpressionValidatorAnnotation-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[
+@ExpressionValidator(message = "Default message", key =
"i18n.key", shortCircuit = true, expression = "an OGNL
expression" )
+]]></script>
+</div></div></div>
</div>
Modified: websites/production/struts/content/docs/fieldexpression-validator.html
==============================================================================
--- websites/production/struts/content/docs/fieldexpression-validator.html
(original)
+++ websites/production/struts/content/docs/fieldexpression-validator.html Tue
Aug 25 07:18:20 2015
@@ -140,14 +140,35 @@ under the License.
<div class="wiki-content">
<div id="ConfluenceContent">
<h1 id="fieldexpressionvalidator-Description">Description</h1>
-<div class="error"><span class="error">Error formatting macro: snippet:
java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<p>Validates a field using an OGNL expression.</p>
<h1 id="fieldexpressionvalidator-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>expression - The Ognl expression (must evaluate to a boolean)
which is to be evalidated the stack</li></ul>
<h1 id="fieldexpressionvalidator-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[
+<!-- Plain Validator Syntax -->
+<validators>
+ <!-- Plain Validator Syntax -->
+ <validator type="fieldexpression">
+ <param name="fieldName">myField</param>
+ <param name="expression"><![CDATA[#myCreditLimit
> #myGirfriendCreditLimit]]></param>
+ <message>My credit limit should be MORE than my
girlfriend</message>
+ <validator>
+
+ <!-- Field Validator Syntax -->
+ <field name="myField">
+ <field-validator type="fieldexpression">
+ <param
name="expression"><![CDATA[#myCreditLimit >
#myGirfriendCreditLimit]]></param>
+ <message>My credit limit should be MORE than my
girlfriend</message>
+ </field-validator>
+ </field>
+
+</vaidators>
+]]></script>
+</div></div></div>
</div>
Modified:
websites/production/struts/content/docs/fieldexpressionvalidator-annotation.html
==============================================================================
---
websites/production/struts/content/docs/fieldexpressionvalidator-annotation.html
(original)
+++
websites/production/struts/content/docs/fieldexpressionvalidator-annotation.html
Tue Aug 25 07:18:20 2015
@@ -139,19 +139,25 @@ 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>
+<p>This validator uses an OGNL expression to perform its validator.
+The error message will be added to the field if the expression returns
+false when it is evaluated against the value stack.</p>
<h2 id="FieldExpressionValidatorAnnotation-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="FieldExpressionValidatorAnnotation-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"> </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"> </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"> </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"> </td><td colspan="1" rowspan="1"
class="confluenceTd"> </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">
expression </td><td colspan="1" rowspan="1" class="confluenceTd"> yes </td><td
colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1"
rowspan="1" class="confluenceTd"> An OGNL expression that
returns a boolean value. </td></tr></table></p>
<h2 id="FieldExpressionValidatorAnnotation-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[
+@FieldExpressionValidator(message = "Default message", key =
"i18n.key", shortCircuit = true, expression = "an OGNL
expression")
+]]></script>
+</div></div></div>
</div>
Modified: websites/production/struts/content/docs/file-upload.html
==============================================================================
--- websites/production/struts/content/docs/file-upload.html (original)
+++ websites/production/struts/content/docs/file-upload.html Tue Aug 25
07:18:20 2015
@@ -139,11 +139,11 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><p>The Struts 2 framework provides
built-in support for processing file uploads that conform to <a shape="rect"
class="external-link" href="http://www.ietf.org/rfc/rfc1867.txt"
rel="nofollow">RFC 1867</a>, "Form-based File Upload in HTML". When correctly
configured the framework will pass uploaded file(s) into your Action class.
Support for individual and multiple file uploads are provided. When a file is
uploaded it will typically be stored in a temporary directory. Uploaded files
should be processed or moved by your Action class to ensure the data is not
lost. Be aware that servers may have a security policy in place that prohibits
you from writing to directories other than the temporary directory and the
directories that belong to your web application.</p><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1438274312148 {padding: 0px;}
-div.rbtoc1438274312148 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1438274312148 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1440486534735 {padding: 0px;}
+div.rbtoc1440486534735 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1440486534735 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1438274312148">
+/*]]>*/</style></p><div class="toc-macro rbtoc1440486534735">
<ul class="toc-indentation"><li><a shape="rect"
href="#FileUpload-Dependencies">Dependencies</a></li><li><a shape="rect"
href="#FileUpload-BasicUsage">Basic Usage</a></li><li><a shape="rect"
href="#FileUpload-UploadingMultipleFiles">Uploading Multiple Files</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#FileUpload-UploadingMultipleFilesusingArrays">Uploading Multiple Files
using Arrays</a></li><li><a shape="rect"
href="#FileUpload-UploadingMultipleFilesusingLists">Uploading Multiple Files
using Lists</a></li></ul>
</li><li><a shape="rect" href="#FileUpload-AdvancedConfiguration">Advanced
Configuration</a>
Modified: websites/production/struts/content/docs/freemarker.html
==============================================================================
--- websites/production/struts/content/docs/freemarker.html (original)
+++ websites/production/struts/content/docs/freemarker.html Tue Aug 25 07:18:20
2015
@@ -139,11 +139,11 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1438273919460 {padding: 0px;}
-div.rbtoc1438273919460 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1438273919460 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1440486090739 {padding: 0px;}
+div.rbtoc1440486090739 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1440486090739 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1438273919460">
+/*]]>*/</style></p><div class="toc-macro rbtoc1440486090739">
<ul class="toc-indentation"><li><a shape="rect"
href="#FreeMarker-GettingStarted">Getting Started</a></li><li><a shape="rect"
href="#FreeMarker-Servlet/JSPScopedObjects">Servlet / JSP Scoped Objects</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#FreeMarker-ApplicationScopeAttribute">Application Scope
Attribute</a></li><li><a shape="rect"
href="#FreeMarker-SessionScopeAttribute">Session Scope Attribute</a></li><li><a
shape="rect" href="#FreeMarker-RequestScopeAttribute">Request Scope
Attribute</a></li><li><a shape="rect"
href="#FreeMarker-RequestParameter">Request Parameter</a></li><li><a
shape="rect" href="#FreeMarker-Contextparameter">Context parameter</a></li></ul>
</li><li><a shape="rect" href="#FreeMarker-TemplateLoading">Template
Loading</a></li><li><a shape="rect"
href="#FreeMarker-VariableResolution">Variable Resolution</a></li><li><a
shape="rect" href="#FreeMarker-TagSupport">Tag Support</a></li><li><a
shape="rect" href="#FreeMarker-TipsandTricks">Tips and Tricks</a>
Modified: websites/production/struts/content/docs/home.html
==============================================================================
--- websites/production/struts/content/docs/home.html (original)
+++ websites/production/struts/content/docs/home.html Tue Aug 25 07:18:20 2015
@@ -125,7 +125,7 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
- <div id="ConfluenceContent"><p>Apache Struts 2 is an elegant,
extensible framework for building enterprise-ready Java web applications. <a
shape="rect" class="external-link"
href="http://struts.apache.org/downloads.html">Distributions of Struts 2</a>
are available as a free download under the Apache License.</p><ul><li>For more
about the Apache Struts project itself, visit the <a shape="rect"
class="external-link" href="http://struts.apache.org/">project web
site</a>.</li><li><strong>Quickstart</strong> with <a shape="rect"
href="struts-2-maven-archetypes.html">Struts 2 Maven
Archetypes</a>.</li><li>Struts 2 is extended using <a shape="rect"
href="plugins.html">Plugins</a>. A list of available plugins is available at
the <a shape="rect"
href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=27839934">Struts
2 Plugin Registry</a>.</li><li>Tired of XML-based configurations, or need some
extra agility? Try the <a shape="rect" href="convention-plugin.html">Co
nvention Plugin</a> or its RESTful cousin, the <a shape="rect"
href="rest-plugin.html">REST Plugin</a>.</li><li>Interested in books, articles,
and presentations about Struts? Check out some <a shape="rect"
href="other-resources.html">Other Resources</a>.</li><li>For other
community-supported Struts resources, visit the <a shape="rect"
class="external-link"
href="http://cwiki.apache.org/S2WIKI/welcome-to-apache-struts2.html">Struts 2
Wiki</a>.</li></ul><p>The contents of the Struts 2 documentation wiki (what
you're reading now) are distributed with each release, but maintained via the
on-line wiki.</p><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>Have a suggestion, correction, or
improvement? <a shape="rect" class="external-link"
href="http://cwiki.apache.org/confluence/display/WW/Home">Log in</a> and leave
a comment on the appropriate page or file a ticket against the Struts 2
documentation. <a shape="rect" href="contributors-guide.html">We're always
looking for help!</a></p></div></div><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"><p>We've started planning the next
version of Struts aka Struts 3 (or 2.5) which will break backward
compatibility, if you want to join please add your two cents <a shape="rect"
href="struts-next.html">here</a>.</p></div></div><h2
id="Home-GettingStarted">Getting Started</h2><p>The documentation is grouped
into four areas.</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect"
href="tutorials.html">Tutorials</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Our tutorials are designed to he
lp you get started with the framework ASAP. We offer an all-purpose
"Bootstrap" tutorial as well as specialty tutorials on portlets and database
access.</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a
shape="rect" href="guides.html">Guides</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Our in-depth technical guides focus on specific
components of the framework, such as the Core framework, Struts Tags, and
optional Extensions, as well as migrating from Struts 1 or WebWork
2.</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a
shape="rect" href="faqs.html">FAQs</a> and <a shape="rect"
href="cookbook.html">Cookbook</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Our FAQs and Cookbook examples provide a wide range of
rapid-fire "HOWTOs" in question-and-answer format.</p></td></tr><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect"
href="security-bulletins.html">Security Bulletins</a></p></th
><td colspan="1" rowspan="1" class="confluenceTd"><p>Our security bulletins
>explain any security issues and their solutions</p></td></tr><tr><th
>colspan="1" rowspan="1" class="confluenceTh"><p><img class="emoticon
>emoticon-yellow-star"
>src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/star_yellow.png"
> data-emoticon-name="yellow-star" alt="(star)"> <a shape="rect"
>href="other-resources.html">Other Resources</a></p></th><td colspan="1"
>rowspan="1" class="confluenceTd"><p>Books, articles, and presentations about
>Struts 2.</p></td></tr></tbody></table></div><p></p><h2
>id="Home-CommunityWiki">Community Wiki</h2><p>The <a shape="rect"
>href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=14079">Struts
> 2 Community Wiki</a> is an additional resource. It is not distributed with
>Struts 2, and contributions to the community wiki do not require a
>CLA.</p><h2 id="Home-QuickLinks">Quick Links</h2><ul><li><a s
hape="rect" class="external-link" href="http://struts.apache.org/">Apache
Struts Home</a></li><li><a shape="rect" class="external-link"
href="http://struts.apache.org/downloads.html">Distributions</a></li><li><a
shape="rect" class="external-link"
href="http://struts.apache.org/faqs.html">Project FAQ</a></li><li><a
shape="rect" class="external-link"
href="http://struts.apache.org/mail.html">Mailing lists</a></li><li><a
shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW">Issue Tracking
(JIRA)</a></li><li><a shape="rect" class="external-link"
href="http://cwiki.apache.org/S2WIKI/welcome-to-apache-struts2.html">Struts 2
Wiki space</a></li><li><a shape="rect" class="external-link"
href="http://husted.com/central/" rel="nofollow">Struts
Central</a></li></ul><h2 id="Home-Next:">Next: <a shape="rect"
href="tutorials.html">Tutorials</a></h2></div>
+ <div id="ConfluenceContent"><p>Apache Struts 2 is an elegant,
extensible framework for building enterprise-ready Java web applications. <a
shape="rect" class="external-link"
href="http://struts.apache.org/downloads.html">Distributions of Struts 2</a>
are available as a free download under the Apache License.</p><ul><li>For more
about the Apache Struts project itself, visit the <a shape="rect"
class="external-link" href="http://struts.apache.org/">project web
site</a>.</li><li><strong>Quickstart</strong> with <a shape="rect"
href="struts-2-maven-archetypes.html">Struts 2 Maven
Archetypes</a>.</li><li>Struts 2 is extended using <a shape="rect"
href="plugins.html">Plugins</a>. A list of available plugins is available at
the <a shape="rect"
href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=27839934">Struts
2 Plugin Registry</a>.</li><li>Tired of XML-based configurations, or need some
extra agility? Try the <a shape="rect" href="convention-plugin.html">Co
nvention Plugin</a> or its RESTful cousin, the <a shape="rect"
href="rest-plugin.html">REST Plugin</a>.</li><li>Interested in books, articles,
and presentations about Struts? Check out some <a shape="rect"
href="other-resources.html">Other Resources</a>.</li><li>For other
community-supported Struts resources, visit the <a shape="rect"
class="external-link"
href="http://cwiki.apache.org/S2WIKI/welcome-to-apache-struts2.html">Struts 2
Wiki</a>.</li></ul><p>The contents of the Struts 2 documentation wiki (what
you're reading now) are distributed with each release, but maintained via the
on-line wiki.</p><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>Have a suggestion, correction, or
improvement? <a shape="rect" class="external-link"
href="http://cwiki.apache.org/confluence/display/WW/Home">Log in</a> and leave
a comment on the appropriate page or file a ticket against the Struts 2
documentation. <a shape="rect" href="contributors-guide.html">We're always
looking for help!</a></p></div></div><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"><p>We've started planning the next
version of Struts aka Struts 3 (or 2.5) which will break backward
compatibility, if you want to join please add your two cents <a shape="rect"
href="struts-next.html">here</a>.</p></div></div><h2
id="Home-GettingStarted">Getting Started</h2><p>The documentation is grouped
into four areas.</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect"
href="tutorials.html">Tutorials</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Our tutorials are designed to he
lp you get started with the framework ASAP. We offer an all-purpose
"Bootstrap" tutorial as well as specialty tutorials on portlets and database
access.</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a
shape="rect" href="guides.html">Guides</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Our in-depth technical guides focus on specific
components of the framework, such as the Core framework, Struts Tags, and
optional Extensions, as well as migrating from Struts 1 or WebWork
2.</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a
shape="rect" href="faqs.html">FAQs</a> and <a shape="rect"
href="cookbook.html">Cookbook</a></p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p>Our FAQs and Cookbook examples provide a wide range of
rapid-fire "HOWTOs" in question-and-answer format.</p></td></tr><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect"
href="security-bulletins.html">Security Bulletins</a></p></th
><td colspan="1" rowspan="1" class="confluenceTd"><p>Our security bulletins
>explain any security issues and their solutions</p></td></tr><tr><th
>colspan="1" rowspan="1" class="confluenceTh"><p><img class="emoticon
>emoticon-yellow-star"
>src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/star_yellow.png"
> data-emoticon-name="yellow-star" alt="(star)"> <a shape="rect"
>href="other-resources.html">Other Resources</a></p></th><td colspan="1"
>rowspan="1" class="confluenceTd"><p>Books, articles, and presentations about
>Struts 2.</p></td></tr></tbody></table></div><p></p><h2
>id="Home-CommunityWiki">Community Wiki</h2><p>The <a shape="rect"
>href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=14079">Struts
> 2 Community Wiki</a> is an additional resource. It is not distributed with
>Struts 2, and contributions to the community wiki do not require a
>CLA.</p><h2 id="Home-QuickLinks">Quick Links</h2><ul><li><a s
hape="rect" class="external-link" href="http://struts.apache.org/">Apache
Struts Home</a></li><li><a shape="rect" class="external-link"
href="http://struts.apache.org/downloads.html">Distributions</a></li><li><a
shape="rect" class="external-link"
href="http://struts.apache.org/faqs.html">Project FAQ</a></li><li><a
shape="rect" class="external-link"
href="http://struts.apache.org/mail.html">Mailing lists</a></li><li><a
shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW">Issue Tracking
(JIRA)</a></li><li><a shape="rect"
href="https://cwiki.apache.org/confluence/display/WW/Home">Struts 2 Wiki
space</a></li></ul><h2 id="Home-Next:">Next: <a shape="rect"
href="tutorials.html">Tutorials</a></h2></div>
</div>
<div class="tabletitle">