struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lukaszlen...@apache.org
Subject [13/14] struts-site git commit: Updates exported docs
Date Tue, 05 Sep 2017 13:20:05 GMT
http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/ajax-validation.html
----------------------------------------------------------------------
diff --git a/content/docs/ajax-validation.html b/content/docs/ajax-validation.html
index e67d57d..43cd880 100644
--- a/content/docs/ajax-validation.html
+++ b/content/docs/ajax-validation.html
@@ -34,20 +34,6 @@ under the License.
             color:                 #666;
         }
     </style>
-    <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
-    <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
-    <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script>
-    <script type="text/javascript">
-        SyntaxHighlighter.defaults['toolbar'] = false;
-        SyntaxHighlighter.all();
-    </script>
     <script type="text/javascript" language="javascript">
         var hide = null;
         var show = null;
@@ -139,17 +125,7 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1488973446459 {padding: 0px;}
-div.rbtoc1488973446459 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1488973446459 li {margin-left: 0px;padding-left: 0px;}
-
-/*]]>*/</style></p><div class="toc-macro rbtoc1488973446459">
-<ul class="toc-indentation"><li><a shape="rect" href="#AJAXValidation-Description">Description</a></li><li><a shape="rect" href="#AJAXValidation-Example">Example</a>
-<ul class="toc-indentation"><li><a shape="rect" href="#AJAXValidation-Createtheactionclass">Create the action class</a></li><li><a shape="rect" href="#AJAXValidation-MaptheAction">Map the Action</a></li><li><a shape="rect" href="#AJAXValidation-CreatetheJSP">Create the JSP</a></li><li><a shape="rect" href="#AJAXValidation-CustomTheme">Custom Theme</a></li><li><a shape="rect" href="#AJAXValidation-CSS">CSS</a></li><li><a shape="rect" href="#AJAXValidation-JavaScript">JavaScript</a></li></ul>
-</li><li><a shape="rect" href="#AJAXValidation-Howitworks">How it works</a></li><li><a shape="rect" href="#AJAXValidation-JSONValidationInterceptorparameters">JSONValidationInterceptor parameters</a></li><li><a shape="rect" href="#AJAXValidation-FlowchartofAJAXvalidation">Flow chart of AJAX validation</a></li></ul>
-</div><h2 id="AJAXValidation-Description">Description</h2><p>Struts provides <a shape="rect" href="client-validation.html">client side validation</a>(using JavaScript) for a few validators. Using AJAX validation, all <a shape="rect" href="validation.html">validators</a> available to the application on the server side can be used without forcing the page to reload, just to show validation errors. AJAX validation has a server side, which is in included in <a shape="rect" href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=34268">JSON Plugin</a> (an interceptor and a result). Client side must be handled by applictions themself. One reason for that is there are too many JavaScript frameworks and libraries. Struts has no preference which of them you use. Previous versions of Struts included a client side which was relying on the Dojo JS framework and was located in Struts Dojo plugin. That has been deprecated for a long time and was eventually removed.</p><h2 id="AJAXV
 alidation-Example">Example</h2><p>This example is taken from the Struts showcase application.</p><h3 id="AJAXValidation-Createtheactionclass">Create the action class</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;">public class AjaxFormSubmitAction extends ActionSupport {
+            <div id="ConfluenceContent"><h2 id="AJAXValidation-Description">Description</h2><p>Struts provides <a shape="rect" href="client-validation.html">client side validation</a>(using JavaScript) for a few validators. Using AJAX validation, all <a shape="rect" href="validation.html">validators</a> available to the application on the server side can be used without forcing the page to reload, just to show validation errors. AJAX validation has a server side, which is in included in <a shape="rect" href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=34268">JSON Plugin</a> (an interceptor and a result). Client side must be handled by applictions themself. One reason for that is there are too many JavaScript frameworks and libraries. Struts has no preference which of them you use. Previous versions of Struts included a client side which was relying on the Dojo JS framework and was located in Struts Dojo plugin. That has been deprecated for a long time and was ev
 entually removed.</p><h2 id="AJAXValidation-Example">Example</h2><p>This example is taken from the Struts showcase application.</p><h3 id="AJAXValidation-Createtheactionclass">Create the action class</h3><parameter ac:name="language">java</parameter><plain-text-body>public class AjaxFormSubmitAction extends ActionSupport {
     private String requiredValidatorField = null;
     private String requiredStringValidatorField = null;
     private Integer integerValidatorField = null;
@@ -240,9 +216,7 @@ div.rbtoc1488973446459 li {margin-left: 0px;padding-left: 0px;}
     public void setUrlValidatorField(String urlValidatorField) {
         this.urlValidatorField = urlValidatorField;
     }
-}</pre>
-</div></div><p>&#160;</p><h3 id="AJAXValidation-MaptheAction">Map the Action</h3><p>Note that is is not necessary when using <a shape="rect" href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=73711">Convention Plugin</a>.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;
+}</plain-text-body><p>&#160;</p><h3 id="AJAXValidation-MaptheAction">Map the Action</h3><p>Note that is is not necessary when using <a shape="rect" href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=73711">Convention Plugin</a>.</p><parameter ac:name="">XML</parameter><plain-text-body>&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;
 	
 &lt;struts&gt;
     &lt;package&gt;
@@ -252,9 +226,7 @@ div.rbtoc1488973446459 li {margin-left: 0px;padding-left: 0px;}
              &lt;result type="jsonActionRedirect"&gt;ajaxFormSubmitSuccess&lt;/result&gt;
          &lt;/action&gt;
     &lt;/package&gt;
-</pre>
-</div></div><p>AJAX validation is performed by the <em>jsonValidation</em> interceptor. This interceptor is included in the <em>jsonValidationWorkflowStack</em>, and is required in order to perform AJAX validation. Normal results(input, success, etc) should be provided for the action in the case that someone tries to access the action directly, in which case normal validation will be triggered. So, how does the <em>jsonValidation</em> know that it must perform AJAX validation vs regular validation? We will see that in a minute, but you don't need to know that in order to use AJAX validation. Same applies for specialized Redirect Result Type <em>jsonActionRedirect</em>.</p><h3 id="AJAXValidation-CreatetheJSP">Create the JSP</h3><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;">&lt;%@taglib prefix="s" uri="/struts-tags" %&gt;
+</plain-text-body><p>AJAX validation is performed by the <em>jsonValidation</em> interceptor. This interceptor is included in the <em>jsonValidationWorkflowStack</em>, and is required in order to perform AJAX validation. Normal results(input, success, etc) should be provided for the action in the case that someone tries to access the action directly, in which case normal validation will be triggered. So, how does the <em>jsonValidation</em> know that it must perform AJAX validation vs regular validation? We will see that in a minute, but you don't need to know that in order to use AJAX validation. Same applies for specialized Redirect Result Type <em>jsonActionRedirect</em>.</p><h3 id="AJAXValidation-CreatetheJSP">Create the JSP</h3><parameter ac:name="">HTML</parameter><plain-text-body>&lt;%@taglib prefix="s" uri="/struts-tags" %&gt;
 &lt;html&gt;
 &lt;head&gt;
     &lt;title&gt;Struts2 Showcase - Validation - AJAX Form Submit&lt;/title&gt;
@@ -280,11 +252,7 @@ div.rbtoc1488973446459 li {margin-left: 0px;padding-left: 0px;}
         &lt;s:submit label="Submit" cssClass="btn btn-primary"/&gt;
     &lt;/s:form&gt;
 &lt;/body&gt;
-&lt;/html&gt;&#160;</pre>
-</div></div><p>Things to note on this JSP:</p><ul><li>The <em>form</em> tag <strong>does not</strong> have <em>validate</em> set to <em>true</em>, which would perform client validation before the AJAX validation.</li><li>It uses a customized theme <em>ajaxErrorContainers</em>. The default Struts themes generate HTML-Elements to show validation errors only if errors are present when page is created on server side. But in order to show validation errors that arrive later via AJAX it is necessary to have error-container elements in DOM always.</li></ul><p>What happens if validation succeeds? That depends on your request parameters and action configuration. If you are using <em>jsonActionRedirect</em> result mentioned above the action will be executed while AJAX request is active and respond with JSON providing a new URL to load. Otherwise the AJAX response will be empty and the form must be submitted a 2nd time but as usual request, not AJAX.</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>Setting <em>validate</em> to <em>true</em> in the <em>form</em> tag will enable client side, JavaScript validation, which can be used along with AJAX validation (runs before the AJAX validation).</p></div></div><h3 id="AJAXValidation-CustomTheme">Custom Theme</h3><p>In this sample the&#160;<a shape="rect" href="struts-2-themes.html">custom theme</a> is based on <em>xhtml</em> theme. It is required to override 3 FTL files.</p><pre>theme.properties</pre><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: text; gutter: false; theme: Default" style="font-size:12px;">parent = xhtml</pre>
-</div></div><p>&#160;</p><pre>actionerror.ftl</pre><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;#--
+&lt;/html&gt;&#160;</plain-text-body><p>Things to note on this JSP:</p><ul><li>The <em>form</em> tag <strong>does not</strong> have <em>validate</em> set to <em>true</em>, which would perform client validation before the AJAX validation.</li><li>It uses a customized theme <em>ajaxErrorContainers</em>. The default Struts themes generate HTML-Elements to show validation errors only if errors are present when page is created on server side. But in order to show validation errors that arrive later via AJAX it is necessary to have error-container elements in DOM always.</li></ul><p>What happens if validation succeeds? That depends on your request parameters and action configuration. If you are using <em>jsonActionRedirect</em> result mentioned above the action will be executed while AJAX request is active and respond with JSON providing a new URL to load. Otherwise the AJAX response will be empty and the form must be submitted a 2nd time but as usual request, not AJAX.</p><parameter ac:n
 ame="">Client Validation</parameter><rich-text-body><p>Setting <em>validate</em> to <em>true</em> in the <em>form</em> tag will enable client side, JavaScript validation, which can be used along with AJAX validation (runs before the AJAX validation).</p></rich-text-body><h3 id="AJAXValidation-CustomTheme">Custom Theme</h3><p>In this sample the&#160;<a shape="rect" href="struts-2-themes.html">custom theme</a> is based on <em>xhtml</em> theme. It is required to override 3 FTL files.</p><pre>theme.properties</pre><parameter ac:name="language">text</parameter><plain-text-body>parent = xhtml</plain-text-body><p>&#160;</p><pre>actionerror.ftl</pre><parameter ac:name="language">xml</parameter><plain-text-body>&lt;#--
     Make sure element is always present. To be filled later via JS.
 --&gt;
 &lt;ul&lt;#rt/&gt;
@@ -307,9 +275,7 @@ div.rbtoc1488973446459 li {margin-left: 0px;padding-left: 0px;}
         &lt;/#if&gt;
     &lt;/#list&gt;
 &lt;/#if&gt;
-&lt;/ul&gt;</pre>
-</div></div><p>&#160;</p><pre>controlfooter.ftl</pre><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;">${parameters.after!}&lt;#t/&gt;
+&lt;/ul&gt;</plain-text-body><p>&#160;</p><pre>controlfooter.ftl</pre><parameter ac:name="language">xml</parameter><plain-text-body>${parameters.after!}&lt;#t/&gt;
     &lt;/td&gt;&lt;#lt/&gt;
 &lt;/tr&gt;
 &lt;#if (parameters.errorposition!"top") == 'bottom'&gt;
@@ -327,9 +293,7 @@ div.rbtoc1488973446459 li {margin-left: 0px;padding-left: 0px;}
 &lt;/#if&gt;
 &lt;/#if&gt;
 
-</pre>
-</div></div><p>&#160;</p><pre>controlheader-core.ftl</pre><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;">&#160;&lt;#--
+</plain-text-body><p>&#160;</p><pre>controlheader-core.ftl</pre><parameter ac:name="language">xml</parameter><plain-text-body>&#160;&lt;#--
     Always include elements to show errors. They may be filled later via AJAX.
 --&gt;
 &lt;#assign hasFieldErrors = parameters.name?? &amp;&amp; fieldErrors?? &amp;&amp; fieldErrors[parameters.name]??/&gt;
@@ -388,17 +352,13 @@ ${parameters.labelseparator!":"?html}&lt;#t/&gt;
 &lt;tr&gt;
 &lt;/#if&gt;
 
-</pre>
-</div></div><h3 id="AJAXValidation-CSS">CSS</h3><p>To show users some nice visual feedback while waiting for AJAX response you can use a little CSS. Remember to include the referenced <em>indicator.gif</em>.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: css; gutter: false; theme: Default" style="font-size:12px;">.ajaxVisualFeedback {
+</plain-text-body><h3 id="AJAXValidation-CSS">CSS</h3><p>To show users some nice visual feedback while waiting for AJAX response you can use a little CSS. Remember to include the referenced <em>indicator.gif</em>.</p><parameter ac:name="language">css</parameter><plain-text-body>.ajaxVisualFeedback {
     width: 16px;
     height: 16px;
     background-image: url('../images/indicator.gif');
     background-repeat: no-repeat;
     float: right;
-}</pre>
-</div></div><p>&#160;</p><h3 id="AJAXValidation-JavaScript">JavaScript</h3><p>Now this is where the magic happens. Here <em>jQuery</em> is used to register an eventhandler which intercepts form submits. It takes care of hiding validation errors that might be present, submit the form via AJAX and handle JSON responses.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: js; gutter: false; theme: Default" style="font-size:12px;"> /**
+}</plain-text-body><p>&#160;</p><h3 id="AJAXValidation-JavaScript">JavaScript</h3><p>Now this is where the magic happens. Here <em>jQuery</em> is used to register an eventhandler which intercepts form submits. It takes care of hiding validation errors that might be present, submit the form via AJAX and handle JSON responses.</p><parameter ac:name="language">js</parameter><plain-text-body> /**
   * Validates form per AJAX. To be called as onSubmit handler.
   *
   * @param event onSubmit event
@@ -500,23 +460,16 @@ function _handleValidationResult(form, errors) {
 // register onSubmit handler
 $(window).bind('load', function() {
     $('form').bind('submit', ajaxFormValidation);
-});</pre>
-</div></div><p>&#160;</p><h2 id="AJAXValidation-Howitworks">How it works</h2><p><em>jsonValidation</em> interceptor must be placed on a stack, following the <em>validation</em> interceptor. The interceptor itself won't perform any validation, but will check for validation errors on the action being invoked (assuming that the action is ValidationAware).</p><p>If you just want to use AJAX validation, without knowing the implementation details, you can skip this section.</p><p>When the <em>jsonValidation</em> interceptor is invoked, it will look for a parameter named <em>struts.enableJSONValidation</em>, this parameter <strong>must</strong> be set to <em>true</em>, otherwise the interceptor won't do anything. Then the interceptor will look for a parameter named <em>struts.validateOnly</em>, if this parameter exists, is set to <em>true</em>, and there are validation errors (o action errors) they will be serialized into JSON in the form:</p><div class="code panel pdl" style="border-width
 : 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: javascript; gutter: false; theme: Default" style="font-size:12px;">{
+});</plain-text-body><p>&#160;</p><h2 id="AJAXValidation-Howitworks">How it works</h2><p><em>jsonValidation</em> interceptor must be placed on a stack, following the <em>validation</em> interceptor. The interceptor itself won't perform any validation, but will check for validation errors on the action being invoked (assuming that the action is ValidationAware).</p><p>If you just want to use AJAX validation, without knowing the implementation details, you can skip this section.</p><p>When the <em>jsonValidation</em> interceptor is invoked, it will look for a parameter named <em>struts.enableJSONValidation</em>, this parameter <strong>must</strong> be set to <em>true</em>, otherwise the interceptor won't do anything. Then the interceptor will look for a parameter named <em>struts.validateOnly</em>, if this parameter exists, is set to <em>true</em>, and there are validation errors (o action errors) they will be serialized into JSON in the form:</p><parameter ac:name="">JavaScript</para
 meter><plain-text-body>{
     "errors": ["Global Error 1", "Global Error 2"],
     "fieldErrors": {
         "field1": ["Field 1 Error 1", "Field 1 Error 2"],
         "field1": ["Field 2 Error 1", "Field 2 Error 2"]  
     }
 }
-</pre>
-</div></div><p>If the action implements the <em>ModelDrive</em> interface, "model." will be stripped from the field names in the returned JSON. If validation succeeds (and&#160;<em>struts.validateOnly</em> is true), an empty JSON string will be returned:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: javascript; gutter: false; theme: Default" style="font-size:12px;">{}
-</pre>
-</div></div><p>If <em>struts.validateOnly</em> is false the action and result are executed. In this case <em>jsonActionRedirect</em> result is very useful. It creates a JSON response in the form:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: javascript; gutter: false; theme: Default" style="font-size:12px;">{"location": "&lt;url to be loaded next&gt;"}
-</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>Remember to set struts.enableJSONValidation=true in the request to enable AJAX validation</p></div></div><h2 id="AJAXValidation-JSONValidationInterceptorparameters">JSONValidationInterceptor parameters</h2><p>The following request parameters can be used to enable exposing validation errors:</p><ul style="list-style-type: square;"><li><strong>struts.enableJSONValidation</strong> - a request parameter&#160;must be set to <strong>true</strong>&#160;to use this interceptor</li><li><strong>struts.validateOnly</strong> - If the request has this parameter, execution will return after validation (action won't be executed). If <strong>struts.validateOnly</strong>&#160;is set to false you may want to use <a shape="rect" class="createlink" href="https://cwiki
 .apache.org/confluence/pages/createpage.action?spaceKey=WW&amp;title=JSONActionRedirectResult&amp;linkCreation=true&amp;fromPageId=13850">JSONActionRedirectResult</a></li><li><strong>struts.JSONValidation.no.encoding</strong> - If the request has this parameter set to<strong> true,</strong> the character encoding will <strong>NOT</strong> be set on the response - is needed in portlet environment</li></ul><p>You can override names of these parameters by specifying the following parameters when setting up a stack:</p><ul style="list-style-type: square;"><li><strong>validateJsonParam</strong>&#160;- to override name of&#160;<strong>struts.enableJSONValidation</strong><strong><br clear="none"></strong></li><li><strong>validateOnlyParam</strong> - to override name of <strong>struts.validateOnly</strong></li><li><strong>noEncodingSetParam</strong> - to override name of&#160;<strong>struts.JSONValidation.no.encoding</strong></li><li><strong>validationFailedStatus</strong> - status to be se
 t on response when there are validation errors, by default <strong>400</strong></li></ul><p><strong><br clear="none"></strong></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">&#160;Parameters overriding is available since Struts 2.5.9</div></div><h2 id="AJAXValidation-FlowchartofAJAXvalidation">Flow chart of AJAX validation</h2><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>Some details are omitted, like results used.</p></div></div><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-info
 rmation-macro-body"><p>As explained above: there is a case where form is submitted twice, one time as AJAX with validation only and another time as usual submit.</p></div></div><p><a shape="rect" href="ajax-validation.data/struts2-ajax-vali-flow.png?version=2&amp;modificationDate=1454052624000&amp;api=v2" data-linked-resource-id="61338002" data-linked-resource-version="2" data-linked-resource-type="attachment" data-linked-resource-default-alias="struts2-ajax-vali-flow.png" data-nice-type="Image" data-linked-resource-content-type="image/png" data-linked-resource-container-id="13850" data-linked-resource-container-version="47"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="ajax-validation.data/struts2-ajax-vali-flow.png"></span></a></p><p>&#160;</p></div>
+</plain-text-body><p>If the action implements the <em>ModelDrive</em> interface, "model." will be stripped from the field names in the returned JSON. If validation succeeds (and&#160;<em>struts.validateOnly</em> is true), an empty JSON string will be returned:</p><parameter ac:name="">JavaScript</parameter><plain-text-body>{}
+</plain-text-body><p>If <em>struts.validateOnly</em> is false the action and result are executed. In this case <em>jsonActionRedirect</em> result is very useful. It creates a JSON response in the form:</p><parameter ac:name="">JavaScript</parameter><plain-text-body>{"location": "&lt;url to be loaded next&gt;"}
+</plain-text-body><rich-text-body><p>Remember to set struts.enableJSONValidation=true in the request to enable AJAX validation</p></rich-text-body><h2 id="AJAXValidation-JSONValidationInterceptorparameters">JSONValidationInterceptor parameters</h2><p>The following request parameters can be used to enable exposing validation errors:</p><ul style="list-style-type: square;"><li><strong>struts.enableJSONValidation</strong> - a request parameter&#160;must be set to <strong>true</strong>&#160;to use this interceptor</li><li><strong>struts.validateOnly</strong> - If the request has this parameter, execution will return after validation (action won't be executed). If <strong>struts.validateOnly</strong>&#160;is set to false you may want to use <a shape="rect" class="createlink" href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&amp;title=JSONActionRedirectResult&amp;linkCreation=true&amp;fromPageId=13850">JSONActionRedirectResult</a></li><li><strong>struts.JSONVal
 idation.no.encoding</strong> - If the request has this parameter set to<strong> true,</strong> the character encoding will <strong>NOT</strong> be set on the response - is needed in portlet environment</li></ul><p>You can override names of these parameters by specifying the following parameters when setting up a stack:</p><ul style="list-style-type: square;"><li><strong>validateJsonParam</strong>&#160;- to override name of&#160;<strong>struts.enableJSONValidation</strong><strong><br clear="none"></strong></li><li><strong>validateOnlyParam</strong> - to override name of <strong>struts.validateOnly</strong></li><li><strong>noEncodingSetParam</strong> - to override name of&#160;<strong>struts.JSONValidation.no.encoding</strong></li><li><strong>validationFailedStatus</strong> - status to be set on response when there are validation errors, by default <strong>400</strong></li></ul><p><strong><br clear="none"></strong></p><rich-text-body>&#160;Parameters overriding is available since Stru
 ts 2.5.9</rich-text-body><h2 id="AJAXValidation-FlowchartofAJAXvalidation">Flow chart of AJAX validation</h2><parameter ac:name="">Client Validation</parameter><rich-text-body><p>Some details are omitted, like results used.</p></rich-text-body><parameter ac:name="">Client Validation</parameter><rich-text-body><p>As explained above: there is a case where form is submitted twice, one time as AJAX with validation only and another time as usual submit.</p></rich-text-body><p><a shape="rect" href="ajax-validation.data/struts2-ajax-vali-flow.png?version=2&amp;modificationDate=1454052624000&amp;api=v2" data-linked-resource-id="61338002" data-linked-resource-version="2" data-linked-resource-type="attachment" data-linked-resource-default-alias="struts2-ajax-vali-flow.png" data-nice-type="Image" data-linked-resource-content-type="image/png" data-linked-resource-container-id="13850" data-linked-resource-container-version="48"><span class="confluence-embedded-file-wrapper"><img class="confluenc
 e-embedded-image" src="ajax-validation.data/struts2-ajax-vali-flow.png"></span></a></p><p>&#160;</p></div>
         </div>
 
         

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/alias-interceptor.html
----------------------------------------------------------------------
diff --git a/content/docs/alias-interceptor.html b/content/docs/alias-interceptor.html
index 6de478d..5138a6b 100644
--- a/content/docs/alias-interceptor.html
+++ b/content/docs/alias-interceptor.html
@@ -166,7 +166,7 @@ action this interceptor is applied to has a setter named <i>alias1</i>, <i>alias
 <h2 id="AliasInterceptor-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
     &lt;!-- The value for the foo parameter will be applied as if it were named bar --&gt;
     &lt;param name=&quot;aliases&quot;&gt;#{ &#39;foo&#39; : &#39;bar&#39; }&lt;/param&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/annotationworkflowinterceptor.html
----------------------------------------------------------------------
diff --git a/content/docs/annotationworkflowinterceptor.html b/content/docs/annotationworkflowinterceptor.html
index 122fb70..8e1721f 100644
--- a/content/docs/annotationworkflowinterceptor.html
+++ b/content/docs/annotationworkflowinterceptor.html
@@ -154,7 +154,7 @@ After.</p>
 <h2 id="AnnotationWorkflowInterceptor-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
  public class BaseAnnotatedAction {
  	protected String log = &quot;&quot;;
 
@@ -191,7 +191,7 @@ After.</p>
 </div></div>
 <p>Configure a stack in struts.xml that replaces the PrepareInterceptor with the AnnotationWorkflowInterceptor:</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;">
+<pre class="brush: bash; gutter: false; theme: Confluence" style="font-size:12px;">
 &lt;interceptor-stack name="annotatedStack"&gt;
 	&lt;interceptor-ref name="static-params"/&gt;
 	&lt;interceptor-ref name="params"/&gt;
@@ -202,7 +202,7 @@ After.</p>
 </div></div>
 <p>Given an Action, AnnotatedAction, add a reference to the AnnotationWorkflowInterceptor interceptor.</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;">
+<pre class="brush: bash; gutter: false; theme: Confluence" style="font-size:12px;">
 &lt;action name="AnnotatedAction" class="com.examples.AnnotatedAction"&gt;
    &lt;interceptor-ref name="annotationWorkflow"/&gt;
    &lt;result name="success" type="freemarker"&gt;good_result.ftl&lt;/result&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/append.html
----------------------------------------------------------------------
diff --git a/content/docs/append.html b/content/docs/append.html
index eeb0f2b..db5571b 100644
--- a/content/docs/append.html
+++ b/content/docs/append.html
@@ -159,7 +159,7 @@ the following will be how the appended iterator entries will be arranged:</p>
 <h2 id="append-Example">Example</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 public class AppendIteratorTagAction extends ActionSupport {
 
  private List myList1;
@@ -194,7 +194,7 @@ public class AppendIteratorTagAction extends ActionSupport {
 ]]></script>
 </div></div>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;s:append var=&quot;myAppendIterator&quot;&gt;
      &lt;s:param value=&quot;%{myList1}&quot; /&gt;
      &lt;s:param value=&quot;%{myList2}&quot; /&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/basic-validation.html
----------------------------------------------------------------------
diff --git a/content/docs/basic-validation.html b/content/docs/basic-validation.html
index c72a41a..685cee5 100644
--- a/content/docs/basic-validation.html
+++ b/content/docs/basic-validation.html
@@ -34,20 +34,6 @@ under the License.
             color:                 #666;
         }
     </style>
-    <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
-    <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
-    <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script>
-    <script type="text/javascript">
-        SyntaxHighlighter.defaults['toolbar'] = false;
-        SyntaxHighlighter.all();
-    </script>
     <script type="text/javascript" language="javascript">
         var hide = null;
         var show = null;
@@ -139,109 +125,12 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><p>Let's configure a basic validation workflow, step by step.</p><h2 id="BasicValidation-Step1">Step 1</h2><p>Create the input form.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
-
-&lt;html&gt;
-&lt;head&gt;
-	&lt;title&gt;Struts2 Showcase - Validation - Basic&lt;/title&gt;
-	&lt;s:head/&gt;
-&lt;/head&gt;
-
-&lt;body&gt;
-
-&lt;div class=&quot;page-header&quot;&gt;
-	&lt;h1&gt;Basic validation Example&lt;/h1&gt;
-&lt;/div&gt;
-
-&lt;div class=&quot;container-fluid&quot;&gt;
-	&lt;div class=&quot;row&quot;&gt;
-		&lt;div class=&quot;col-md-12&quot;&gt;
-
-			&lt;p&gt;
-				&lt;b&gt;What is your favorite color?&lt;/b&gt;
-
-			&lt;p/&gt;
-
-			&lt;s:form method=&quot;post&quot;&gt;
-				&lt;s:textfield label=&quot;Name&quot; name=&quot;name&quot;/&gt;
-				&lt;s:textfield label=&quot;Age&quot; name=&quot;age&quot;/&gt;
-				&lt;s:textfield label=&quot;Favorite color&quot; name=&quot;answer&quot;/&gt;
-				&lt;s:submit cssClass=&quot;btn btn-primary&quot;/&gt;
-			&lt;/s:form&gt;
-		&lt;/div&gt;
-	&lt;/div&gt;
-&lt;/div&gt;
-&lt;/body&gt;
-&lt;/html&gt;
-]]></script>
-</div></div><h2 id="BasicValidation-Step2">Step 2</h2><p>Create the Action class.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
-
-public class QuizAction extends ActionSupport {
-
-	private static final long serialVersionUID = -7505437345373234225L;
-
-	String name;
-	int age;
-	String answer;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public int getAge() {
-		return age;
-	}
-
-	public void setAge(int age) {
-		this.age = age;
-	}
-
-	public String getAnswer() {
-		return answer;
-	}
-
-	public void setAnswer(String answer) {
-		this.answer = answer;
-	}
-}
-
-]]></script>
-</div></div><h2 id="BasicValidation-Step3">Step 3</h2><p>Create the validators. The <code>validation.xml</code> format is either <code>&lt;ActionClassName&gt;-validation.xml</code> or <code>&lt;ActionClassName&gt;-&lt;ActionAliasName&gt;-validation.xml</code>.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
-&lt;!--
-    Add the following DOCTYPE declaration as first line of your XXX-validation.xml file:
-    &lt;!DOCTYPE validators PUBLIC &quot;-//Apache Struts//XWork Validator 1.0.2//EN&quot; &quot;http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd&quot;&gt;
---&gt;
-&lt;validators&gt;
-    &lt;field name=&quot;name&quot;&gt;
-        &lt;field-validator type=&quot;requiredstring&quot;&gt;
-            &lt;message&gt;You must enter a name&lt;/message&gt;
-        &lt;/field-validator&gt;
-    &lt;/field&gt;
-    &lt;field name=&quot;age&quot;&gt;
-        &lt;field-validator type=&quot;int&quot;&gt;
-            &lt;param name=&quot;min&quot;&gt;13&lt;/param&gt;
-            &lt;param name=&quot;max&quot;&gt;19&lt;/param&gt;
-            &lt;message&gt;Only people ages 13 to 19 may take this quiz&lt;/message&gt;
-        &lt;/field-validator&gt;
-    &lt;/field&gt;
-&lt;/validators&gt;
-
-]]></script>
-</div></div><h2 id="BasicValidation-Step4">Step 4</h2><p>Make sure there is a result for "input" listed in the struts.xml for when the validation fails:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;action name="HelloWorld" class="tutorial.HelloWorld"&gt;
+            <div id="ConfluenceContent"><p>Let's configure a basic validation workflow, step by step.</p><h2 id="BasicValidation-Step1">Step 1</h2><p>Create the input form.<plain-text-body>{snippet:id=basicValidation|javadoc=false|lang=xml|url=struts2/apps/showcase/src/main/webapp/WEB-INF/validation/quiz-basic.jsp}</plain-text-body></p><h2 id="BasicValidation-Step2">Step 2</h2><p>Create the Action class.<plain-text-body>{snippet:id=quizAction|javadoc=false|lang=java|url=struts2/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/QuizAction.java}</plain-text-body></p><h2 id="BasicValidation-Step3">Step 3</h2><p>Create the validators. The <code>validation.xml</code> format is either <code>&lt;ActionClassName&gt;-validation.xml</code> or <code>&lt;ActionClassName&gt;-&lt;ActionAliasName&gt;-validation.xml</code>.<plain-text-body>{snippet:id=quizValidators|javadoc=false|lang=xml|url=struts2/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/QuizAction
 -validation.xml}</plain-text-body></p><h2 id="BasicValidation-Step4">Step 4</h2><p>Make sure there is a result for "input" listed in the struts.xml for when the validation fails:</p><parameter ac:name="">xml</parameter><plain-text-body>&lt;action name="HelloWorld" class="tutorial.HelloWorld"&gt;
 &lt;result name="success"&gt;/tutorial/createconfirm.jsp&lt;/result&gt;
 &lt;result name="error"&gt;/tutorial/error.jsp&lt;/result&gt;
 &lt;result name="input"&gt;/tutorial/create.jsp&lt;/result&gt;
 &lt;/action&gt;
-</pre>
-</div></div><p>If you don't have this, you'll get a: "No result defined for action xxx.xxx.tutorial.HellowWorld and result input" error</p></div>
+</plain-text-body><p>If you don't have this, you'll get a: "No result defined for action xxx.xxx.tutorial.HellowWorld and result input" error</p></div>
         </div>
 
         

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/bean.html
----------------------------------------------------------------------
diff --git a/content/docs/bean.html b/content/docs/bean.html
index 24dbed6..d0ca429 100644
--- a/content/docs/bean.html
+++ b/content/docs/bean.html
@@ -157,7 +157,7 @@ stack's Context.</p>
 <h1 id="bean-Examples">Examples</h1>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;-- in freemarker form --&gt;
 [@s.bean name=&quot;org.apache.struts2.example.counter.SimpleCounter&quot; var=&quot;counter&quot;]
   [s:param name=&quot;foo&quot; value=&quot;BAR&quot;/]

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/before-annotation.html
----------------------------------------------------------------------
diff --git a/content/docs/before-annotation.html b/content/docs/before-annotation.html
index 5b03a61..3de59fc 100644
--- a/content/docs/before-annotation.html
+++ b/content/docs/before-annotation.html
@@ -156,7 +156,7 @@ under the License.
 <h2 id="BeforeAnnotation-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 public class SampleAction extends ActionSupport {
 
  @Before

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/beforeresult-annotation.html
----------------------------------------------------------------------
diff --git a/content/docs/beforeresult-annotation.html b/content/docs/beforeresult-annotation.html
index fe44a7e..eaa2a8a 100644
--- a/content/docs/beforeresult-annotation.html
+++ b/content/docs/beforeresult-annotation.html
@@ -156,7 +156,7 @@ under the License.
 <h2 id="BeforeResultAnnotation-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 public class SampleAction extends ActionSupport {
 
  @BeforeResult

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/bind.html
----------------------------------------------------------------------
diff --git a/content/docs/bind.html b/content/docs/bind.html
index 6554e61..8b426f3 100644
--- a/content/docs/bind.html
+++ b/content/docs/bind.html
@@ -34,20 +34,6 @@ under the License.
             color:                 #666;
         }
     </style>
-    <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
-    <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
-    <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script>
-    <script type="text/javascript">
-        SyntaxHighlighter.defaults['toolbar'] = false;
-        SyntaxHighlighter.all();
-    </script>
     <script type="text/javascript" language="javascript">
         var hide = null;
         var show = null;
@@ -139,23 +125,16 @@ 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>To use this tag:</p>
-<ul><li>Add: <em>&lt;%@ taglib prefix="sx" uri="/struts-dojo-tags" %&gt;</em> to your page.</li><li>The <a shape="rect" href="dojo-head.html">head</a> tag must be included on the page, which can be configured for performance or debugging purposes.</li><li>If the parseContent parameter for the <a shape="rect" href="dojo-head.html">head</a> tag is false (it is false by default), then the <strong>id</strong> tag is required.</li></ul>
-</div></div>
-<div class="confluence-information-macro confluence-information-macro-tip"><p class="title">Additional Examples</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
-<p>For more examples see <a shape="rect" href="ajax-and-javascript-recipes.html">Ajax and JavaScript Recipes</a></p></div></div>
+            <div id="ConfluenceContent"><parameter ac:name=""><a shape="rect" href="ajax-common-header.html">ajax common header</a></parameter><parameter ac:name="nopanel">true</parameter>
 
 <h2 id="bind-Description">Description</h2>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<plain-text-body>{snippet:id=javadoc|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java}</plain-text-body>
 
 <p>There's a bug in  IE6/IE7 which makes impossible to use the target's attribute with a parent Div, because such Div's content's are overwritten with the tag's <em>loadingText</em>. Resulting in an "undefined" message in the content's, instead of the result of the request.</p>
 
 <p>One possible alternative is to set <em>showLoadingText="false"</em> and set the indicator attribute to an element showing the desired loading text or image (outside the div).</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;">
+<parameter ac:name="">xml</parameter><plain-text-body>
 &lt;img id="loadingImage" src="images/loadingAnimation.gif" style="display:none"/&gt;
 &lt;s:div id="parentDiv"&gt;
     &lt;s:form action="actionName"&gt;
@@ -163,25 +142,24 @@ under the License.
         &lt;sx:bind sources="btn" events="onclick" targets="parentDiv" showLoadingText="false" indicator="loadingImage"/&gt;
     &lt;/s:form&gt;
 &lt;/s:div&gt;
-</pre>
-</div></div>
+</plain-text-body>
 
 <h2 id="bind-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">&#160;</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">afterNotifyTopics</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="t
 op">Comma delimmited list of topics that will published after the request(if the request succeeds)</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">ajaxAfterValidation</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">Make an asynchronous request if validation succeeds. Only valid is 'validate' is 'true'</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">beforeNotifyTopics</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">Comma delim
 mited list of topics that will published before the request</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">errorNotifyTopics</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">Comma delimmited list of topics that will published after the request(if the request fails)</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">errorText</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 text to display to the user if the is an error fetching the
  content</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">events</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">Comma delimited list of event names to attach to</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">executeScripts</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">Javascript code in the fetched content will be executed</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">formFilter</td><td align="left" co
 lspan="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">Function name used to filter the fields of the form.</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">formId</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">Form id whose fields will be serialized and passed as parameters</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">handler</td><td align="left" colspan="1" rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1" valign="top"></td><td al
 ign="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">Javascript function name that will make the request</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">highlightColor</td><td align="left" colspan="1" rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1" valign="top">none</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">Color used to perform a highlight effect on the elements specified in the 'targets' attribute</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">highlightDuration</td><td align="left" colspan="1" rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1" valign="top">2000</td><td align="left" colspan="1" rowspan="1" valign="top">false</t
 d><td align="left" colspan="1" rowspan="1" valign="top">Integer</td><td align="left" colspan="1" rowspan="1" valign="top">Duration of highlight effect in milliseconds. Only valid if 'highlightColor' attribute is set</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">href</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 URL to call to obtain the content. Note: If used with ajax context, the value must be set as an url tag value.</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" colspa
 n="1" rowspan="1" valign="top">String</td><td align="left" colspan="1" rowspan="1" valign="top">The id to use for the element</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">indicator</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">Id of element that will be shown while making request</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">listenTopics</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">Topic that will trigger the remote call<
 /td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">loadingText</td><td align="left" colspan="1" rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1" valign="top">Loading...</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">Text to be shown while content is being fetched</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">notifyTopics</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">Comma delimmited list of topics that will published before and after the request, and on errors</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="to
 p">separateScripts</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">String</td><td align="left" colspan="1" rowspan="1" valign="top">Run scripts in a separate scope, unique for each tag</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">showErrorTransportText</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">Set whether errors will be shown or not</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">showLoadingText</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">Show loading text on targets</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">sources</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">Comma delimited list of ids of the elements to attach to</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">targets</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">Comma delimited list of ids of the elements whose content will be updated</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">transport</td><td align="left" colspan="1" rowspan="1" valign="top">false</td><td align="left" colspan="1" rowspan="1" valign="top">XMLHTTPTransport</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">Transport used by Dojo to make the request</td></tr><tr><td align="left" colspan="1" rowspan="1" valign="top">validate</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">Perform Ajax validation. 'ajaxValidation' interceptor must be applied to action</td></tr></table></p>
+<plain-text-body>{snippet:id=tagattributes|javadoc=false|url=struts2-tags/ajax/bind.html}</plain-text-body>
 
 <h2 id="bind-Examples">Examples</h2>
 <p>Without attaching to an event, listening to a topic (used to make an Ajax call):</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<plain-text-body>{snippet:id=example0|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java}</plain-text-body>
 <p>Attached to event 'onclick' on submit button:</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<plain-text-body>{snippet:id=example1|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java}</plain-text-body>
 <p>Submit form:</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<plain-text-body>{snippet:id=example2|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java}</plain-text-body>
 <p>Using beforeNotifyTopics:</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<plain-text-body>{snippet:id=example4|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java}</plain-text-body>
 <p>Using afterNotifyTopics and highlight:</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
+<plain-text-body>{snippet:id=example5|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java}</plain-text-body>
 <p>Using errorNotifyTopics and indicator:</p>
-<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div></div>
+<plain-text-body>{snippet:id=example6|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java}</plain-text-body></div>
         </div>
 
         

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/chain-result.html
----------------------------------------------------------------------
diff --git a/content/docs/chain-result.html b/content/docs/chain-result.html
index 786434c..b00f0aa 100644
--- a/content/docs/chain-result.html
+++ b/content/docs/chain-result.html
@@ -156,7 +156,7 @@ actions that could be chained to</li></ul><p></p>
 <h1 id="ChainResult-Examples">Examples</h1>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;package name=&quot;public&quot; extends=&quot;struts-default&quot;&gt;
     &lt;!-- Chain creatAccount to login, using the default parameter --&gt;
     &lt;action name=&quot;createAccount&quot; class=&quot;...&quot;&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/checkbox.html
----------------------------------------------------------------------
diff --git a/content/docs/checkbox.html b/content/docs/checkbox.html
index 12c6205..71145e2 100644
--- a/content/docs/checkbox.html
+++ b/content/docs/checkbox.html
@@ -152,7 +152,7 @@ under the License.
 <h2 id="checkbox-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 JSP:
 &lt;s:checkbox label=&quot;checkbox test&quot; name=&quot;checkboxField1&quot; value=&quot;aBoolean&quot; fieldValue=&quot;true&quot;/&gt;
 

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/checkboxlist.html
----------------------------------------------------------------------
diff --git a/content/docs/checkboxlist.html b/content/docs/checkboxlist.html
index 9301f57..b831115 100644
--- a/content/docs/checkboxlist.html
+++ b/content/docs/checkboxlist.html
@@ -160,7 +160,7 @@ Everything else will result in listkey and listvalue to be null and not used.
 <h2 id="checkboxlist-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;s:checkboxlist name=&quot;foo&quot; list=&quot;bar&quot;/&gt;
 ]]></script>
 </div></div></div>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/client-validation.html
----------------------------------------------------------------------
diff --git a/content/docs/client-validation.html b/content/docs/client-validation.html
index 74fd170..73e71b3 100644
--- a/content/docs/client-validation.html
+++ b/content/docs/client-validation.html
@@ -34,20 +34,6 @@ under the License.
             color:                 #666;
         }
     </style>
-    <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
-    <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
-    <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script>
-    <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script>
-    <script type="text/javascript">
-        SyntaxHighlighter.defaults['toolbar'] = false;
-        SyntaxHighlighter.all();
-    </script>
     <script type="text/javascript" language="javascript">
         var hide = null;
         var show = null;
@@ -139,115 +125,19 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><p>Let's create a Client-Side validation workflow, step by step.</p><p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB/5997/6f42626d00e36f53fe51440403446ca61552e2a2.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> The <code>validate</code> attribute is set to <code>true</code>.</p><p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB/5997/6f42626d00e36f53fe51440403446ca61552e2a2.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> Some themes do not support client-side validation.</p><h2 id="ClientValidation-Step1">Step 1</h2><p>Create the form.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
-
-&lt;html&gt;
-&lt;head&gt;
-	&lt;title&gt;Struts2 Showcase - Validation - Basic&lt;/title&gt;
-	&lt;s:head/&gt;
-&lt;/head&gt;
-
-&lt;body&gt;
-
-&lt;div class=&quot;page-header&quot;&gt;
-	&lt;h1&gt;Basic validation Example&lt;/h1&gt;
-&lt;/div&gt;
-
-&lt;div class=&quot;container-fluid&quot;&gt;
-	&lt;div class=&quot;row&quot;&gt;
-		&lt;div class=&quot;col-md-12&quot;&gt;
-
-
-			&lt;s:form method=&quot;post&quot; validate=&quot;true&quot;&gt;
-				&lt;s:textfield label=&quot;Name&quot; name=&quot;name&quot;/&gt;
-				&lt;s:textfield label=&quot;Age&quot; name=&quot;age&quot;/&gt;
-				&lt;s:textfield label=&quot;Favorite color&quot; name=&quot;answer&quot;/&gt;
-				&lt;s:submit cssClass=&quot;btn btn-primary&quot;/&gt;
-			&lt;/s:form&gt;
-		&lt;/div&gt;
-	&lt;/div&gt;
-&lt;/div&gt;
-&lt;/body&gt;
-&lt;/html&gt;
-
-]]></script>
-</div></div><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB/5997/6f42626d00e36f53fe51440403446ca61552e2a2.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> This case uses the default xhtml theme, so the <code>&lt;s:head &gt;</code> tag is used to link a style sheet.<h2 id="ClientValidation-Step2">Step 2</h2><p>Create the Action class.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
-
-public class QuizAction extends ActionSupport {
-
-	private static final long serialVersionUID = -7505437345373234225L;
-
-	String name;
-	int age;
-	String answer;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public int getAge() {
-		return age;
-	}
-
-	public void setAge(int age) {
-		this.age = age;
-	}
-
-	public String getAnswer() {
-		return answer;
-	}
-
-	public void setAnswer(String answer) {
-		this.answer = answer;
-	}
-}
-
-]]></script>
-</div></div><h3 id="ClientValidation-Step3">Step 3</h3><p>Create the <code>validation.xml</code> to configure the validators to be used.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
-&lt;!--
-    Add the following DOCTYPE declaration as first line of your XXX-validation.xml file:
-    &lt;!DOCTYPE validators PUBLIC &quot;-//Apache Struts//XWork Validator 1.0.2//EN&quot; &quot;http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd&quot;&gt;
---&gt;
-&lt;validators&gt;
-    &lt;field name=&quot;name&quot;&gt;
-        &lt;field-validator type=&quot;requiredstring&quot;&gt;
-            &lt;message&gt;You must enter a name&lt;/message&gt;
-        &lt;/field-validator&gt;
-    &lt;/field&gt;
-    &lt;field name=&quot;age&quot;&gt;
-        &lt;field-validator type=&quot;int&quot;&gt;
-            &lt;param name=&quot;min&quot;&gt;13&lt;/param&gt;
-            &lt;param name=&quot;max&quot;&gt;19&lt;/param&gt;
-            &lt;message&gt;Only people ages 13 to 19 may take this quiz&lt;/message&gt;
-        &lt;/field-validator&gt;
-    &lt;/field&gt;
-&lt;/validators&gt;
-
-]]></script>
-</div></div><h3 id="ClientValidation-ActionandNamespace">Action and Namespace</h3><p>A correct action and namespace attributes must be provided to the &lt;s:form&gt; tag. For example, if the action named "quizClient" is defined in the "/validation" namespace, the form must be configured as:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;s:form method="post" validate="true" action="quizClient" namespace="/validation"&gt;
+            <div id="ConfluenceContent"><p>Let's create a Client-Side validation workflow, step by step.</p><p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB/5997/6f42626d00e36f53fe51440403446ca61552e2a2.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> The <code>validate</code> attribute is set to <code>true</code>.</p><p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB/5997/6f42626d00e36f53fe51440403446ca61552e2a2.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> Some themes do not support client-side validation.</p><h2 id="ClientValidation-Step1">Step 1</h2><p>Create the form.<plain-text-body>{snippet:id=clientValidation|lang=xml|javadoc=false|url=struts2/apps/showcase/src/main/webapp/WEB-INF/validation/quiz-client.jsp}</plain-text-body><img class="emoticon emoticon-information" src="https://cwiki.apache.org/conf
 luence/s/en_GB/5997/6f42626d00e36f53fe51440403446ca61552e2a2.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> This case uses the default xhtml theme, so the <code>&lt;s:head &gt;</code> tag is used to link a style sheet.</p><h2 id="ClientValidation-Step2">Step 2</h2><p>Create the Action class.<plain-text-body>{snippet:id=quizAction|javadoc=false|lang=java|url=struts2/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/QuizAction.java}</plain-text-body></p><h3 id="ClientValidation-Step3">Step 3</h3><p>Create the <code>validation.xml</code> to configure the validators to be used.<plain-text-body>{snippet:id=quizValidators|javadoc=false|lang=xml|url=struts2/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/QuizAction-validation.xml}</plain-text-body></p><h3 id="ClientValidation-ActionandNamespace">Action and Namespace</h3><p>A correct action and namespace attributes must be provided to the &lt;s:form&gt; tag
 . For example, if the action named "quizClient" is defined in the "/validation" namespace, the form must be configured as:</p><parameter ac:name="">XML</parameter><plain-text-body>&lt;s:form method="post" validate="true" action="quizClient" namespace="/validation"&gt;
    &lt;s:textfield label="Name" name="name"/&gt;
    &lt;s:textfield label="Age" name="age"/&gt;
    &lt;s:textfield label="Favorite color" name="answer"/&gt;
    &lt;s:submit/&gt;
 &lt;/s:form&gt; 
-</pre>
-</div></div><p>While the following will "work" in the sense that the form will function correctly, <strong>client-side validation will not</strong>. That is because Struts must know the exact namespace and action (rather than a URL) to properly support validation.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;s:form method="post" validate="true" action="/validation/quizClient.action"&gt;
+</plain-text-body><p>While the following will "work" in the sense that the form will function correctly, <strong>client-side validation will not</strong>. That is because Struts must know the exact namespace and action (rather than a URL) to properly support validation.</p><parameter ac:name="">XML</parameter><plain-text-body>&lt;s:form method="post" validate="true" action="/validation/quizClient.action"&gt;
    &lt;s:textfield label="Name" name="name"/&gt;
    &lt;s:textfield label="Age" name="age"/&gt;
    &lt;s:textfield label="Favorite color" name="answer"/&gt;
    &lt;s:submit/&gt;
 &lt;/s:form&gt; 
-</pre>
-</div></div></div>
+</plain-text-body></div>
         </div>
 
         

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/combobox.html
----------------------------------------------------------------------
diff --git a/content/docs/combobox.html b/content/docs/combobox.html
index 55a5e99..edc2f56 100644
--- a/content/docs/combobox.html
+++ b/content/docs/combobox.html
@@ -169,7 +169,7 @@ out the text field.
 <h2 id="combobox-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 JSP:
 &lt;-- Example One --&gt;
 &lt;s:bean name=&quot;struts.util.Counter&quot; var=&quot;year&quot;&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/component.html
----------------------------------------------------------------------
diff --git a/content/docs/component.html b/content/docs/component.html
index 3df5f0a..de011e1 100644
--- a/content/docs/component.html
+++ b/content/docs/component.html
@@ -196,7 +196,7 @@ could not be picked up from the classpath.</p>
 <h2 id="component-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;p&gt;
 JSP
 &lt;/p&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/conditionalvisitor-validator.html
----------------------------------------------------------------------
diff --git a/content/docs/conditionalvisitor-validator.html b/content/docs/conditionalvisitor-validator.html
index 8803cc6..9c5d4f8 100644
--- a/content/docs/conditionalvisitor-validator.html
+++ b/content/docs/conditionalvisitor-validator.html
@@ -148,7 +148,7 @@ only if the expression will evaluate to true.</p>
 
 <h1 id="conditionalvisitorvalidator-Examples">Examples</h1>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;field name=&quot;colleaguePosition&quot;&gt;
     &lt;field-validator type=&quot;conditionalvisitor&quot;&gt;
         &lt;param name=&quot;expression&quot;&gt;reason == &#39;colleague&#39; and colleaguePositionID == &#39;OTHER&#39;&lt;/param&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/conversion-annotation.html
----------------------------------------------------------------------
diff --git a/content/docs/conversion-annotation.html b/content/docs/conversion-annotation.html
index 020ae83..ed3c8e1 100644
--- a/content/docs/conversion-annotation.html
+++ b/content/docs/conversion-annotation.html
@@ -152,7 +152,7 @@ under the License.
 <h2 id="ConversionAnnotation-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 @Conversion(
     conversions = {
          // key must be the name of a property for which converter should be used

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/conversion-error-interceptor.html
----------------------------------------------------------------------
diff --git a/content/docs/conversion-error-interceptor.html b/content/docs/conversion-error-interceptor.html
index 2675c9e..2657e7d 100644
--- a/content/docs/conversion-error-interceptor.html
+++ b/content/docs/conversion-error-interceptor.html
@@ -184,7 +184,7 @@ There are no known extension points for this interceptor.
 <h2 id="ConversionErrorInterceptor-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
     &lt;interceptor-ref name=&quot;params&quot;/&gt;
     &lt;interceptor-ref name=&quot;conversionError&quot;/&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/conversion-validator.html
----------------------------------------------------------------------
diff --git a/content/docs/conversion-validator.html b/content/docs/conversion-validator.html
index 8215ab5..1b39d6f 100644
--- a/content/docs/conversion-validator.html
+++ b/content/docs/conversion-validator.html
@@ -148,7 +148,7 @@ under the License.
 
 <h1 id="conversionvalidator-Examples">Examples</h1>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 &lt;pre&gt;
     &lt;!-- Plain Validator Syntax --&gt;
     &lt;validator type=&quot;conversion&quot;&gt;
@@ -183,7 +183,7 @@ upon conversion error.
 </p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 
 &lt;!-- myJspPage.jsp --&gt;
 &lt;ww:form action=&quot;someAction&quot; method=&quot;POST&quot;&gt;
@@ -198,7 +198,7 @@ upon conversion error.
 ]]></script>
 </div></div>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 
 &lt;!-- xwork.xml --&gt;
 &lt;xwork&gt;
@@ -218,7 +218,7 @@ upon conversion error.
 ]]></script>
 </div></div>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 
 &lt;!-- MyActionSupport.java --&gt;
 public class MyActionSupport extends ActionSupport {
@@ -233,7 +233,7 @@ public class MyActionSupport extends ActionSupport {
 ]]></script>
 </div></div>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 
 &lt;!-- MyActionSupport-someAction-validation.xml --&gt;
 &lt;validators&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/conversionerrorfieldvalidator-annotation.html
----------------------------------------------------------------------
diff --git a/content/docs/conversionerrorfieldvalidator-annotation.html b/content/docs/conversionerrorfieldvalidator-annotation.html
index 6a68e94..bc3a17c 100644
--- a/content/docs/conversionerrorfieldvalidator-annotation.html
+++ b/content/docs/conversionerrorfieldvalidator-annotation.html
@@ -153,7 +153,7 @@ See <a shape="rect" href="https://struts.apache.org/docs/type-conversion.html#Ty
 <h2 id="ConversionErrorFieldValidatorAnnotation-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 @ConversionErrorFieldValidator(message = &quot;Default message&quot;, key = &quot;i18n.key&quot;, shortCircuit = true)
 ]]></script>
 </div></div></div>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/cookie-interceptor.html
----------------------------------------------------------------------
diff --git a/content/docs/cookie-interceptor.html b/content/docs/cookie-interceptor.html
index 05618e0..cf61c9f 100644
--- a/content/docs/cookie-interceptor.html
+++ b/content/docs/cookie-interceptor.html
@@ -200,7 +200,7 @@ of filtered cookies set into it.
 
 <p>Examples</p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 
 &lt;!--
   This example will inject cookies named either &#39;cookie1&#39; or &#39;cookie2&#39; whose

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/cookieprovider-interceptor.html
----------------------------------------------------------------------
diff --git a/content/docs/cookieprovider-interceptor.html b/content/docs/cookieprovider-interceptor.html
index a95551a..0bde2a5 100644
--- a/content/docs/cookieprovider-interceptor.html
+++ b/content/docs/cookieprovider-interceptor.html
@@ -154,7 +154,7 @@ You must reference this interceptor in your default stack or in action's stack,
 
 <p>Examples</p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 
 &lt;action ... &gt;
   &lt;interceptor-ref name=&quot;defaultStack&quot;/&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/create-session-interceptor.html
----------------------------------------------------------------------
diff --git a/content/docs/create-session-interceptor.html b/content/docs/create-session-interceptor.html
index ea22a66..e5ed146 100644
--- a/content/docs/create-session-interceptor.html
+++ b/content/docs/create-session-interceptor.html
@@ -165,7 +165,7 @@ the response to the client immediately.
 <h2 id="CreateSessionInterceptor-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 
 &lt;action name=&quot;someAction&quot; class=&quot;com.examples.SomeAction&quot;&gt;
     &lt;interceptor-ref name=&quot;createSession&quot;/&gt;

http://git-wip-us.apache.org/repos/asf/struts-site/blob/b16cc4ef/content/docs/createifnull-annotation.html
----------------------------------------------------------------------
diff --git a/content/docs/createifnull-annotation.html b/content/docs/createifnull-annotation.html
index 9e9c233..ebeb8f5 100644
--- a/content/docs/createifnull-annotation.html
+++ b/content/docs/createifnull-annotation.html
@@ -152,7 +152,7 @@ under the License.
 <h2 id="CreateIfNullAnnotation-Examples">Examples</h2>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Confluence" type="syntaxhighlighter"><![CDATA[
 @CreateIfNull( value = true )
 private List&lt;User&gt; users;
 ]]></script>


Mime
View raw message