You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/04/24 20:18:19 UTC

svn commit: r906751 [1/2] - /websites/production/struts/content/development/2.x/docs/

Author: lukaszlenart
Date: Thu Apr 24 18:18:19 2014
New Revision: 906751

Log:
Updates draft docs

Added:
    websites/production/struts/content/development/2.x/docs/s2-021.html
    websites/production/struts/content/development/2.x/docs/version-notes-23162.html
    websites/production/struts/content/development/2.x/docs/version-notes-2318.html
Modified:
    websites/production/struts/content/development/2.x/docs/action-configuration.html
    websites/production/struts/content/development/2.x/docs/building-struts-2-normal-release.html
    websites/production/struts/content/development/2.x/docs/debugging.html
    websites/production/struts/content/development/2.x/docs/migration-guide.html
    websites/production/struts/content/development/2.x/docs/security-bulletins.html

Modified: websites/production/struts/content/development/2.x/docs/action-configuration.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/action-configuration.html (original)
+++ websites/production/struts/content/development/2.x/docs/action-configuration.html Thu Apr 24 18:18:19 2014
@@ -19,7 +19,7 @@ under the License. 
 -->
 <html>
 <head>
-    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
     <style type="text/css">
         .dp-highlighter {
             width:95% !important;
@@ -37,9 +37,9 @@ under the License. 
     <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
     <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
     <script src='http://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
-            <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
-            <script src='http://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
-    
+    <script src='http://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
+    <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+
     <script type="text/javascript">
         SyntaxHighlighter.defaults['toolbar'] = false;
         SyntaxHighlighter.all();
@@ -135,153 +135,65 @@ 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>
-
-<style type="text/css">/*<![CDATA[*/
-div.rbtoc1396727230338 {padding: 0px;}
-div.rbtoc1396727230338 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1396727230338 li {margin-left: 0px;padding-left: 0px;}
+            <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.rbtoc1398362999759 {padding: 0px;}
+div.rbtoc1398362999759 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1398362999759 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1396727230338">
+/*]]>*/</style></p><div class="toc-macro rbtoc1398362999759">
 <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>
 <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">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;action name=&quot;Logon&quot; class=&quot;tutorial.Logon&quot;&gt;
+</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">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;action name=&quot;Logon&quot; class=&quot;tutorial.Logon&quot;&gt;
   &lt;result type=&quot;redirectAction&quot;&gt;Menu&lt;/result&gt;
   &lt;result name=&quot;input&quot;&gt;/Logon.jsp&lt;/result&gt;
 &lt;/action&gt;
 ]]></script>
-</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.do" rel="nofollow">http://www.planetstruts.org/struts2-mailreader/Welcome.do</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">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;s:form action=&quot;Hello&quot;&gt;
+</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.do" rel="nofollow">http://www.planetstruts.org/struts2-mailreader/Welcome.do</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-botto
 m-width: 1px;"><b>A Hello Form</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;s:form action=&quot;Hello&quot;&gt;
     &lt;s:textfield label=&quot;Please enter your name&quot; name=&quot;name&quot;/&gt;
     &lt;s:submit/&gt;
 &lt;/s:form&gt;
 ]]></script>
-</div></div>
-
-    <div class="aui-message hint shadowed information-macro">
+</div></div>    <div class="aui-message hint shadowed information-macro">
                     <p class="title">Action Names With Slashes</p>
                             <span class="aui-icon icon-hint">Icon</span>
                 <div class="message-content">
-                            
-<p>If your action names have slashes in them (for example, <code>&lt;action name="admin/home" class="tutorial.Admin"/&gt;</code>) you need to specifically allow slashes in your action names via a constant in the <code>struts.xml</code> file by specifying <code>&lt;constant name="struts.enable.SlashesInActionNames" value="true"/&gt;</code>. See <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-1383">JIRA Issue WW-1383</a> for discussion as there are side effects to setting this property to <code>true</code>.</p>
+                            <p>If your action names have slashes in them (for example, <code>&lt;action name="admin/home" class="tutorial.Admin"/&gt;</code>) you need to specifically allow slashes in your action names via a constant in the <code>struts.xml</code> file by specifying <code>&lt;constant name="struts.enable.SlashesInActionNames" value="true"/&gt;</code>. See <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-1383">JIRA Issue WW-1383</a> for discussion as there are side effects to setting this property to <code>true</code>.</p>
                     </div>
     </div>
-
-
     <div class="aui-message warning shadowed information-macro">
                     <p class="title">Action Names with Dots and Dashes</p>
                             <span class="aui-icon icon-warning">Icon</span>
                 <div class="message-content">
-                            
-<p>Although action naming is pretty flexible, one should pay attention when using dots (eg. <code>create.user</code>) and/or dashes (eg. <code>my-action</code>). While the dot notation has no known side effects at this time, the dash notation will cause problems with the generated JavaScript for certain tags and themes. Use with caution, and always try to use camelcase action names (eg. <code>createUser</code>) or underscores (eg. <code>my_action</code>).</p>
+                            <p>Although action naming is pretty flexible, one should pay attention when using dots (eg. <code>create.user</code>) and/or dashes (eg. <code>my-action</code>). While the dot notation has no known side effects at this time, the dash notation will cause problems with the generated JavaScript for certain tags and themes. Use with caution, and always try to use camelcase action names (eg. <code>createUser</code>) or underscores (eg. <code>my_action</code>).</p>
                     </div>
     </div>
-
-
-<h2 id="ActionConfiguration-ActionMethods">Action Methods</h2>
-
-<p>The default entry method to the handler class is defined by the Action interface.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Action interface</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-public interface Action {
+<h2 id="ActionConfiguration-ActionMethods">Action Methods</h2><p>The default entry method to the handler class is defined by the Action interface.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Action interface</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[public interface Action {
     public String execute() throws Exception;
 }
 ]]></script>
-</div></div>
-
-<p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> Implementing the Action interface is optional. If Action is not implemented, the framework will use reflection to look for an <code>execute</code> method.</p>
-
-<p>Sometimes, developers like to create more than one entry point to an Action. For example, in the case of a data-access Action, a developer might want separate entry-points for <code>create</code>, <code>retrieve</code>, <code>update</code>, and <code>delete</code>. A different entry point can be specified by the <code>method</code> attribute.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;action name=&quot;delete&quot; class=&quot;example.CrudAction&quot; method=&quot;delete&quot;&gt;
+</div></div><p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> Implementing the Action interface is optional. If Action is not implemented, the framework will use reflection to look for an <code>execute</code> method.</p><p>Sometimes, developers like to create more than one entry point to an Action. For example, in the case of a data-access Action, a developer might want separate entry-points for <code>create</code>, <code>retrieve</code>, <code>update</code>, and <code>delete</code>. A different entry point can be specified by the <code>method</code> attribute.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;action name=&quot;delete&quot; class=&quot;example.CrudAction&quot; method=&quot;delete&quot;&gt;
     ...
 ]]></script>
-</div></div>
-
-<p><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"> If there is no <code>execute</code> method and no other method specified in the configuration the framework will throw an exception.</p>
-
-<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">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;action name=&quot;*Crud&quot; class=&quot;example.Crud&quot; method=&quot;{1}&quot;&gt;
+</div></div><p><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"> If there is no <code>execute</code> method and no other method specified in the configuration the framework will throw an exception.</p><p><code>DefaultActionInvocation</code> will try to call also&#160;<code>doDelete</code> if it couldn't find&#160;<code>delete</code> method in action's class.</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">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;action name=&quot;*Crud&quot; class=&quot;example.Crud&quot; method=&quot;{1}&quot;&gt;
     ...
 ]]></script>
-</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">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;action name=&quot;Crud_*&quot; class=&quot;example.Crud&quot; method=&quot;{1}&quot;&gt;
+</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">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;action name=&quot;Crud_*&quot; class=&quot;example.Crud&quot; method=&quot;{1}&quot;&gt;
 ]]></script>
-</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="aui-message problem shadowed information-macro">
+</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="aui-message problem shadowed information-macro">
                             <span class="aui-icon icon-problem">Icon</span>
                 <div class="message-content">
-                            <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="#ActionConfiguration-DynamicMethodInvocation">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>
+                            <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="#ActionConfiguration-DynamicMethodInvocation">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>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 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="#ActionConfiguration-WildcardMethod">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>&lt;package&gt;</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>&lt;allowed-methods&gt;</code> tag.   Then specify <code>&lt;allowed-methods&gt;</code> as a comma-separated list of method names in your <code>&lt;action&gt;</code>.  (If you specify a <code>method</code> attribute for your action, you do not need to list it in <code>&lt;allowed-methods&gt;</code>.)</p>
-
-<p>Note that you can specify <code>&lt;allowed-methods&gt;</code> even without <code>strict-method-invocation</code>.  This restricts access only for the specific actions that have <code>&lt;allowed-methods&gt;</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">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
+<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>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 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> me
 thod 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="#ActionConfiguration-WildcardMethod">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>&lt;package&gt;</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>&lt;allowed-methods&gt;</code> tag. Then specify <code>&lt;allowed-methods&gt;</code> as a comma-separated list of method names in your <code>&lt;action&gt;</code>. (If you specify a <code>method</code> attribute for your action, you do not need to list it in <code>&lt;allowed-methods&gt;</code>.)</p><p>Note that you can speci
 fy <code>&lt;allowed-methods&gt;</code> even without <code>strict-method-invocation</code>. This restricts access only for the specific actions that have <code>&lt;allowed-methods&gt;</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">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
 &lt;!DOCTYPE struts PUBLIC
 	&quot;-//Apache Software Foundation//DTD Struts Configuration 2.3//EN&quot;
 	&quot;http://struts.apache.org/dtds/struts-2.3.dtd&quot;&gt;
@@ -304,57 +216,25 @@ public interface Action {
   &lt;/package&gt;
 &lt;/struts&gt;
 ]]></script>
-</div></div>
-
-    <div class="aui-message problem shadowed information-macro">
+</div></div>    <div class="aui-message problem shadowed information-macro">
                             <span class="aui-icon icon-problem">Icon</span>
                 <div class="message-content">
                             <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">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;action name=&quot;Hello&quot;&gt;
+<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">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;action name=&quot;Hello&quot;&gt;
    // ...
 &lt;/action&gt;
 ]]></script>
-</div></div>
-
-<p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> The ActionSupport class has an <code>execute</code> method that returns "success" and an <code>input</code> method that returns "input".<br clear="none">
-<img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> To specify a different class as the default Action class, set the <code>default-class-ref</code> package attribute. </p>
-
-<p><img class="emoticon emoticon-light-on" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/lightbulb_on.png" data-emoticon-name="light-on" alt="(lightbulb)"> For more about using wildcards, see <a shape="rect" href="wildcard-mappings.html">Wildcard Mappings</a>.</p>
-
-<h2 id="ActionConfiguration-Post-BackDefault">Post-Back Default</h2>
-
-<p>A good practice is to link to actions rather than pages. Linking to actions encapsulates which server page renders, and ensures that an Action class can fire before a page renders. </p>
-
-<p>Another common workflow stategy is to first render a page using an alternate method, like <code>input</code> and then have it submit back to the default <code>execute</code> method. </p>
-
-<p>Using these two strategies together creates an opportunity to use a "post-back" form that doesn't specify an action. The form simply submits back to the action that created it.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Posting Back</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;s:form&gt;
+</div></div><p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> The ActionSupport class has an <code>execute</code> method that returns "success" and an <code>input</code> method that returns "input".<br clear="none"> <img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> To specify a different class as the default Action class, set the <code>default-class-ref</code> package attribute.</p><p><img class="emoticon emoticon-light-on" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/lightbulb_on.png" data-emoticon-name="light-on" alt="
 (lightbulb)"> For more about using wildcards, see <a shape="rect" href="wildcard-mappings.html">Wildcard Mappings</a>.</p><h2 id="ActionConfiguration-Post-BackDefault">Post-Back Default</h2><p>A good practice is to link to actions rather than pages. Linking to actions encapsulates which server page renders, and ensures that an Action class can fire before a page renders.</p><p>Another common workflow stategy is to first render a page using an alternate method, like <code>input</code> and then have it submit back to the default <code>execute</code> method.</p><p>Using these two strategies together creates an opportunity to use a "post-back" form that doesn't specify an action. The form simply submits back to the action that created it.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Posting Back</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;s:form&gt;
     &lt;s:textfield label=&quot;Please enter your name&quot; name=&quot;name&quot;/&gt;
     &lt;s:submit/&gt;
 &lt;/s:form&gt;
 ]]></script>
-</div></div>
-
-<h2 id="ActionConfiguration-ActionDefault">Action Default</h2>
-
-<p>Usually, if an action is requested, and the framework can't map the request to an action name, the result will be the usual "404 - Page not found" error. But, if you would prefer that an omnibus action handle any unmatched requests, you can specify a default action. If no other action matches, the default action is used instead.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;package name=&quot;Hello&quot; extends=&quot;action-default&quot;&gt;
+</div></div><h2 id="ActionConfiguration-ActionDefault">Action Default</h2><p>Usually, if an action is requested, and the framework can't map the request to an action name, the result will be the usual "404 - Page not found" error. But, if you would prefer that an omnibus action handle any unmatched requests, you can specify a default action. If no other action matches, the default action is used instead.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;package name=&quot;Hello&quot; extends=&quot;action-default&quot;&gt;
 
     &lt;default-action-ref name=&quot;UnderConstruction&quot;/&gt;
 
@@ -364,37 +244,19 @@ public interface Action {
 
     ...
 ]]></script>
-</div></div>
-
-<p>There are no special requirements for the default action. Each package can have its own default action, but there should only be one default action per namespace.</p>
-
-    <div class="aui-message problem shadowed information-macro">
+</div></div><p>There are no special requirements for the default action. Each package can have its own default action, but there should only be one default action per namespace.</p>    <div class="aui-message problem shadowed information-macro">
                     <p class="title">One to a Namespace</p>
                             <span class="aui-icon icon-problem">Icon</span>
                 <div class="message-content">
-                            
-<p>The default action features should be set up so that there is only one default action per namespace. If you have multiple packages declaring a default action with the same namespace, there is no guarantee which action will be the default.</p>
+                            <p>The default action features should be set up so that there is only one default action per namespace. If you have multiple packages declaring a default action with the same namespace, there is no guarantee which action will be the default.</p>
                     </div>
     </div>
-
-
-<h3 id="ActionConfiguration-WildcardDefault">Wildcard Default </h3>
-
-<p>Using wildcards is another approach to default actions. A wildcard action at the end of the configuration can be used to catch unmatched references. </p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;action name=&quot;*&quot;&gt;
+<h3 id="ActionConfiguration-WildcardDefault">Wildcard Default</h3><p>Using wildcards is another approach to default actions. A wildcard action at the end of the configuration can be used to catch unmatched references.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;action name=&quot;*&quot;&gt;
   &lt;result&gt;/{1}.jsp&lt;/result&gt;
 &lt;/action&gt;
 ]]></script>
-</div></div>
-
-<p>When a new action is needed, just add a stub page.</p>
-
-<p><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"> It's important to put a "catchall" wildcard mapping like this at the end of your configuration so it won't attempt to map every request!</p>
-
-<h2 id="ActionConfiguration-Next:">Next: <a shape="rect" href="wildcard-mappings.html">Wildcard Mappings</a></h2></div>
+</div></div><p>When a new action is needed, just add a stub page.</p><p><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"> It's important to put a "catchall" wildcard mapping like this at the end of your configuration so it won't attempt to map every request!</p><h2 id="ActionConfiguration-Next:">Next: <a shape="rect" href="wildcard-mappings.html">Wildcard Mappings</a></h2></div>
         </div>
 
         

Modified: websites/production/struts/content/development/2.x/docs/building-struts-2-normal-release.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/building-struts-2-normal-release.html (original)
+++ websites/production/struts/content/development/2.x/docs/building-struts-2-normal-release.html Thu Apr 24 18:18:19 2014
@@ -19,7 +19,7 @@ under the License. 
 -->
 <html>
 <head>
-    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
     <style type="text/css">
         .dp-highlighter {
             width:95% !important;
@@ -37,8 +37,8 @@ under the License. 
     <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
     <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
     <script src='http://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
-            <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
-    
+    <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+
     <script type="text/javascript">
         SyntaxHighlighter.defaults['toolbar'] = false;
         SyntaxHighlighter.all();
@@ -135,20 +135,24 @@ 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.rbtoc1396727562769 {padding: 0px;}
-div.rbtoc1396727562769 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1396727562769 li {margin-left: 0px;padding-left: 0px;}
-
-/*]]>*/</style></p><div class="toc-macro rbtoc1396727562769">
-<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-Besureyourlocalcopyisup-to-date">Be sure your local copy is up-to-date</a></li><li><span class="TOCOutline">3</span> <a shape="rect" href="#BuildingStruts2-Normalrelease-Createareleasebranch">Create a release branch</a></li><li><span class="TOCOutline">4</span> <a shape="rect" href="#BuildingStruts2-Normalrelease-Updateversionofarchetypes">Update version of archetypes</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-Movetheassem
 blies">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-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-(Optional)-UpdateSecurityBulletins">(Optional) - Update Security Bulletins</a></li
 ><li><span class="TOCOutline">15</span> <a shape="rect" href="#BuildingStruts2-Normalrelease-Updatesite">Update site</a></li><li><span class="TOCOutline">16</span> <a shape="rect" href="#BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)">Redeploy the draft docs (Optional)</a></li><li><span class="TOCOutline">17</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&#160;<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&#160;<code>/docs</code></li></ol><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">
+div.rbtoc1398363001683 {padding: 0px;}
+div.rbtoc1398363001683 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1398363001683 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1398363001683">
+<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-(Optional)-UpdateSecurityBulletins">(Optional) - Update Security Bulletins</a></li><li><span class="TOCOutline">16</span> <a shape="rect" href="#BuildingStruts2-Normalrelease-Updatesite">Update site</a></li><li><span class="TOCOutline">17</span> <a shape="rect" href="#BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)">Redeploy the draft docs (Optional)</a></li><li><span class="TOCOutline">18</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&#160;<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&#160;<code>/docs</code></li></ol><h3 id="BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft Docs when needed</h3><p>Checkout&#160;<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">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[cd struts-site
+mvn package]]></script>
+</div></div><p>If build will fail try again - don't use&#160;<code>clean</code>, the exporter is going to update only outdated pages. After successful export, commit updated files into&#160;<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">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[git checkout develop
 git pull
 
 git fetch origin --prune]]></script>
 </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">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[git flow release start X.X.X.X]]></script>
-</div></div><p>Now you should be on&#160;<code>release/X.X.X.X</code> branch (<code>git status</code>&#160;supposes confirm that)</p><h3 id="BuildingStruts2-Normalrelease-Updateversionofarchetypes">Update version of archetypes</h3><p>Edit <code>src/site/resources/archetype-catalog.xml</code> and change version of archetypes to current $VERSION, save and commit.</p><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">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[git flow release start X.X.X.X
+git flow release publish X.X.X.X]]></script>
+</div></div><p>Now you should be on&#160;<code>release/X.X.X.X</code> branch (<code>git status</code>&#160;supposes confirm that). You must push changes to remote repo as the Release plugins will push changes to remote as well.</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">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[mvn release:prepare -DautoVersionSubmodules=true -Dusername=yourSvnUsername -Dpassword=yourSvnPassword
 ]]></script>
 </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="aui-message warning shadowed information-macro">
@@ -200,35 +204,31 @@ rm *.asc.sha1
 ]]></script>
 </div></div><p>After that move the assemblies directory to the builds destination with</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[mv $VERSION /www/people.apache.org/builds/struts/]]></script>
-</div></div><h3 id="BuildingStruts2-Normalrelease-Announceavailability">Announce availability</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-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. <br clear="none"> 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) copy the Sources and Binaries:</p><div class="code panel pdl"
  style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><h3 id="BuildingStruts2-Normalrelease-Announceavailability">Announce availability</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&#160;<img class="emoticon emoticon-smile" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)">&#160;Switch to&#160;<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">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[git flow release finish -n X.X.X.X]]></script>
+</div></div><p><code>-n</code> option is need to avoid tagging the release, the Maven Release plugin did that already. If the release branch was published to the remote it won't be deleted locally, it must be done manually after removing branch from the remote:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[git push --delete origin release/X.X.X.X]]></script>
+</div></div><p>This will remove the branch from the remote, now we can merge once more the release branch (when on <code>develop</code>) and remove it</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[git merge --no-ff release/X.X.X.X
+git branch -d release/X.X.X.X]]></script>
+</div></div><p>Now both&#160;<code>master</code> and&#160;<code>develop</code> branches should be up to date with the changes introduced by the release.</p><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. <br clear="none"> 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) copy the Sources and Binaries:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ssh people.apache.org
 cd /www/people.apache.org/builds/struts/$VERSION
 cp struts-$VERSION-src.*  /www/www.apache.org/dist/struts/source
 cp struts-$VERSION-docs.*  /www/www.apache.org/dist/struts/documentation
 cp struts-$VERSION-lib.* /www/www.apache.org/dist/struts/library
 cp struts-$VERSION-apps.* /www/www.apache.org/dist/struts/examples
-cp struts-$VERSION-all.* /www/www.apache.org/dist/struts/binaries   
-]]></script>
-</div></div><p>If a new DTD was defined, add it to <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/struts/site/trunk/pom.xml">https://svn.apache.org/repos/asf/struts/site/trunk/pom.xml</a>, in <code>get-dtds</code> execution section.</p>    <div class="aui-message warning shadowed information-macro">
-                            <span class="aui-icon icon-warning">Icon</span>
-                <div class="message-content">
-                            <p>The default setup on people.apache.org will leave the files and directories only changeable by the user who creates them. The last two steps will allow future releases to go smoothly.</p>
-                    </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 <code>/www/www.apache.org/dist/struts/</code> to synchronise only the latest version with peers. All the files from <code>/www/www.apache.org/dist/</code> are always mirrored to <code><a shape="rect" class="external-link" href="http://archive.apache.org/dist/struts/">http://archive.apache.org/dist/struts/</a></code>. You can use the below command:</p><div class="preformatted panel" style="border-width
 : 1px;"><div class="preformattedContent panelContent">
+cp struts-$VERSION-all.* /www/www.apache.org/dist/struts/binaries   ]]></script>
+</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 <code>/www/www.apache.org/dist/struts/</code> to synchronise only the latest version with peers. All the files from <code>/www/www.apache.org/dist/</code> are always mirrored to <code><a shape="rect" class="external-link" href="http://archive.apache.org/dist/struts/">http://archive.apache.org/dist/struts/</a></code>. You can use the below command:</p><div class="preformatted panel" style="
 border-width: 1px;"><div class="preformattedContent panelContent">
 <pre>cd /www/www.apache.org/dist/struts/
 find . -type f -name "struts-2.3.x*" -exec rm -f {} \;
 </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-(Optional)-UpdateSecurityBulletins">(Optional) - Update Security Bulletins</h3><p>If the release will fix a - hopefully yet undisclosed - security issue, it's now time to update the <a shape="rect" href="security-bulletins.html">Security Bulletins</a> page and add a new announcement. For a template, just check former announcements</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">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[svn co https://svn.apache.org/repos/asf/struts/site/ struts-site
 ]]></script>
-</div></div></li><li>Update xml files<ul><li>struts-site/src/site/xdoc/announce.xml (if applicable, refer also to corresponding security bulletin)</li><li>struts-site/src/site/xdoc/downloads.xml (remove previous version)</li><li>struts-site/src/site/xdoc/download.xml (remove previous version)</li><li>struts-site/src/site/xdoc/index.xml</li><li>struts-site/src/site/site.xml</li><li>struts-site/src/site/resources/archetype-catalog.xml</li></ul></li><li>Commit the changes</li><li><p>Generate the site</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[mvn site:site
-]]></script>
-</div></div></li><li>Open <code>struts-site/target/site/index.html</code> and verify the urls and versions are right</li><li><p>Deploy site</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[mvn site-deploy
-]]></script>
-</div></div><p>It takes a few hours for the site changes to go live</p></li></ul><h3 id="BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)"><span style="line-height: 1.5625;">Redeploy the draft docs (Optional)</span></h3><p>Make public available all the pages that could leak confidential information about the vulnerability. Wait or manually export the space in Confluence. Build snapshot locally and copy <code>assembly/target/assembly/out/struts2-#.#.#-SNAPSHOT-docs.zip</code> to <code>people.apache.org</code> and update <code>/www/struts.apache.org/2.x/docs</code></p><h3 id="BuildingStruts2-Normalrelease-Postannouncements"><span style="line-height: 1.5625;">Post announcements</span></h3><p>We leave this as the last step, once the artifacts have had time to sync up on the mirrors. Target it to: <code>user@struts.a.o</code> and <code>announcements@struts.a.o</code>, samples are available at <a shape="rect" href="sample-announcements.html">Sample announcements</a> page</p></
 div>
+</div></div></li><li>If a new DTD was defined, add it to&#160;<code>source/dtds</code></li><li>Update current version and release date in&#160;<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&#160;<code>_config.yml</code>)</li><li><span style="line-height: 1.4285715;">struts-site/source/archetype-catalog.xml</span></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 b
 elow:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[svn co https://svn.apache.org/repos/infra/websites/production/struts/content struts-production]]></script>
+</div></div><p>It's a good idea to keep that working copy to be used with future releases. Right now copy content of&#160;<code>struts-site/content</code> to&#160;<code>struts-production</code>, then commit changes. Next step is to update exported wiki pages. With current approach the pages are kept in&#160;<code>struts-production/release/2.X.x/docs</code> where&#160;<code>X</code> is the current branch (ie. 2.3.x, 2.2.x and so on). Simply remove the whole content from under&#160;<code>/docs</code> and update it with docs from assembly (you can download one from Maven repository or copy generated during release process which supposes to be in&#160;<code>struts/assembly/target/cwiki</code>). And commit changes.</p><h3 id="BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)"><span style="line-height: 1.5625;">Redeploy the draft docs (Optional)</span></h3><p>Make public available all the pages that could leak confidential information about the vulnerability. Wait or manually e
 xport the space in Confluence. Build snapshot locally and copy <code>assembly/target/assembly/out/struts2-#.#.#-SNAPSHOT-docs.zip</code> to <code>people.apache.org</code> and update <code>/www/struts.apache.org/2.x/docs</code></p><h3 id="BuildingStruts2-Normalrelease-Postannouncements"><span style="line-height: 1.5625;">Post announcements</span></h3><p>We leave this as the last step, once the artifacts have had time to sync up on the mirrors. Target it to: <code>user@struts.a.o</code> and <code>announcements@struts.a.o</code>, samples are available at <a shape="rect" href="sample-announcements.html">Sample announcements</a> page</p></div>
         </div>
 
         

Modified: websites/production/struts/content/development/2.x/docs/debugging.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/debugging.html (original)
+++ websites/production/struts/content/development/2.x/docs/debugging.html Thu Apr 24 18:18:19 2014
@@ -19,7 +19,7 @@ under the License. 
 -->
 <html>
 <head>
-    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
     <style type="text/css">
         .dp-highlighter {
             width:95% !important;
@@ -37,9 +37,9 @@ under the License. 
     <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
     <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
     <script src='http://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
-            <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
-            <script src='http://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
-    
+    <script src='http://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
+    <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+
     <script type="text/javascript">
         SyntaxHighlighter.defaults['toolbar'] = false;
         SyntaxHighlighter.all();
@@ -135,22 +135,11 @@ under the License. 
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><p>Modern IDEs provide excellent support for debugging. In addition, the framework provides support for inspecting framework-specific objects at runtime. </p>
-
-<p>The <a shape="rect" href="debugginginterceptor.html">Debugging Interceptor</a> provides three debugging modes to provide insight into the data behind the page. The <code>xml</code> mode formats relevant framework objects as an XML document. The <code>console</code> mode provides a OGNL command line that accepts entry of runtime expressions, and the <code>browser</code> mode adds an interactive page that display objects from the Value Stack (it requires the Dojo Plugin)</p>
-
-<p>To use the debugging, first be sure that <code>struts.devMode</code> is set to <code>true</code> is enabled through the <a shape="rect" href="strutsproperties.html">struts.properties</a> file or <code>struts.xml</code> file, like: </p>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;constant name=&quot;struts.devMode&quot; value=&quot;true&quot; /&gt;
+            <div id="ConfluenceContent"><p>Modern IDEs provide excellent support for debugging. In addition, the framework provides support for inspecting framework-specific objects at runtime.</p><p>The <a shape="rect" href="debugginginterceptor.html">Debugging Interceptor</a> provides three debugging modes to provide insight into the data behind the page. The <code>xml</code> mode formats relevant framework objects as an XML document. The <code>console</code> mode provides a OGNL command line that accepts entry of runtime expressions, and the <code>browser</code> mode adds an interactive page that display objects from the Value Stack.</p><p>To use the debugging, first be sure that <code>struts.devMode</code> is set to <code>true</code> is enabled through the <a shape="rect" href="strutsproperties.html">struts.properties</a> file or <code>struts.xml</code> file, like:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;constant name=&quot;struts.devMode&quot; value=&quot;true&quot; /&gt;
 ]]></script>
-</div></div>
-
-<p>Then, whenever a page needs debugging, add <code>?debug=xml</code> or <code>?debug=console</code> or <code>?debug=browser</code> to the URL.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-- &lt;debug&gt;
+</div></div><p>Then, whenever a page needs debugging, add <code>?debug=xml</code> or <code>?debug=console</code> or <code>?debug=browser</code> to the URL.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[- &lt;debug&gt;
   &lt;parameters /&gt; 
 - &lt;context&gt;
 - &lt;struts.actionMapping&gt;
@@ -191,24 +180,18 @@ under the License. 
   &lt;/valueStack&gt;
   &lt;/debug&gt;
 ]]></script>
-</div></div>
-
-    <div class="aui-message success shadowed information-macro">
+</div></div>    <div class="aui-message success shadowed information-macro">
                             <span class="aui-icon icon-success">Icon</span>
                 <div class="message-content">
                             <p>For <code>?debug=xml</code> use Internet Explorer or an <a shape="rect" class="external-link" href="http://ietab.mozdev.org/" rel="nofollow">IE tab in FireFox</a></p>
                     </div>
     </div>
-
-
     <div class="aui-message success shadowed information-macro">
                             <span class="aui-icon icon-success">Icon</span>
                 <div class="message-content">
                             <p>For <code>?debug=console</code> you may need to relax any popup blockers</p>
                     </div>
     </div>
-
-
 <h2 id="Debugging-Next:DevelopmentMode">Next: <a shape="rect" href="devmode.html">Development Mode</a></h2></div>
         </div>