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 dev@struts.a.o 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 dev@struts.a.o 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">