Author: lukaszlenart
Date: Wed Jan 27 09:26:50 2016
New Revision: 978711
Log:
Updates production
Modified:
websites/production/struts/content/docs/action-configuration.html
websites/production/struts/content/docs/action.html
websites/production/struts/content/docs/actionmapper.html
websites/production/struts/content/docs/ajax-and-javascript-recipes.html
websites/production/struts/content/docs/append.html
websites/production/struts/content/docs/bean.html
websites/production/struts/content/docs/building-struts-2-fast-track-release.html
websites/production/struts/content/docs/building-struts-2-normal-release.html
websites/production/struts/content/docs/building-struts-annotations.html
websites/production/struts/content/docs/building-struts-master.html
websites/production/struts/content/docs/cdi-plugin.html
websites/production/struts/content/docs/client-side-validation.html
websites/production/struts/content/docs/convention-plugin.html
websites/production/struts/content/docs/cssxhtml-theme.html
websites/production/struts/content/docs/date.html
websites/production/struts/content/docs/deprecationinterceptor.html
websites/production/struts/content/docs/file-upload.html
websites/production/struts/content/docs/freemarker.html
websites/production/struts/content/docs/generator.html
websites/production/struts/content/docs/guides.html
websites/production/struts/content/docs/interceptors.html
websites/production/struts/content/docs/iterator.html
websites/production/struts/content/docs/localization.html
websites/production/struts/content/docs/merge.html
websites/production/struts/content/docs/one-time-steps.html
websites/production/struts/content/docs/property.html
websites/production/struts/content/docs/rest-plugin.html
websites/production/struts/content/docs/result-configuration.html
websites/production/struts/content/docs/s2-026.html
websites/production/struts/content/docs/sample-announcements.html
websites/production/struts/content/docs/security.html
websites/production/struts/content/docs/set.html
websites/production/struts/content/docs/sort.html
websites/production/struts/content/docs/struts-2-blank-archetype.html
websites/production/struts/content/docs/struts-2-maven-archetypes.html
websites/production/struts/content/docs/struts-2-spring-2-jpa-ajax.html
websites/production/struts/content/docs/struts-defaultxml.html
websites/production/struts/content/docs/struts-next.html
websites/production/struts/content/docs/subset.html
websites/production/struts/content/docs/text.html
websites/production/struts/content/docs/textfield.html
websites/production/struts/content/docs/tiles-2-plugin.html
websites/production/struts/content/docs/tutorials.html
websites/production/struts/content/docs/type-conversion.html
websites/production/struts/content/docs/url.html
websites/production/struts/content/docs/using-freemarker-templates.html
websites/production/struts/content/docs/validation.html
websites/production/struts/content/docs/version-notes-25.html
websites/production/struts/content/docs/webxml.html
websites/production/struts/content/docs/wildcard-method-selection.html
websites/production/struts/content/docs/xhtml-form-template.html
websites/production/struts/content/docs/xhtml-theme.html
Modified: websites/production/struts/content/docs/action-configuration.html
==============================================================================
--- websites/production/struts/content/docs/action-configuration.html (original)
+++ websites/production/struts/content/docs/action-configuration.html Wed Jan
27 09:26:50 2016
@@ -139,12 +139,14 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><p>The action mappings are the basic
"unit-of-work" in the framework. Essentially, the action maps an identifier to
a handler class. When a request matches the action's name, the framework uses
the mapping to determine how to process the request.</p><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1443119320931 {padding: 0px;}
-div.rbtoc1443119320931 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1443119320931 li {margin-left: 0px;padding-left: 0px;}
-
-/*]]>*/</style></p><div class="toc-macro rbtoc1443119320931">
-<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-ActionMappings">Action Mappings</a></li><li><a
shape="rect" href="#ActionConfiguration-ActionNames">Action
Names</a></li><li><a shape="rect"
href="#ActionConfiguration-ActionMethods">Action Methods</a></li><li><a
shape="rect" href="#ActionConfiguration-WildcardMethod">Wildcard
Method</a></li><li><a shape="rect"
href="#ActionConfiguration-DynamicMethodInvocation">Dynamic Method
Invocation</a></li><li><a shape="rect"
href="#ActionConfiguration-ActionSupportDefault">ActionSupport
Default</a></li><li><a shape="rect"
href="#ActionConfiguration-Post-BackDefault">Post-Back Default</a></li><li><a
shape="rect" href="#ActionConfiguration-ActionDefault">Action Default</a>
+div.rbtoc1453884195503 {padding: 0px;}
+div.rbtoc1453884195503 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1453884195503 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1453884195503">
+<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-ActionMappings">Action Mappings</a></li><li><a
shape="rect" href="#ActionConfiguration-ActionNames">Action
Names</a></li><li><a shape="rect"
href="#ActionConfiguration-ActionMethods">Action Methods</a></li><li><a
shape="rect" href="#ActionConfiguration-WildcardMethod">Wildcard
Method</a></li><li><a shape="rect"
href="#ActionConfiguration-DynamicMethodInvocation">Dynamic Method
Invocation</a>
+<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-StrictDMI">Strict DMI</a></li><li><a shape="rect"
href="#ActionConfiguration-StrictMethodInvocation">Strict Method
Invocation</a></li></ul>
+</li><li><a shape="rect"
href="#ActionConfiguration-ActionSupportDefault">ActionSupport
Default</a></li><li><a shape="rect"
href="#ActionConfiguration-Post-BackDefault">Post-Back Default</a></li><li><a
shape="rect" href="#ActionConfiguration-ActionDefault">Action Default</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionConfiguration-WildcardDefault">Wildcard Default</a></li></ul>
</li><li><a shape="rect" href="#ActionConfiguration-Next:">Next: Wildcard
Mappings</a></li></ul>
</div><h2 id="ActionConfiguration-ActionMappings">Action Mappings</h2><p>The
action mapping can specify a set of result types, a set of exception handlers,
and an interceptor stack. Only the <code>name</code> attribute is required. The
other attributes can also be provided at package scope.</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>A Logon Action</b></div><div
class="codeContent panelContent pdl">
@@ -161,7 +163,7 @@ div.rbtoc1443119320931 li {margin-left:
@Result(name="input", location="/Logon.jsp")
)
public class Logon {</pre>
-</div></div><p> </p><h2 id="ActionConfiguration-ActionNames">Action
Names</h2><p>In a web application, the <code>name</code> attribute is matched
as part of the location requested by a browser (or other HTTP client). The
framework will drop the host and application name and the extension and match
what's in the middle: the action name. So, a request for <code><a shape="rect"
class="external-link"
href="http://www.planetstruts.org/struts2-mailreader/Welcome.action"
rel="nofollow">http://www.planetstruts.org/struts2-mailreader/Welcome.action</a></code>
will map to the <code>Welcome</code> action.</p><p>Within an application a
link to an action is usually generated by a Struts Tag. The tag can specify the
action by name, and the framework will render the default extension and
anything else that is needed. Forms may also submit directly to a Struts Action
name (rather than a "raw" URI).</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl
" style="border-bottom-width: 1px;"><b>A Hello Form</b></div><div
class="codeContent panelContent pdl">
+</div></div><h2 id="ActionConfiguration-ActionNames">Action Names</h2><p>In a
web application, the <code>name</code> attribute is matched as part of the
location requested by a browser (or other HTTP client). The framework will drop
the host and application name and the extension and match what's in the middle:
the action name. So, a request for <code><a shape="rect" class="external-link"
href="http://www.planetstruts.org/struts2-mailreader/Welcome.action"
rel="nofollow">http://www.planetstruts.org/struts2-mailreader/Welcome.action</a></code>
will map to the <code>Welcome</code> action.</p><p>Within an application a
link to an action is usually generated by a Struts Tag. The tag can specify the
action by name, and the framework will render the default extension and
anything else that is needed. Forms may also submit directly to a Struts Action
name (rather than a "raw" URI).</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="bord
er-bottom-width: 1px;"><b>A Hello Form</b></div><div class="codeContent
panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><s:form action="Hello">
<s:textfield label="Please enter your name" name="name"/>
<s:submit/>
@@ -182,16 +184,15 @@ public class CrudAction {
@Action("delete")
public String delete() {
...
-
</pre>
-</div></div><p> </p><h2 id="ActionConfiguration-WildcardMethod">Wildcard
Method</h2><p>Many times, a set of action mappings will share a common pattern.
For example, all your <code>edit</code> actions might start with the word
"edit", and call the <code>edit</code> method on the Action class. The
<code>delete</code> actions might use the same pattern, but call the
<code>delete</code> method instead.</p><p>Rather than code a separate mapping
for each action class that uses this pattern, you can write it once as a
wildcard mapping.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div><h2 id="ActionConfiguration-WildcardMethod">Wildcard
Method</h2><p>Many times, a set of action mappings will share a common pattern.
For example, all your <code>edit</code> actions might start with the word
"edit", and call the <code>edit</code> method on the Action class. The
<code>delete</code> actions might use the same pattern, but call the
<code>delete</code> method instead.</p><p>Rather than code a separate mapping
for each action class that uses this pattern, you can write it once as a
wildcard mapping.</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;"><action name="*Crud" class="example.Crud"
method="{1}">
...
</pre>
</div></div><p>Here, a reference to "editCrud" will call the <code>edit</code>
method on an instance of the Crud Action class. Likewise, a reference to
"deleteCrud" will call the <code>delete</code> method instead.</p><p>Another
common approach is to postfix the method name and set it off with an
exclamation point (aka "bang"), underscore, or other special
character.</p><ul><li>"action=Crud_input"</li><li>"action=Crud_delete"</li></ul><p>To
use a postfix wildcard, just move the asterisk and add an underscore.</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;"><action name="Crud_*" class="example.Crud"
method="{1}">
</pre>
-</div></div><p>From the framework's perspective, a wildcard mapping creates a
new "virtual" mapping with all the same attributes as a conventional, static
mapping. As a result, you can use the expanded wildcard name as the name of
validation, type conversion, and message resource files, just as if it were an
Action name (which it
is!).</p><ul><li><code>Crud_input-validation.xml</code></li><li><code>Crud_delete-conversion.xml</code></li></ul><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>If Wildcard Method mapping uses a
"!" in the action name, the Wildcard Method will overlap with another flexible
approach to mapping, <a shape="rect" href="action-configuration.html">Dynamic
Method Invocation</a>. To use action names that include the "!" character, set
<code>struts.enable.DynamicMethodInvocation</code> to <
code>FALSE</code> in the application configuration.</p></div></div><h2
id="ActionConfiguration-DynamicMethodInvocation">Dynamic Method
Invocation</h2><p>There's a feature embedded in WebWork 2 that lets the "!"
(bang) character invoke a method other than <code>execute</code>. In WebWork,
it doesn't really have a name. During the S2 discussions, we coined the term
"dynamic method invocation" to describe how WW/S2 use the bang
notation.</p><p>Dynamic Method Invocation (DMI) will use the string following a
"!" character in an action name as the name of a method to invoke (instead of
<code>execute</code>). A reference to "<code>Category!create.action</code>",
says to use the "Category" action mapping, but call the <code>create</code>
method instead.</p><p>Another way to use DMI is to provide HTTP parameters
prefixed with "<code>method:</code>". For example in the URL it could be
"<code>Category.action?method:create=foo</code>", the parameter value is
ignored. In POST-Requests that can b
e used e.g. with a hidden parameter (<code><s:hidden name="method:create"
value="foo" /></code>) or along with a button (<code><s:submit
method="create" /></code>).</p><p> </p><p>For Struts 2, we added a
switch to disable DMI for two reasons. First, DMI can cause security issues if
POJO actions are used. Second, DMI overlaps with the Wildcard Method feature
that we brought over from Struts 1 (and from Cocoon before that). If you have
security concerns, or would like to use the "!" character with Wildcard Method
actions, then set <code>struts.enable.DynamicMethodInvocation</code> to
<code>FALSE</code> in the application configuration.</p><p>The framework does
support DMI, just like WebWork 2, but there are problems with way DMI is
implemented. Essentially, the code scans the action name for a "!" character,
and finding one, tricks the framework into invoking the other method instead of
<code>execute</code>. The other method is invoked, but it uses the same
configurat
ion as the <code>execute</code> method, including validations. The framework
"believes" it is invoking the <code>Category</code> action with the
<code>execute</code> method.</p><p>The Wildcard Method feature is implemented
differently. When a Wildcard Method action is invoked, the framework acts as if
the matching action had been hardcoded in the configuration. The framework
"believes" it's executing the action <code>Category!create</code> and "knows"
it is executing the <code>create</code> method of the corresponding Action
class. Accordingly, we can add for a Wildcard Method action mapping its own
validations, message resources, and type converters, just like a conventional
action mapping. For this reason, the <a shape="rect"
href="action-configuration.html">Wildcard Method</a> is preferred.</p><p>In
Struts 2.3, an option was added to restrict the methods that DMI can invoke.
First, set the attribute <code>strict-method-invocation="true"</code> on your
<code><package></code>
element. This tells Struts to reject any method that is not explicitly
allowed via either the <code>method</code> attribute (including wildcards) or
the <code><allowed-methods></code> tag. Then specify
<code><allowed-methods></code> as a comma-separated list of method names
in your <code><action></code>. (If you specify a <code>method</code>
attribute for your action, you do not need to list it in
<code><allowed-methods></code>.)</p><p>Note that you can specify
<code><allowed-methods></code> even without
<code>strict-method-invocation</code>. This restricts access only for the
specific actions that have <code><allowed-methods></code>.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Example
struts.xml</b></div><div class="codeContent panelContent pdl">
+</div></div><p>From the framework's perspective, a wildcard mapping creates a
new "virtual" mapping with all the same attributes as a conventional, static
mapping. As a result, you can use the expanded wildcard name as the name of
validation, type conversion, and message resource files, just as if it were an
Action name (which it
is!).</p><ul><li><code>Crud_input-validation.xml</code></li><li><code>Crud_delete-conversion.xml</code></li></ul><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>If Wildcard Method mapping uses a
"!" in the action name, the Wildcard Method will overlap with another flexible
approach to mapping, <a shape="rect" href="action-configuration.html">Dynamic
Method Invocation</a>. To use action names that include the "!" character, set
<code>struts.enable.DynamicMethodInvocation</code> to <
code>FALSE</code> in the application configuration.</p></div></div><h2
id="ActionConfiguration-DynamicMethodInvocation">Dynamic Method
Invocation</h2><p>There's a feature embedded in Struts 2 that lets the "!"
(bang) character invoke a method other than <code>execute</code>. It is called
"Dynamic Method Invocation" aka DMI.</p><p>DMI will use the string following a
"!" character in an action name as the name of a method to invoke (instead of
<code>execute</code>). A reference to "<code>Category!create.action</code>",
says to use the "Category" action mapping, but call the <code>create</code>
method instead.</p><p>Another way to use DMI is to provide HTTP parameters
prefixed with "<code>method:</code>". For example in the URL it could be
"<code>Category.action?method:create=foo</code>", the parameter value is
ignored. In POST-Requests that can be used e.g. with a hidden parameter
(<code><s:hidden name="method:create" value="foo" /></code>) or along
with a button (<code><s:su
bmit method="create" /></code>).</p><p>For Struts 2, we added a switch to
disable DMI for two reasons. First, DMI can cause security issues if POJO
actions are used. Second, DMI overlaps with the Wildcard Method feature that we
brought over from Struts 1 (and from Cocoon before that). If you have security
concerns, or would like to use the "!" character with Wildcard Method actions,
then set <code>struts.enable.DynamicMethodInvocation</code> to
<code>FALSE</code> in the application configuration.</p><p>The framework does
support DMI, but there are problems with way DMI is implemented. Essentially,
the code scans the action name for a "!" character, and finding one, tricks the
framework into invoking the other method instead of <code>execute</code>. The
other method is invoked, but it uses the same configuration as the
<code>execute</code> method, including validations. The framework "believes" it
is invoking the <code>Category</code> action with the <code>execute</code>
method.</
p><p>The Wildcard Method feature is implemented differently. When a Wildcard
Method action is invoked, the framework acts as if the matching action had been
hardcoded in the configuration. The framework "believes" it's executing the
action <code>Category!create</code> and "knows" it is executing the
<code>create</code> method of the corresponding Action class. Accordingly, we
can add for a Wildcard Method action mapping its own validations, message
resources, and type converters, just like a conventional action mapping. For
this reason, the <a shape="rect" href="action-configuration.html">Wildcard
Method</a> is preferred.</p><h3 id="ActionConfiguration-StrictDMI">Strict
DMI</h3><p>In Struts 2.3, an option was added to restrict the methods that DMI
can invoke. First, set the attribute
<code>strict-method-invocation="true"</code> on your
<code><package></code> element. This tells Struts to reject any method
that is not explicitly allowed via either the <code>method</code> attrib
ute (including wildcards) or the <code><allowed-methods></code> tag.
Then specify <code><allowed-methods></code> as a comma-separated list of
method names in your <code><action></code>. (If you specify a
<code>method</code> attribute for your action, you do not need to list it in
<code><allowed-methods></code>.)</p><p>Note that you can specify
<code><allowed-methods></code> even without
<code>strict-method-invocation</code>. This restricts access only for the
specific actions that have <code><allowed-methods></code>.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Example
struts.xml</b></div><div class="codeContent panelContent pdl">
<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
@@ -215,7 +216,39 @@ public class CrudAction {
</package>
</struts>
</pre>
-</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>Strict DMI doesn't work with the
Convention Plugin yet!</p></div></div><h2
id="ActionConfiguration-ActionSupportDefault">ActionSupport Default</h2><p>If
the class attribute in an action mapping is left blank, the
<code>com.opensymphony.xwork2.ActionSupport</code> class is used as a
default.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+</div></div><h3 id="ActionConfiguration-StrictMethodInvocation">Strict Method
Invocation</h3><p>In Struts 2.5 the Strict DMI was extended and it's called
"Strict Method Invocation" aka SMI. You can imagine that the DMI is a "border
police", where SMI is a "tax police" and keeps eye on internals. With this
version SMI is enabled by default (<code>strict-method-invocation</code>
attribute is set to <code>true</code> by default
in <code>struts-default</code> package), you have option to disable it per
package - there is no global switch to disable SMI for the whole application.
To gain advantage of new configuration option please use the latest DTD
definition:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Struts
2.5 DTD</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE struts PUBLIC
+ "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
+ "http://struts.apache.org/dtds/struts-2.5.dtd">
+<struts>
+...
+</struts></pre>
+</div></div><p>SMI works in the following way:</p><ul style="list-style-type:
square;"><li><code><allowed-methods></code> /
<code>@AllowedMethods</code> is defined per action - SMI works without
switching it on but just for those actions (plus adding
<code><global-allowed-methods/></code>)</li><li>SMI is enabled but no
<code><allowed-methods></code> /
<code>@AllowedMethods</code> are defined - SMI works but only with
<code><global-allowed-methods/></code></li><li><span style="line-height:
1.42857;">SMI is disabled - call to any action method is allowed
( <code>Regex: .*</code> )</span></li></ul><p><span
style="line-height: 1.42857;">You can configure SMI per
<code><action/></code> usinf <code><allowed-methods/></code>
tag or via <code>@AllowedMethod</code> annotation plus using
per <code><package/></code> <code><global-allowed-methods/></code>,
see the examples below:</span></p><div cla
ss="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>SMI via
struts.xml</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><package ...>
+ ...
+
<global-allowed-methods>execute,input,back,cancel,browse</global-allowed-methods>
+ ...
+ 
+ <action name="Bar">
+ <allowed-methods>foo,bar</allowed-methods>
+ </action>
+ 
+ ...
+</package>
+
+</pre>
+</div></div><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>SMI via
annotation on action class level</b></div><div class="codeContent panelContent
pdl">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">@AllowedMethods("end")
+public class ClassLevelAllowedMethodsAction {
+ public String execute() {
+ return ...
+ }
+}</pre>
+</div></div><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>SMI via
annotation on package level (in package-info.java)</b></div><div
class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">@org.apache.struts2.convention.annotation.AllowedMethods("home,start")
+package org.apache.struts2.convention.actions.allowedmethods;</pre>
+</div></div><p>Allowed methods can be defined as:</p><ul
style="list-style-type: square;"><li>literals
ie. <code>execute,cancel</code></li><li>patterns when using with wildcard
mapping, i.e <code><action ... method="do{2}"/></code></li><li>RegExs
using <code>regex:</code> prefix,
ie: <code><global-allowed-methods>execute,input,cancel,regex:user([A-Z]*)</global-allowed-methods></code></li></ul><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 be aware when using your
own <code>Configurationprovider</code> that the logic to set allowed methods is
defined in built-in providers - <code>XmlConfigurationProvider</code> and
<code>PackageBasedActionConfigBuilder</code> - and you must replicate such
logic in your code as by default only <code>execute</code> method is allowed,
eve
n when SMI is disabled.</p></div></div><h2
id="ActionConfiguration-ActionSupportDefault">ActionSupport Default</h2><p>If
the class attribute in an action mapping is left blank, the
<code>com.opensymphony.xwork2.ActionSupport</code> class is used as a
default.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><action name="Hello">
// ...
</action>
Modified: websites/production/struts/content/docs/action.html
==============================================================================
--- websites/production/struts/content/docs/action.html (original)
+++ websites/production/struts/content/docs/action.html Wed Jan 27 09:26:50 2016
@@ -166,7 +166,7 @@ Is "myAction" null outside the tag? fals
<h2 id="action-Parameters">Parameters</h2>
-<p><table width="100%"><tr><td colspan="6" rowspan="1"><h4>Dynamic Attributes
Allowed:</h4> false</td></tr><tr><td colspan="6"
rowspan="1"> </td></tr><tr><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Name</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Required</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Default</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Evaluated</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Type</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Description</h4></th></tr><tr><td align="left" colspan="1"
rowspan="1" valign="top">executeResult</td><td align="left" colspan="1"
rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">Boolean</td><td align="left" colspan="1" rowspan="1" valign=
"top">Whether the result of this action (probably a view) should be
executed/rendered</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">flush</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">true</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">Boolean</td><td align="left" colspan="1" rowspan="1"
valign="top">Whether the writer should be flush upon end of action component
tag, default to true</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">id</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Deprecated. Use 'var' instead</td></tr><tr><td align="left
" colspan="1" rowspan="1" valign="top">ignoreContextParams</td><td
align="left" colspan="1" rowspan="1" valign="top">false</td><td align="left"
colspan="1" rowspan="1" valign="top">false</td><td align="left" colspan="1"
rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">Boolean</td><td align="left" colspan="1" rowspan="1"
valign="top">Whether the request parameters are to be included when the action
is invoked</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">name</td><td align="left" colspan="1" rowspan="1"
valign="top"><strong>true</strong></td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Name of the action to be executed (without the extension suffix
eg. .action)</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">nam
espace</td><td align="left" colspan="1" rowspan="1" valign="top">false</td><td
align="left" colspan="1" rowspan="1" valign="top">namespace from where tag is
used</td><td align="left" colspan="1" rowspan="1" valign="top">false</td><td
align="left" colspan="1" rowspan="1" valign="top">String</td><td align="left"
colspan="1" rowspan="1" valign="top">Namespace for action to
call</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">rethrowException</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">Boolean</td><td align="left" colspan="1" rowspan="1"
valign="top">Whether an exception should be rethrown, if the target action
throws an exception</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">var</td><td align="left" colspan="1" rowspan="1"
valign="top">false</t
d><td align="left" colspan="1" rowspan="1" valign="top"></td><td align="left"
colspan="1" rowspan="1" valign="top">false</td><td align="left" colspan="1"
rowspan="1" valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Name used to reference the value pushed into the Value
Stack</td></tr></table></p>
+<p><table width="100%"><tr><td colspan="6" rowspan="1"><h4>Dynamic Attributes
Allowed:</h4> false</td></tr><tr><td colspan="6"
rowspan="1"> </td></tr><tr><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Name</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Required</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Default</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Evaluated</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Type</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Description</h4></th></tr><tr><td align="left" colspan="1"
rowspan="1" valign="top">executeResult</td><td align="left" colspan="1"
rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">Boolean</td><td align="left" colspan="1" rowspan="1" valign=
"top">Whether the result of this action (probably a view) should be
executed/rendered</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">flush</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">true</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">Boolean</td><td align="left" colspan="1" rowspan="1"
valign="top">Whether the writer should be flush upon end of action component
tag, default to true</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">ignoreContextParams</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">Boolean</td><td align="left" colspan="1" rowspan="1"
valign="top">Whether the request parameters are
to be included when the action is invoked</td></tr><tr><td align="left"
colspan="1" rowspan="1" valign="top">name</td><td align="left" colspan="1"
rowspan="1" valign="top"><strong>true</strong></td><td align="left" colspan="1"
rowspan="1" valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Name of the action to be executed (without the extension suffix
eg. .action)</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">namespace</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">namespace from where tag is used</td><td align="left" colspan="1"
rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Namespace for action to call</td></tr><tr><td align="left" co
lspan="1" rowspan="1" valign="top">rethrowException</td><td align="left"
colspan="1" rowspan="1" valign="top">false</td><td align="left" colspan="1"
rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">Boolean</td><td align="left" colspan="1" rowspan="1"
valign="top">Whether an exception should be rethrown, if the target action
throws an exception</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">var</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Name used to reference the value pushed into the Value
Stack</td></tr></table></p>
<h2 id="action-Examples">Examples</h2>
Modified: websites/production/struts/content/docs/actionmapper.html
==============================================================================
--- websites/production/struts/content/docs/actionmapper.html (original)
+++ websites/production/struts/content/docs/actionmapper.html Wed Jan 27
09:26:50 2016
@@ -139,11 +139,11 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1440488860740 {padding: 0px;}
-div.rbtoc1440488860740 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1440488860740 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1453884194236 {padding: 0px;}
+div.rbtoc1453884194236 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1453884194236 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1440488860740">
+/*]]>*/</style></p><div class="toc-macro rbtoc1453884194236">
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionMapper-Description">Description</a></li><li><a shape="rect"
href="#ActionMapper-DefaultActionMapper">DefaultActionMapper</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionMapper-Methodprefix">Method prefix</a></li><li><a shape="rect"
href="#ActionMapper-Actionprefix">Action prefix</a></li></ul>
</li><li><a shape="rect" href="#ActionMapper-CustomActionMapper">Custom
ActionMapper</a></li><li><a shape="rect"
href="#ActionMapper-CompositeActionMapper">CompositeActionMapper</a></li><li><a
shape="rect"
href="#ActionMapper-PrefixBasedActionMapper">PrefixBasedActionMapper</a></li><li><a
shape="rect"
href="#ActionMapper-ActionMapperandActionMappingobjects">ActionMapper and
ActionMapping objects</a>
Modified:
websites/production/struts/content/docs/ajax-and-javascript-recipes.html
==============================================================================
--- websites/production/struts/content/docs/ajax-and-javascript-recipes.html
(original)
+++ websites/production/struts/content/docs/ajax-and-javascript-recipes.html
Wed Jan 27 09:26:50 2016
@@ -142,11 +142,11 @@ under the License.
<p>The Dojo plugin will be deprecated on Struts 2.1</p></div></div>
<style type="text/css">/*<![CDATA[*/
-div.rbtoc1440489201239 {padding: 0px;}
-div.rbtoc1440489201239 ul {list-style: none;margin-left: 0px;padding-left:
20px;}
-div.rbtoc1440489201239 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1453884465157 {padding: 0px;}
+div.rbtoc1453884465157 ul {list-style: none;margin-left: 0px;padding-left:
20px;}
+div.rbtoc1453884465157 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1440489201239">
+/*]]>*/</style><div class="toc-macro rbtoc1453884465157">
<ul class="toc-indentation"><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Common">Common</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Requests">Requests</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Requestistriggeredbyatopic">Request is
triggered by a topic</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Attachedtoanevent">Attached to an
event</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Attachedtoaneventonmultiplesources">Attached to
an event on multiple sources</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Attachedtomultipleeventsonmultiplesources">Attached
to multiple events on multiple sources</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Updatetargetelementwithcontentreturnedfromurl">Update
target element with content returned from url</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Updatemultipletargetelementswithcontentreturnedfromurl">Update
multiple target elements with content returned from url</a></li><li><a
shape="rect"
href="#AjaxandJavaScriptRecipes-Showindicatorwhilerequestisinprogress">Show
indicator while request is
in progress</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Highlightcontentoftargetwithbluecolor,for2seconds">Highlight
content of target with blue color, for 2 seconds</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-ExecuteJavaScriptinthereturnedcontent">Execute
JavaScript in the returned content</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Publishatopicbeforetherequest">Publish a topic
before the request</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Publishatopicaftertherequest">Publish a topic
after the request</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Publishatopiconerror">Publish a topic on
error</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Showafixederrormessageonerror">Show a fixed
error message on error</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Preventarequest">Prevent a
request</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Submitaform(plainform)">Submit a
form (plain form)</a></li><li><a shape="rect"
href="#AjaxandJavaScriptRecipes-Submitaform(usings:formtag)">Submit a form
(using s:form tag)</a></li></ul>
</li><li><a shape="rect" href="#AjaxandJavaScriptRecipes-Div">Div</a>
Modified: websites/production/struts/content/docs/append.html
==============================================================================
--- websites/production/struts/content/docs/append.html (original)
+++ websites/production/struts/content/docs/append.html Wed Jan 27 09:26:50 2016
@@ -153,7 +153,7 @@ the following will be how the appended i
<h2 id="append-Parameters">Parameters</h2>
-<p><table width="100%"><tr><td colspan="6" rowspan="1"><h4>Dynamic Attributes
Allowed:</h4> false</td></tr><tr><td colspan="6"
rowspan="1"> </td></tr><tr><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Name</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Required</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Default</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Evaluated</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Type</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Description</h4></th></tr><tr><td align="left" colspan="1"
rowspan="1" valign="top">id</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Deprecated.
Use 'var' instead</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">var</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">The name of which if supplied will have the resultant appended
iterator stored under in the stack's context</td></tr></table></p>
+<p><table width="100%"><tr><td colspan="6" rowspan="1"><h4>Dynamic Attributes
Allowed:</h4> false</td></tr><tr><td colspan="6"
rowspan="1"> </td></tr><tr><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Name</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Required</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Default</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Evaluated</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Type</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Description</h4></th></tr><tr><td align="left" colspan="1"
rowspan="1" valign="top">var</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">The name o
f which if supplied will have the resultant appended iterator stored under in
the stack's context</td></tr></table></p>
<h2 id="append-Example">Example</h2>
Modified: websites/production/struts/content/docs/bean.html
==============================================================================
--- websites/production/struts/content/docs/bean.html (original)
+++ websites/production/struts/content/docs/bean.html Wed Jan 27 09:26:50 2016
@@ -151,7 +151,7 @@ stack's Context.</p>
<h1 id="bean-Parameters">Parameters</h1>
-<p><table width="100%"><tr><td colspan="6" rowspan="1"><h4>Dynamic Attributes
Allowed:</h4> false</td></tr><tr><td colspan="6"
rowspan="1"> </td></tr><tr><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Name</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Required</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Default</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Evaluated</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Type</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Description</h4></th></tr><tr><td align="left" colspan="1"
rowspan="1" valign="top">id</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Deprecated.
Use 'var' instead</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">name</td><td align="left" colspan="1" rowspan="1"
valign="top"><strong>true</strong></td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">The class name of the bean to be instantiated (must respect
JavaBean specification)</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">var</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Name used to reference the value pushed into the Value
Stack</td></tr></table></p>
+<p><table width="100%"><tr><td colspan="6" rowspan="1"><h4>Dynamic Attributes
Allowed:</h4> false</td></tr><tr><td colspan="6"
rowspan="1"> </td></tr><tr><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Name</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Required</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Default</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Evaluated</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Type</h4></th><th align="left" colspan="1" rowspan="1"
valign="top"><h4>Description</h4></th></tr><tr><td align="left" colspan="1"
rowspan="1" valign="top">name</td><td align="left" colspan="1" rowspan="1"
valign="top"><strong>true</strong></td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1" valign
="top">The class name of the bean to be instantiated (must respect JavaBean
specification)</td></tr><tr><td align="left" colspan="1" rowspan="1"
valign="top">var</td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top"></td><td align="left" colspan="1" rowspan="1"
valign="top">false</td><td align="left" colspan="1" rowspan="1"
valign="top">String</td><td align="left" colspan="1" rowspan="1"
valign="top">Name used to reference the value pushed into the Value
Stack</td></tr></table></p>
<h1 id="bean-Examples">Examples</h1>
Modified:
websites/production/struts/content/docs/building-struts-2-fast-track-release.html
==============================================================================
---
websites/production/struts/content/docs/building-struts-2-fast-track-release.html
(original)
+++
websites/production/struts/content/docs/building-struts-2-fast-track-release.html
Wed Jan 27 09:26:50 2016
@@ -139,11 +139,11 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><div
class="confluence-information-macro confluence-information-macro-warning"><span
class="aui-icon aui-icon-small aui-iconfont-error
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>This version is outdated!
Work-in-progress!</p></div></div><h1
id="BuildingStruts2-Fasttrackrelease-Content">Content</h1><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1440489354904 {padding: 0px;}
-div.rbtoc1440489354904 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1440489354904 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1453884618782 {padding: 0px;}
+div.rbtoc1453884618782 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1453884618782 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1440489354904">
+/*]]>*/</style></p><div class="toc-macro rbtoc1453884618782">
<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect"
href="#BuildingStruts2-Fasttrackrelease-BuildingSteps(Struts)">Building Steps
(Struts)</a>
<ul class="toc-indentation"><li><span class="TOCOutline">1.1</span> <a
shape="rect" href="#BuildingStruts2-Fasttrackrelease-Gettingready">Getting
ready</a></li><li><span class="TOCOutline">1.2</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Updateversionofarchetypes">Update
version of archetypes</a></li><li><span class="TOCOutline">1.3</span> <a
shape="rect" href="#BuildingStruts2-Fasttrackrelease-Applysecuritypatch">Apply
security patch</a></li><li><span class="TOCOutline">1.4</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Preparerelease">Prepare
release</a></li><li><span class="TOCOutline">1.5</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Performtherelease">Perform the
release</a></li><li><span class="TOCOutline">1.6</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Movetheassembliestothe/www/people.apache.org/builds/struts/$VERSIONdir">Move
the assemblies to the /www/people.apache.org/builds/struts/$VERSION
dir</a></li>
<li><span class="TOCOutline">1.7</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Jirastuff">Jira stuff</a></li><li><span
class="TOCOutline">1.8</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Voteonit">Vote on it</a></li><li><span
class="TOCOutline">1.9</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Copyfiles">Copy files</a></li><li><span
class="TOCOutline">1.10</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Promoterelease">Promote
release</a></li><li><span class="TOCOutline">1.11</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Cleanupoldreleases">Clean up old
releases</a></li><li><span class="TOCOutline">1.12</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Waitforrsync">Wait for
rsync</a></li><li><span class="TOCOutline">1.13</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-(Optional)-UpdateSecurityBulletins">(Optional)
- Update Security Bulletins</a></li><li><span class="TOCOu
tline">1.14</span> <a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Updatesite(Strutstoplevelsite)">Update
site (Struts top level site)</a></li><li><span class="TOCOutline">1.15</span>
<a shape="rect"
href="#BuildingStruts2-Fasttrackrelease-Updatesite(Struts2site)">Update site
(Struts 2 site)</a></li><li><span class="TOCOutline">1.16</span> <a
shape="rect" href="#BuildingStruts2-Fasttrackrelease-Postannouncements">Post
announcements</a></li></ul>
</li></ul>
Modified:
websites/production/struts/content/docs/building-struts-2-normal-release.html
==============================================================================
---
websites/production/struts/content/docs/building-struts-2-normal-release.html
(original)
+++
websites/production/struts/content/docs/building-struts-2-normal-release.html
Wed Jan 27 09:26:50 2016
@@ -139,22 +139,20 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="BuildingStruts2-Normalrelease-Content">Content</h1><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1440489353613 {padding: 0px;}
-div.rbtoc1440489353613 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1440489353613 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1453884620028 {padding: 0px;}
+div.rbtoc1453884620028 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1453884620028 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1440489353613">
-<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Gettingready">Getting
ready</a></li><li><span class="TOCOutline">2</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft
Docs when needed</a></li><li><span class="TOCOutline">3</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Besureyourlocalcopyisup-to-date">Be sure
your local copy is up-to-date</a></li><li><span class="TOCOutline">4</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Createareleasebranch">Create
a release branch</a></li><li><span class="TOCOutline">5</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Preparerelease">Prepare
release</a></li><li><span class="TOCOutline">6</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Performtherelease">Perform the
release</a></li><li><span class="TOCOutline">7</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Movetheasse
mblies">Move the assemblies</a></li><li><span class="TOCOutline">8</span> <a
shape="rect"
href="#BuildingStruts2-Normalrelease-Announceavailability">Announce
availability</a></li><li><span class="TOCOutline">9</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanuprepository">Clean up
repository</a></li><li><span class="TOCOutline">10</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Voteonit">Vote on it</a></li><li><span
class="TOCOutline">11</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Copyfiles">Copy files</a></li><li><span
class="TOCOutline">12</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Promoterelease">Promote
release</a></li><li><span class="TOCOutline">13</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanupoldreleases">Clean up old
releases</a></li><li><span class="TOCOutline">14</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Waitforrsync">Wait for
rsync</a></li><li><span class="TOCOutline">15</s
pan> <a shape="rect" href="#BuildingStruts2-Normalrelease-Updatesite">Update
site</a></li><li><span class="TOCOutline">16</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Redeploythedocs(Optional)">Redeploy the
docs (Optional)</a></li><li><span class="TOCOutline">17</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Postannouncements">Post
announcements</a></li></ul>
+/*]]>*/</style></p><div class="toc-macro rbtoc1453884620028">
+<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Gettingready">Getting
ready</a></li><li><span class="TOCOutline">2</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft
Docs when needed</a></li><li><span class="TOCOutline">3</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Besureyourlocalcopyisup-to-date">Be sure
your local copy is up-to-date</a></li><li><span class="TOCOutline">4</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Preparerelease">Prepare
release</a></li><li><span class="TOCOutline">5</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Performtherelease">Perform the
release</a></li><li><span class="TOCOutline">6</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Movetheassemblies">Move the
assemblies</a></li><li><span class="TOCOutline">7</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Announceavailabili
ty">Announce availability</a></li><li><span class="TOCOutline">8</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Pushchanges">Push
changes</a></li><li><span class="TOCOutline">9</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Voteonit">Vote on it</a></li><li><span
class="TOCOutline">10</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Copyfiles">Copy files</a></li><li><span
class="TOCOutline">11</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Promoterelease">Promote
release</a></li><li><span class="TOCOutline">12</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanupoldreleases">Clean up old
releases</a></li><li><span class="TOCOutline">13</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Waitforrsync">Wait for
rsync</a></li><li><span class="TOCOutline">14</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Updatesite">Update site</a></li><li><span
class="TOCOutline">15</span> <a shape="rect" href="#Buildin
gStruts2-Normalrelease-Redeploythedocs(Optional)">Redeploy the docs
(Optional)</a></li><li><span class="TOCOutline">16</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Postannouncements">Post
announcements</a></li></ul>
</div><h2 id="BuildingStruts2-Normalrelease-BuildingSteps(Struts)">Building
Steps (Struts)</h2><h3 id="BuildingStruts2-Normalrelease-Gettingready">Getting
ready</h3><ol><li>Create an "Struts 2.x.y omnibus ticket" ticket in JIRA to
refer to in upcoming release related commit comments and for general
documentation purposes. Mark it with priority "Blocker".</li><li>Switch to
branch <code>develop</code></li><li>Ensure that the master POM and Struts
Annotations have current releases</li><li>Review JIRA for any issues without a
fix version set, and for any issues that should be resolved for the pending
release.</li><li>Ensure that there are no repositories or pluginRepositories
listed in the poms.</li><li>If you have committed all changes regarding the
release process, close the omnibus ticket as it is the last open ticket for the
upcoming release</li><li>Release the upcoming version in JIRA (under
Administration/Manage Releases) and tag the release date</li><li>Add next
milestone ve
rsion to the JIRA roadmap</li><li>Create DONE and TODO filters for the new
version, share with all, and remove obsolete TODO filter</li><li>Create a new
Version Notes page in Confluence, link from <a shape="rect"
href="migration-guide.html">Migration Guide</a>, and link to prior release page
and JIRA DONE filters of the version to release</li><li>Export wiki pages and
put them under <code>/docs</code></li></ol><h3
id="BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft Docs
when needed</h3><p>Checkout <code>struts-site</code> project (see details
at the bottom of this page) and perform export:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">cd struts-site
mvn package</pre>
</div></div><p>If build will fail try again - don't
use <code>clean</code>, the exporter is going to update only outdated
pages. After successful export, commit updated files
into <code>struts-production</code></p><h3
id="BuildingStruts2-Normalrelease-Besureyourlocalcopyisup-to-date">Be sure your
local copy is up-to-date</h3><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">git fetch origin --prune
-git checkout develop
+git checkout master
git pull</pre>
-</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>Please remember to keep BOM
subproject in sync -
<code><struts-version.version>X.X.X</struts-version.version></code>
- must be the same as the parent pom.</p></div></div><h3
id="BuildingStruts2-Normalrelease-Createareleasebranch">Create a release
branch</h3><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">git flow release start X.X.X.X</pre>
-</div></div><p>Now you should be on <code>release/X.X.X.X</code> branch
(<code>git status</code> supposed to confirm that).</p><h3
id="BuildingStruts2-Normalrelease-Preparerelease"><span style="line-height:
1.5625;">Prepare release</span></h3><p>Tag the release by using the
"release:prepare" goal of Maven:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</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>Please remember to keep BOM
subproject in sync -
<code><struts-version.version>X.X.X</struts-version.version></code>
- must be the same as the parent pom. The latest Maven version handles this
case very well but it's worth checking if the bits are in
sync.</p></div></div><h3
id="BuildingStruts2-Normalrelease-Preparerelease">Prepare release</h3><p>Tag
the release by using the "release:prepare" goal of Maven:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">mvn release:prepare -DautoVersionSubmodules=true
</pre>
</div></div><p>For a <a shape="rect" class="external-link"
href="http://maven.apache.org/plugins/maven-release-plugin/usage.html">dry
run</a>, add <code>-DdryRun=true</code>. If you do a dry run, use <code>mvn
release:clean</code> to clean up after you have looked at the
output.</p><p>When prompted for the SCM tag name, follow this pattern:
STRUTS_2_3_[PATCH_VERSION]</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>If you get an error message, try
to re-run <code>mvn release:prepare -DautoVersionSubmodules=true</code> command
again, <code>-Dresume</code> flag is set to true by default and the plugin will
resume the release process from where it failed
before.</p></div></div><p>Follow the link to get <a shape="rect"
class="external-link"
href="http://maven.apache.org/plugins/maven-release-plugin/exampl
es/prepare-release.html">more information</a> about performed operation
by release plugin.</p><h3
id="BuildingStruts2-Normalrelease-Performtherelease">Perform the
release</h3><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
@@ -212,15 +210,9 @@ cd ..
rm -r struts-dev
echo "Done!"</pre>
-</div></div><p>After this step artifacts are available for test here <a
shape="rect" class="external-link"
href="https://dist.apache.org/repos/dist/dev/struts/">https://dist.apache.org/repos/dist/dev/struts/</a></p><h3
id="BuildingStruts2-Normalrelease-Announceavailability"><span
style="font-size: 16.0px;line-height: 1.5625;">Announce
availability</span></h3><p>Send a short e-mail to [email protected] informing
about the new packages and to give people enough time to test the distribution
(actual bits). Wait around a week before posting Vote. If no show-stoppers
reported, start a vote thread for build quality designation.</p><h3
id="BuildingStruts2-Normalrelease-Cleanuprepository">Clean up
repository</h3><p>It doesn't matter if the bits will be accepted or not,
development continues <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)"> Switch to <code>release/X.X.X.X</code> branch and
execute the below command:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">git flow release finish -n X.X.X.X</pre>
-</div></div><p><code>-n</code> option is need to avoid tagging the release,
the Maven Release plugin did that already.</p><p>Now
both <code>master</code> and <code>develop</code> branches should be
up to date with the changes introduced by the release. As Maven bumps version
and also prepares for next development cycle, but do this on the same branch
(or rather <code>maven-release-plugin</code> knows nothing about
git-flow and branching), after finishing the release you must manually update
actual version in the <code>master</code> branch - without this</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">git checkout master
-mvn versions:set -DnewVersion=X.X.X.X -DgenerateBackupPoms=false
-git commit -m "Sets proper released version"
-git push
-git checkout develop</pre>
-</div></div><p>Now the <code>master</code> branch has a proper version -
it isn't the best solution and if you have better please let me know!</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>Do not remove the tag! It clearly
indicates what was planned and it can be used as a history marker. Always used
the next version number, do not redeploy the same version as it breaks Maven's
policy and you will have to manually clean up Maven
repository.</p></div></div><h3 id="BuildingStruts2-Normalrelease-Voteonit">Vote
on it</h3><p>Post a release/quality vote to the dev list (and
<strong>only</strong> the dev list). The example mail is on <a shape="rect"
href="sample-announcements.html">Sample announcements</a> page. If the vote
result is for an ASF release (i.e. not test build), update site, announce. If
the
vote result is for GA, push to central.</p><h3
id="BuildingStruts2-Normalrelease-Copyfiles">Copy files</h3><p>After the vote,
if the distribution is being mirrored (there was a favourable release vote)
move all the artefa<span style="line-height: 1.4285715;">cts from
<code>dev</code> folder into <code>release</code> folder:</span></p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><p>After this step artifacts are available for test here <a
shape="rect" class="external-link"
href="https://dist.apache.org/repos/dist/dev/struts/">https://dist.apache.org/repos/dist/dev/struts/</a></p><h3
id="BuildingStruts2-Normalrelease-Announceavailability"><span
style="font-size: 16.0px;line-height: 1.5625;">Announce
availability</span></h3><p>Send a short e-mail to [email protected] informing
about the new packages and to give people enough time to test the distribution
(actual bits). Wait around a week before posting Vote. If no show-stoppers
reported, start a vote thread for build quality designation.</p><h3
id="BuildingStruts2-Normalrelease-Pushchanges">Push changes</h3><p>Do not
forget to push your local changes to the Apache repo</p><div class="code panel
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">git push</pre>
+</div></div><h3 id="BuildingStruts2-Normalrelease-Voteonit">Vote on
it</h3><p>Post a release/quality vote to the dev list (and
<strong>only</strong> the dev list). The example mail is on <a shape="rect"
href="sample-announcements.html">Sample announcements</a> page. If the vote
result is for an ASF release (i.e. not test build), update site, announce. If
the vote result is for GA, push to central.</p><h3
id="BuildingStruts2-Normalrelease-Copyfiles">Copy files</h3><p>After the vote,
if the distribution is being mirrored (there was a favourable release vote)
move all the artefa<span style="line-height: 1.4285715;">cts from
<code>dev</code> folder into <code>release</code> folder:</span></p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">svn mv
https://dist.apache.org/repos/dist/dev/struts/$VERSION/
https://dist.apache.org/repos/dist/release/struts/ </pre>
</div></div><h3 id="BuildingStruts2-Normalrelease-Promoterelease">Promote
release</h3><p>Log in again to <a shape="rect" class="external-link"
href="http://repository.apache.org/">Nexus</a> and <strong>release</strong> the
repository, it will be automatically replicated across Maven Repositories<br
clear="none"> See <a shape="rect" class="external-link"
href="http://maven.apache.org/developers/release/apache-release.html">Releasing
a Maven-based project</a> for further details.</p><h3
id="BuildingStruts2-Normalrelease-Cleanupoldreleases">Clean up old
releases</h3><p>Remove the old files from under <a shape="rect"
class="external-link"
href="https://dist.apache.org/repos/dist/release/struts/">https://dist.apache.org/repos/dist/release/struts/</a> to
synchronise only the latest version with peers. All the files from <a
shape="rect" class="external-link"
href="https://dist.apache.org/repos/dist/release/struts/">https://dist.apache.org/repos/dist/release/struts/</a> are
always
mirrored to <a shape="rect" class="external-link"
href="http://archive.apache.org/dist/struts/">http://archive.apache.org/dist/struts/</a>. You
can use the below command:</p><div class="preformatted panel"
style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>svn del https://dist.apache.org/repos/dist/release/struts/2.3.x/
@@ -228,7 +220,7 @@ git checkout develop</pre>
</div></div><p>where <code>x</code> is the previous version to remove (or one
more previous to keep current and one version back).</p><h3
id="BuildingStruts2-Normalrelease-Waitforrsync">Wait for rsync</h3><p>Wait 24
hours before proceeding.</p><h3
id="BuildingStruts2-Normalrelease-Updatesite"><span style="line-height:
1.5625;">Update site</span></h3><ul><li><p>Check out site src code</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">git clone
https://git-wip-us.apache.org/repos/asf/struts-site.git
</pre>
-</div></div></li><li>If a new DTD was defined, add it
to <code>source/dtds</code></li><li>Update current version and release
date in <code>struts-site/_config.yml</code></li><li>Update page source
files<ul><li>struts-site/source/announce.md (if applicable, refer also to
corresponding security bulletin)</li><li>struts-site/source/downloads.html
(Prior Releases section)</li><li>struts-site/source/index.html (some parts will
updated automatically with values defined
in <code>_config.yml</code>)</li></ul></li><li>Generate site with
Jekyll<ul><li><code>jekyll build</code></li><li>with <code>jekyll serve
-w</code> you can check the generated site at
http://localhost:4000</li></ul></li><li><p>Commit the changes and the generated
content</p></li></ul><p>Now the changes must be deployed to production which is
basically a separated Subversion repository, you check it out with command
below:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelC
ontent pdl">
+</div></div></li><li>If a new DTD was defined, add it
to <code>source/dtds</code></li><li>Update current version and release
date in <code>struts-site/_config.yml</code></li><li>Update page source
files<ul><li>struts-site/source/announce.md (if applicable, refer also to
corresponding security bulletin)</li><li>struts-site/source/downloads.html
(Prior Releases section)</li><li>struts-site/source/index.html (some parts will
updated automatically with values defined
in <code>_config.yml</code>)</li></ul></li><li>Generate site with Docker
Jekyll image<ul><li>you must have Docker installed and running</li><li>if you
are doing this the first time, download the official Struts image to build the
site from <a shape="rect" class="external-link"
href="https://hub.docker.com/r/theapachestruts/struts-site-jekyll/"
rel="nofollow">https://hub.docker.com/r/theapachestruts/struts-site-jekyll/</a></li><li>start <code>docker-machine</code></li><li>now
you can use one of the b
ash scripts already provided in
the <code>struts-site</code>:<ul><li><code>docker-run.sh</code> - used
with Bash</li><li><code>docker-run.fish</code> - to use with Fish Shell
(via <code>fish docker-run.fish</code>)</li></ul></li><li>now you can
check the generated site at http://localhost:4000</li></ul></li><li><p>Commit
the changes and the generated content</p></li></ul><p>Now the changes must be
deployed to production which is basically a separated Subversion repository,
you check it out with command below:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">svn co
https://svn.apache.org/repos/infra/websites/production/struts/content
struts-production</pre>
</div></div><p>It's a good idea to keep that working copy to be used with
future releases. Right now copy content
of <code>struts-site/content</code> folder
to <code>struts-production</code> folder, then commit changes. Next
step is to update exported wiki pages. With current approach the pages are kept
in <code>struts-production/docs</code>.</p><h3
id="BuildingStruts2-Normalrelease-Redeploythedocs(Optional)"><span
style="line-height: 1.5625;">Redeploy the docs (Optional)</span></h3><ul
style="list-style-type: square;"><li><p>Checkout source of the website and
export Confluence pages</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">svn co
https://svn.apache.org/repos/asf/struts/site/trunk struts-site
Modified:
websites/production/struts/content/docs/building-struts-annotations.html
==============================================================================
--- websites/production/struts/content/docs/building-struts-annotations.html
(original)
+++ websites/production/struts/content/docs/building-struts-annotations.html
Wed Jan 27 09:26:50 2016
@@ -140,11 +140,11 @@ under the License.
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="BuildingStrutsAnnotations-Content">Content</h1>
<style type="text/css">/*<![CDATA[*/
-div.rbtoc1440489348319 {padding: 0px;}
-div.rbtoc1440489348319 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1440489348319 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1453884615253 {padding: 0px;}
+div.rbtoc1453884615253 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1453884615253 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1440489348319">
+/*]]>*/</style><div class="toc-macro rbtoc1453884615253">
<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect" href="#BuildingStrutsAnnotations-Content">Content</a>
<ul class="toc-indentation"><li><span class="TOCOutline">1.1</span> <a
shape="rect"
href="#BuildingStrutsAnnotations-BuildingSteps(StrutsAnnotations)">Building
Steps (Struts Annotations)</a>
<ul class="toc-indentation"><li><span class="TOCOutline">1.1.1</span> <a
shape="rect"
href="#BuildingStrutsAnnotations-Obtainafreshcheckoutofstrutsannotations">Obtain
a fresh check out of struts annotations</a></li><li><span
class="TOCOutline">1.1.2</span> <a shape="rect"
href="#BuildingStrutsAnnotations-Preparerelease">Prepare
release</a></li><li><span class="TOCOutline">1.1.3</span> <a shape="rect"
href="#BuildingStrutsAnnotations-Performrelease">Perform
release</a></li><li><span class="TOCOutline">1.1.4</span> <a shape="rect"
href="#BuildingStrutsAnnotations-SendaVOTEemail">Send a VOTE
email</a></li><li><span class="TOCOutline">1.1.5</span> <a shape="rect"
href="#BuildingStrutsAnnotations-Promoterelease">Promote release</a></li></ul>
Modified: websites/production/struts/content/docs/building-struts-master.html
==============================================================================
--- websites/production/struts/content/docs/building-struts-master.html
(original)
+++ websites/production/struts/content/docs/building-struts-master.html Wed Jan
27 09:26:50 2016
@@ -140,11 +140,11 @@ under the License.
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="BuildingStrutsMaster-Content">Content</h1>
<style type="text/css">/*<![CDATA[*/
-div.rbtoc1440489362313 {padding: 0px;}
-div.rbtoc1440489362313 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1440489362313 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1453884624327 {padding: 0px;}
+div.rbtoc1453884624327 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1453884624327 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1440489362313">
+/*]]>*/</style><div class="toc-macro rbtoc1453884624327">
<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect" href="#BuildingStrutsMaster-BuildingSteps(Struts)">Building Steps
(Struts)</a>
<ul class="toc-indentation"><li><span class="TOCOutline">1.1</span> <a
shape="rect" href="#BuildingStrutsMaster-Obtainafreshcheckout.">Obtain a fresh
checkout.</a></li><li><span class="TOCOutline">1.2</span> <a shape="rect"
href="#BuildingStrutsMaster-Changesitetarget">Change site
target</a></li><li><span class="TOCOutline">1.3</span> <a shape="rect"
href="#BuildingStrutsMaster-Preparerelease">Prepare release</a></li><li><span
class="TOCOutline">1.4</span> <a shape="rect"
href="#BuildingStrutsMaster-Performtherelease">Perform the
release</a></li><li><span class="TOCOutline">1.5</span> <a shape="rect"
href="#BuildingStrutsMaster-Announceavailability">Announce
availability</a></li><li><span class="TOCOutline">1.6</span> <a shape="rect"
href="#BuildingStrutsMaster-Voteonit">Vote on it</a></li><li><span
class="TOCOutline">1.7</span> <a shape="rect"
href="#BuildingStrutsMaster-Promoterelease">Promote release</a></li><li><span
class="TOCOutline">1.8</span> <a shape="rect" href="#BuildingS
trutsMaster-Waitforrsync">Wait for rsync</a></li><li><span
class="TOCOutline">1.9</span> <a shape="rect"
href="#BuildingStrutsMaster-Postannouncements">Post announcements</a></li></ul>
</li></ul>
Modified: websites/production/struts/content/docs/cdi-plugin.html
==============================================================================
--- websites/production/struts/content/docs/cdi-plugin.html (original)
+++ websites/production/struts/content/docs/cdi-plugin.html Wed Jan 27 09:26:50
2016
@@ -139,11 +139,11 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><style type="text/css">/*<![CDATA[*/
-div.rbtoc1440489369636 {padding: 0px;}
-div.rbtoc1440489369636 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1440489369636 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1453884633827 {padding: 0px;}
+div.rbtoc1453884633827 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1453884633827 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1440489369636">
+/*]]>*/</style><div class="toc-macro rbtoc1453884633827">
<ul class="toc-indentation"><li><a shape="rect"
href="#CDIPlugin-Overview">Overview</a></li><li><a shape="rect"
href="#CDIPlugin-Setup">Setup</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#CDIPlugin-MavenSetup">Maven Setup</a></li><li><a shape="rect"
href="#CDIPlugin-ManualIntegration">Manual Integration</a></li><li><a
shape="rect" href="#CDIPlugin-Configuration">Configuration</a></li></ul>
</li><li><a shape="rect" href="#CDIPlugin-Usage">Usage</a>
Modified: websites/production/struts/content/docs/client-side-validation.html
==============================================================================
--- websites/production/struts/content/docs/client-side-validation.html
(original)
+++ websites/production/struts/content/docs/client-side-validation.html Wed Jan
27 09:26:50 2016
@@ -138,51 +138,22 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
- <div id="ConfluenceContent">
-
-<p>The framework adds support for client-side validation on top of the
standard validation framework. </p>
-
-<p>Client-side validation can be enabled on a per-form basis by specifying
<code>validate="true"</code> in the <a shape="rect" href="form.html">form</a>
tag.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: html; gutter: false; theme: Default"
style="font-size:12px;">
-<saf:form name="test" action="javascriptValidation" validate="true">
+ <div id="ConfluenceContent"><p>The framework adds support for
client-side validation on top of the standard validation
framework.</p><p>Client-side validation can be enabled on a per-form basis by
specifying <code>validate="true"</code> in the <a shape="rect"
href="form.html">form</a> tag.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: html; gutter: false; theme: Default"
style="font-size:12px;"><s:form name="test" action="javascriptValidation"
validate="true">
...
-</saf:form>
+</s:form>
</pre>
-</div></div>
-
-<p>If a <code>name</code> for the form is not given, the action mapping name
will be used as the form name. Otherwise, a correct <code>action</code> and
<code>namespace</code> attributes must be provided to the
<code><saf:form></code> tag. </p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Referencing
"submitProfile" in the "/user" namespace</b></div><div class="codeContent
panelContent pdl">
-<pre class="brush: html; gutter: false; theme: Default"
style="font-size:12px;">
-<saf:form namespace="/user" action="submitProfile" validate="true">
+</div></div><p>If a <code>name</code> for the form is not given, the action
mapping name will be used as the form name. Otherwise, a correct
<code>action</code> and <code>namespace</code> attributes must be provided to
the <code><saf:form></code> tag.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>Referencing "submitProfile" in the "/user"
namespace</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: html; gutter: false; theme: Default"
style="font-size:12px;"><s:form namespace="/user" action="submitProfile"
validate="true">
...
-</saf:form>
+</s:form>
</pre>
-</div></div>
-
-<p>Technically, the form's action attribute can refer to a "path" that
includes the namespace and action as a URI. But, client-side validation
<strong>requires</strong> that the action name and namespeact to be set
separately. </p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Won't work with
client-side validation!</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: html; gutter: false; theme: Default"
style="font-size:12px;">
-<saf:form action="/user/submitProfile.action" validate="true">
+</div></div><p>Technically, the form's action attribute can refer to a "path"
that includes the namespace and action as a URI. But, client-side validation
<strong>requires</strong> that the action name and namespeact to be set
separately.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Won't
work with client-side validation!</b></div><div class="codeContent panelContent
pdl">
+<pre class="brush: html; gutter: false; theme: Default"
style="font-size:12px;"><s:form action="/user/submitProfile.action"
validate="true">
...
-</saf:form>
+</s:form>
</pre>
-</div></div>
-
-<p>All the usual <a shape="rect" href="validation.html">validation
configuration</a> steps apply to client-side validation. Client-side validation
uses the same validation rules as server-side validation. If server-side
validation doesn't work, then client-side validation won't work either.</p>
-
-<div class="confluence-information-macro
confluence-information-macro-information"><p class="title">The left hand
doesn't know ...</p><span class="aui-icon aui-icon-small aui-iconfont-info
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body">
-<p>The <code>required</code> attribute on many <a shape="rect"
href="struts-tags.html">Struts Tags</a> is not integrated with client-side
validation! The tag attribute is used by certain themes (like xhtml) to put a
visual marker (usually '*') next to the field. The tag doesn't know if the
validation system actually "requires" the field or not.</p></div></div>
-
-<h2 id="ClientSideValidation-ClientSideValidationTypes">Client Side Validation
Types</h2>
-
-<p>There are two styles of client side validation. </p>
-
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> <a shape="rect"
href="pure-javascript-client-side-validation.html">Pure JavaScript Client Side
Validation</a> </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>
Used by the <a shape="rect" href="xhtml-theme.html">xhtml theme</a> and <a
shape="rect" href="cssxhtml-theme.html">css_xhtml theme</a>
</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> <a
shape="rect" href="ajax-client-side-validation.html">AJAX Client Side
Validation</a> </p></th><td colspan="1" rowspan="1"
class="confluenceTd"><p> Used by the <a shape="rect"
href="ajax-theme.html">ajax theme</a> </p></td></tr></tbody></table></div>
-</div>
+</div></div><p>All the usual <a shape="rect" href="validation.html">validation
configuration</a> steps apply to client-side validation. Client-side validation
uses the same validation rules as server-side validation. If server-side
validation doesn't work, then client-side validation won't work either.</p><div
class="confluence-information-macro
confluence-information-macro-information"><p class="title">The left hand
doesn't know ...</p><span class="aui-icon aui-icon-small aui-iconfont-info
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>The <code>required</code>
attribute on many <a shape="rect" href="struts-tags.html">Struts Tags</a> is
not integrated with client-side validation! The tag attribute is used by
certain themes (like xhtml) to put a visual marker (usually '*') next to the
field. The tag doesn't know if the validation system actually "requires" the
field or not.</p></div></div><h2 id="ClientSideValidation-ClientSideValidationT
ypes">Client Side Validation Types</h2><p>There are two styles of client side
validation.</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect"
href="pure-javascript-client-side-validation.html">Pure JavaScript Client Side
Validation</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Used
by the <a shape="rect" href="xhtml-theme.html">xhtml theme</a> and <a
shape="rect" href="cssxhtml-theme.html">css_xhtml
theme</a></p></td></tr><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p><a shape="rect"
href="ajax-client-side-validation.html">AJAX Client Side
Validation</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Used
by the <a shape="rect" href="ajax-theme.html">ajax
theme</a></p></td></tr></tbody></table></div></div>
</div>
<div class="tabletitle">