struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lukaszlen...@apache.org
Subject svn commit: r869821 [38/43] - in /websites/production/struts/content/development/2.x/docs: ./ ajax-validation.data/ big-picture.data/ chaining-interceptor.data/ colophon.data/ config-browser-plugin.data/ create-struts-2-web-application-using-maven-to-m...
Date Wed, 17 Jul 2013 09:31:13 GMT
Added: websites/production/struts/content/development/2.x/docs/url-validator.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/url-validator.html (added)
+++ websites/production/struts/content/development/2.x/docs/url-validator.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <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 type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>url validator</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="core-developers-guide.html">Core Developers Guide</a>&nbsp;&gt;&nbsp;<a href="validation.html">Validation</a>&nbsp;&gt;&nbsp;<a href="url-validator.html">url validator</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">url validator</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14088">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14088">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14088">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14088">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14088">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14088">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent">
+<h1><a shape="rect" name="urlvalidator-Description"></a>Description</h1>
+
+<p>URLValidator checks that a given field is a String and a valid URL</p>
+
+
+<h1><a shape="rect" name="urlvalidator-Parameters"></a>Parameters</h1>
+
+<p></p><ul><li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li></ul>
+
+
+
+<h1><a shape="rect" name="urlvalidator-Examples"></a>Examples</h1>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;validators&gt;
+     &lt;!-- Plain Validator Syntax --&gt;
+     &lt;validator type="url"&gt;
+         &lt;param name="fieldName"&gt;myHomePage&lt;/param&gt;
+         &lt;message&gt;Invalid homepage url&lt;/message&gt;
+     &lt;/validator&gt;
+
+     &lt;!-- Field Validator Syntax --&gt;
+     &lt;field name="myHomepage"&gt;
+         &lt;field-validator type="url"&gt;
+             &lt;message&gt;Invalid homepage url&lt;/message&gt;
+         &lt;/field-validator&gt;
+     &lt;/field&gt;
+&lt;/validators&gt;
+]]></script>
+</div></div></div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/use-cases.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/use-cases.html (added)
+++ websites/production/struts/content/development/2.x/docs/use-cases.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Use Cases</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="contributors-guide.html">Contributors Guide</a>&nbsp;&gt;&nbsp;<a href="requirements.html">Requirements</a>&nbsp;&gt;&nbsp;<a href="use-cases.html">Use Cases</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Use Cases</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=29364">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=29364">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=29364">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=29364">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=29364">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=29364">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><div class="panelMacro"><table class="noteMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">Under Construction</td></tr></table></div>
+
+<p><a shape="rect" name="UseCases-Actors"></a></p>
+<h2><a shape="rect" name="UseCases-Theprimaryactorsandtheirgeneralgoals"></a>The primary actors and their general goals </h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Actor              </th><th colspan="1" rowspan="1" class="confluenceTh"> Goal </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Client (Browser)    </td><td colspan="1" rowspan="1" class="confluenceTd"> <img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" height="16" width="16" alt="" border="0"> ... </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Developer           </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Framework (System)  </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Container           </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Extension (Plug In) </td><td col
 span="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table>
+</div>
+
+
+
+<p><a shape="rect" name="UseCases-Business"></a></p>
+<h2><a shape="rect" name="UseCases-BusinessUseCases%28enduserapplications%29"></a>Business Use Cases (end user applications)</h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Priority</th><th colspan="1" rowspan="1" class="confluenceTh"><a shape="rect" href="#UseCases-Actors">Actor</a></th><th colspan="1" rowspan="1" class="confluenceTh">Goal</th><th colspan="1" rowspan="1" class="confluenceTh">Story or Brief</th><th colspan="1" rowspan="1" class="confluenceTh">Issue ID</th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd"> Client </td><td colspan="1" rowspan="1" class="confluenceTd"> <a shape="rect" href="obtain-response.html" title="Obtain Response">Obtain Response</a> </td><td colspan="1" rowspan="1" class="confluenceTd"> Client can submit a request and receive a customized response.  </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd"> Framework </td><td colspan="1"
  rowspan="1" class="confluenceTd"> <a shape="rect" href="execute-action.html" title="Execute Action">Execute Action</a> </td><td colspan="1" rowspan="1" class="confluenceTd"> A request can invoke a pluggable handler written as a server-side class. </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"> <img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" height="16" width="16" alt="" border="0"> ... </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" cla
 ss="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table>
+</div>
+
+
+<p><a shape="rect" name="UseCases-Development"></a></p>
+<h2><a shape="rect" name="UseCases-DevelopmentUseCases%28applicationdevelopers%29"></a>Development Use Cases (application developers)</h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Priority</th><th colspan="1" rowspan="1" class="confluenceTh"><a shape="rect" href="#UseCases-Actors">Actor</a></th><th colspan="1" rowspan="1" class="confluenceTh">Goal</th><th colspan="1" rowspan="1" class="confluenceTh">Story or Brief</th><th colspan="1" rowspan="1" class="confluenceTh">Issue ID</th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd"> Developer </td><td colspan="1" rowspan="1" class="confluenceTd"> <a shape="rect" href="create-action.html" title="Create Action">Create Action</a> </td><td colspan="1" rowspan="1" class="confluenceTd"> How to create an <a shape="rect" href="execute-action.html" title="Execute Action">Action</a> class </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd
 ">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"> <img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" height="16" width="16" alt="" border="0"> ... </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table>
+</div>
+
+
+<p><a shape="rect" name="UseCases-Framework"></a></p>
+<h2><a shape="rect" name="UseCases-FrameworkUseCases%28frameworkdevelopers%29"></a>Framework Use Cases (framework developers)</h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Priority</th><th colspan="1" rowspan="1" class="confluenceTh"><a shape="rect" href="#UseCases-Actors">Actor</a></th><th colspan="1" rowspan="1" class="confluenceTh">Goal</th><th colspan="1" rowspan="1" class="confluenceTh">Story or Brief</th><th colspan="1" rowspan="1" class="confluenceTh">Issue ID</th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd"> Developer </td><td colspan="1" rowspan="1" class="confluenceTd"> <a shape="rect" href="zero-configuration-scanning.html" title="Zero Configuration Scanning">Zero Configuration Scanning</a> </td><td colspan="1" rowspan="1" class="confluenceTd"> How we configure actions using conventions and annotations </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceT
 d">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"> <img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" height="16" width="16" alt="" border="0"> ... </td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table>
+</div>
+
+
+<h3><a shape="rect" name="UseCases-SeeAlso"></a>See Also</h3>
+<ul><li><a shape="rect" href="requirements.html" title="Requirements">Requirements</a></li><li><a shape="rect" class="external-link" href="http://www.StrutsUniversity.org/Use+Cases" rel="nofollow">More About Use Cases</a></li></ul>
+</div>
+        </div>
+
+                    <div class="tabletitle">
+                Children
+            <span class="smalltext" id="show" style="display: inline;">
+              <a href="javascript:showChildren()">Show Children</a></span>
+            <span class="smalltext" id="hide" style="display: none;">
+              <a href="javascript:hideChildren()">Hide Children</a></span>
+            </div>
+            <div class="greybox" id="children" style="display: none;">
+                                                    $page.link($child)
+                    <span class="smalltext">(Apache Struts 2 Documentation)</span>
+                    <br>
+                                    $page.link($child)
+                    <span class="smalltext">(Apache Struts 2 Documentation)</span>
+                    <br>
+                                    $page.link($child)
+                    <span class="smalltext">(Apache Struts 2 Documentation)</span>
+                    <br>
+                                    $page.link($child)
+                    <span class="smalltext">(Apache Struts 2 Documentation)</span>
+                    <br>
+                            </div>
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/using-checkboxes-editactionjava.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/using-checkboxes-editactionjava.html (added)
+++ websites/production/struts/content/development/2.x/docs/using-checkboxes-editactionjava.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,207 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <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 type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Using Checkboxes - EditAction.java</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="faqs.html">FAQs</a>&nbsp;&gt;&nbsp;<a href="cookbook.html">Cookbook</a>&nbsp;&gt;&nbsp;<a href="using-checkboxes.html">Using Checkboxes</a>&nbsp;&gt;&nbsp;<a href="using-checkboxes-editactionjava.html">Using Checkboxes - EditAction.java</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Using Checkboxes - EditAction.java</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14189">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14189">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14189">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14189">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14189">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14189">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent">
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package cash.action;
+
+import org.apache.log4j.Logger;
+
+import cash.config.ConfigManager;
+import cash.model.User;
+import cash.util.HibernateUtil;
+import cash.validator.PasswordFormatValidator;
+
+import net.sf.hibernate.LockMode;
+
+/**
+ * Edit a user
+ * @author Joel Hockey
+ * @version $Id: $
+ */
+public class EditAction extends HibernateAction {
+    private static final Logger LOG = Logger.getLogger(EditAction.class);
+
+    private User m_user = new User();
+    private String m_repeatPassword;
+
+    /** return user to be edited. */
+    public User getUser() { return m_user; }
+
+    /** @param pwd repeat of password */
+    public void setRepeatPassword(String pwd) { m_repeatPassword = pwd; }
+    /** @return repeat password */
+    public String getRepeatPassword() { return m_repeatPassword; }
+
+    /** override super */
+    public String execute() throws Exception {
+        LOG.debug("EditAction started");
+
+        // get original user from session, check that password is valid, update and save.
+        User u = (User)get("user");
+        HibernateUtil.currentSession().lock(u, LockMode.NONE);
+
+        // check that password has actually changed before updating
+        if (!PasswordFormatValidator.PASSWORD_MASK.equals(m_user.getPassword())) {
+            if (!u.changePassword(m_user.getPassword())) {
+                addFieldError("user.password", "password must be different to previous "
+                    + ConfigManager.getConfig().getUser().getNoRepeatHistory() + " passwords");
+                return INPUT;
+            }
+        }
+
+        m_user.copy(u);
+        HibernateUtil.currentSession().save(u);
+        User loginUser = (User)get(LoginAction.LOGIN_USER);
+        if (u.getId() == loginUser.getId()) {
+            set(LoginAction.LOGIN_USER, u);
+        }
+        return SUCCESS;
+    }
+}
+]]></script>
+</div></div></div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/using-checkboxes.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/using-checkboxes.html (added)
+++ websites/production/struts/content/development/2.x/docs/using-checkboxes.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <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 type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Using Checkboxes</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="faqs.html">FAQs</a>&nbsp;&gt;&nbsp;<a href="cookbook.html">Cookbook</a>&nbsp;&gt;&nbsp;<a href="using-checkboxes.html">Using Checkboxes</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Using Checkboxes</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14069">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14069">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14069">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14069">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14069">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14069">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><p>The W3C specification does not provide a way to submit a "cleared" or "false" checkbox. If the control is clear, the browser will not submit any value for that control. The application is expected to notice that the checkbox was not submitted, and proceed accordingly. </p>
+
+<p>The framework automatically tracks the checkboxes used by a form (so you don't have to). If a checkbox is missing, a default value for the checkbox (usually false) is injected. The checkbox control can then turn on-and-off values as needed,</p>
+
+<h2><a shape="rect" name="UsingCheckboxes-UsingCheckboxestoSetaCollection"></a>Using Checkboxes to Set a Collection</h2>
+
+<p>Our user has a number of priviliges that are stored as a Set of strings.  To use checkboxes for these, we have HTML that looks like:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;input type="checkbox" name="user.priv" value="boss"/&gt;
+&lt;input type="checkbox" name="user.priv" value="admin"/&gt;
+&lt;input type="checkbox" name="user.priv" value="manager"/&gt;
+]]></script>
+</div></div>
+
+<p>Say a user checks the first 2; the browser will send the query string: user.priv=boss&amp;user.priv=admin.</p>
+
+<p>OGNL will end up calling </p><div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[action.getUser().setPriv(String[] {"boss", "admin"})]]></script>
+</div></div>
+
+<p>You can write this method like:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+    Set m_privileges = new HashSet();
+
+    public void setPriv(String[] privs) {
+        for (int i = 0; i &lt; privs.length; i++) {
+            m_privileges.add(privs[i]);
+        }
+    }
+]]></script>
+</div></div>
+<h2><a shape="rect" name="UsingCheckboxes-FullDetailedexample%3A"></a>Full Detailed example:</h2>
+<p>This example uses a kind-of model-driven action (see <a shape="rect" href="model-driven-interceptor.html" title="Model Driven Interceptor">Model Driven Interceptor</a>). The action returns a single getter for the User object whose values are populated.</p>
+
+<ul><li><a shape="rect" href="using-checkboxes-editactionjava.html" title="Using Checkboxes - EditAction.java">Using Checkboxes - EditAction.java</a></li><li><a shape="rect" href="using-checkboxes-velocity-and-html.html" title="Using Checkboxes - Velocity and HTML">Using Checkboxes - Velocity and HTML</a></li><li><a shape="rect" href="using-checkboxes-userjava.html" title="Using Checkboxes - User.java">Using Checkboxes - User.java</a></li></ul>
+</div>
+        </div>
+
+                    <div class="tabletitle">
+                Children
+            <span class="smalltext" id="show" style="display: inline;">
+              <a href="javascript:showChildren()">Show Children</a></span>
+            <span class="smalltext" id="hide" style="display: none;">
+              <a href="javascript:hideChildren()">Hide Children</a></span>
+            </div>
+            <div class="greybox" id="children" style="display: none;">
+                                                    $page.link($child)
+                    <span class="smalltext">(Apache Struts 2 Documentation)</span>
+                    <br>
+                                    $page.link($child)
+                    <span class="smalltext">(Apache Struts 2 Documentation)</span>
+                    <br>
+                                    $page.link($child)
+                    <span class="smalltext">(Apache Struts 2 Documentation)</span>
+                    <br>
+                            </div>
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/using-freemarker-templates.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/using-freemarker-templates.html (added)
+++ websites/production/struts/content/development/2.x/docs/using-freemarker-templates.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,426 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <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/shBrushPlain.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;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Using Freemarker Templates</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="user-guide.html">User Guide</a>&nbsp;&gt;&nbsp;<a href="using-freemarker-templates.html">Using Freemarker Templates</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Using Freemarker Templates</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=45128">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=45128">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=45128">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=45128">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=45128">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=45128">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><p><a shape="rect" class="external-link" href="http://freemarker.sourceforge.net/" rel="nofollow">FreeMarker</a> is a Java-based template engine that is a great alternative to <a shape="rect" href="jsp.html" title="JSP">JSP</a>. FreeMarker is ideal for situations where your action results can possibly be loaded from outside a Servlet container. For example, if you wished to support plugins in your application, you might wish to use FreeMarker so that the plugins could provide the entire action class and view in a single jar that is loaded from the classloader.</p>
+
+<div>
+<ul><li><a shape="rect" href="#UsingFreemarkerTemplates-Configureyouractiontousethe%22freemarker%22resulttype">Configure your action to use the "freemarker" result type</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Usingproperties">Using properties</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Servlet%2FJSPScopedObjects">Servlet / JSP Scoped Objects</a></li><ul><li><a shape="rect" href="#UsingFreemarkerTemplates-ApplicationScopeAttribute">Application Scope Attribute</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-SessionScopeAttribute">Session Scope Attribute</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-RequestScopeAttribute">Request Scope Attribute</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-RequestParameter">Request Parameter</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Contextparameter">Context parameter</a></li></ul><li><a shape="rect" href="#UsingFreemarkerTemplates-TemplateLoading">Template L
 oading</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-VariableResolution">Variable Resolution</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-FreeMarkerconfiguration">FreeMarker configuration</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Tags">Tags</a></li><ul><li><a shape="rect" href="#UsingFreemarkerTemplates-UsingStrutstags">Using Struts tags</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-UsingJSPtags">Using JSP tags</a></li></ul><li><a shape="rect" href="#UsingFreemarkerTemplates-TipsandTricks">Tips and Tricks</a></li><ul><li><a shape="rect" href="#UsingFreemarkerTemplates-TypeConversionandLocales">Type Conversion and Locales</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-StringandNonStringValuesontags">String and Non String Values on tags</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-Extending">Extending</a></li></ul><li><a shape="rect" href="#UsingFreemarkerTemplates-FreeMarkeralternativesyntax">Fre
 eMarker alternative syntax</a></li><li><a shape="rect" href="#UsingFreemarkerTemplates-FreeMarkerlinks">FreeMarker links</a></li></ul></div>
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-Configureyouractiontousethe%22freemarker%22resulttype"></a>Configure your action to use the "freemarker" result type</h2>
+
+<p>Struts provides a result type "freemarker" which renders a FreeMarker template. This result type is defined in <tt>struts-default.xml</tt>. To create pages using FreeMarker, set the result type of the actions to "freemarker".</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;include file="struts-default.xml"/&gt;
+...
+&lt;action name="test" class="package.Test"&gt;
+  &lt;result type="freemarker"&gt;/WEB-INF/views/testView.ftl&lt;/result&gt;
+&lt;/action&gt;
+...
+]]></script>
+</div></div>
+
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-Usingproperties"></a>Using properties</h2>
+
+<p>FreeMarker uses the ${...} notation to access properties. They are called interpolations. Properties on the actions (getter methods) will automatically be available on the FreeMarker templates. If an action has a "getName()" method, then its value can be inserted on the template like:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+Your name is: ${name}
+]]></script>
+</div></div>
+
+<div class="panelMacro"><table class="noteMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1"><b>Be Careful</b><br clear="none">By default,  FreeMarker will throw an error if it finds a variable that is not defined, or has a null value. See this <a shape="rect" class="external-link" href="http://freemarker.sourceforge.net/docs/app_faq.html#faq_picky_about_missing_vars" rel="nofollow">FAQ</a> for details.</td></tr></table></div>
+
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-Servlet%2FJSPScopedObjects"></a>Servlet / JSP Scoped Objects</h2>
+
+<p>The following are ways to obtained Application scope attributes, Session scope attributes, Request scope attributes, Request parameters, and framework Context scope parameters:-</p>
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-ApplicationScopeAttribute"></a>Application Scope Attribute</h3>
+
+<p>Assuming there's an attribute with name <tt>myApplicationAttribute</tt> in the Application scope.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;#if Application.myApplicationAttribute?exists&gt;
+     ${Application.myApplicationAttribute}
+&lt;/#if&gt;
+]]></script>
+</div></div>
+<p>or</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;@s.property value="%{#application.myApplicationAttribute}" /&gt;
+]]></script>
+</div></div>
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-SessionScopeAttribute"></a>Session Scope Attribute</h3>
+
+<p>Assuming there's an attribute with name <tt>mySessionAttribute</tt> in the Session scope.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;#if Session.mySessionAttribute?exists&gt;
+     ${Session.mySessionAttribute}
+&lt;/#if&gt;
+]]></script>
+</div></div>
+<p>or</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;@s.property value="%{#session.mySessionAttribute}" /&gt;
+]]></script>
+</div></div>
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-RequestScopeAttribute"></a>Request Scope Attribute</h3>
+
+<p>Assuming there's an attribute with name 'myRequestAttribute' in the Request scope.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;#if Request.myRequestAttribute?exists&gt;
+      ${Request.myRequestAttribute}
+&lt;/#if&gt;
+]]></script>
+</div></div>
+<p>or</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;@s.property value="%{#request.myRequestAttribute}" /&gt;
+]]></script>
+</div></div>
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-RequestParameter"></a>Request Parameter</h3>
+
+<p>Assuming there's a request parameter myParameter (eg. <a shape="rect" class="external-link" href="http://host/myApp/myAction.action?myParameter=one" rel="nofollow">http://host/myApp/myAction.action?myParameter=one</a>).</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;#if Parameters.myParameter?exists&gt;
+     ${Parameters.myParameter}
+&lt;/#if&gt;
+]]></script>
+</div></div>
+<p>or</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;@s.property value="%{#parameters.myParameter}" /&gt;
+]]></script>
+</div></div>
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-Contextparameter"></a>Context parameter</h3>
+
+<p>Assuming there's a parameter with the name myContextParam in framework context.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+${stack.findValue('#myContextParam')}
+]]></script>
+</div></div>
+<p>or</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;@s.property value="%{#myContextParam}" /&gt;
+]]></script>
+</div></div>
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-TemplateLoading"></a>Template Loading</h2>
+
+<p>The framework looks for FreeMarker templates in two locations (in this order):</p>
+<ol><li>Web application</li><li>Class path</li></ol>
+
+
+<p>This ordering makes it ideal for providing templates inside a fully-built jar, but allowing for overrides of those templates to be defined in your web application. In fact, this is how you can override the default UI tags and <a shape="rect" href="form-tags.html" title="Form Tags">Form Tags</a> included with the framework.</p>
+
+<p>In addition, you can specify a location (directory on your file system) through the <tt>templatePath</tt> or <tt>TemplatePath</tt> context variable (in  the <tt>web.xml</tt>. If a variable is specified, the content of the directory it points to will be searched first.</p>
+
+<div class="panelMacro"><table class="noteMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">This variable is currently NOT relative to the root of your application.</td></tr></table></div>
+
+
+<p>If a property is defined on the template with the same name as a property on the action, FreeMarker will use the property defined on the template.</p>
+
+
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-VariableResolution"></a>Variable Resolution</h2>
+
+<p>When using FreeMarker with the framework, variables are looked up in several different places, in this order:</p>
+<ol><li>Built-in variables</li><li>Value stack</li><li>Action context</li><li>Request scope</li><li>Session scope</li><li>Application scope</li></ol>
+
+
+<p>Note that the action context is looked up after the value stack. This means that you can reference the variable without the typical preceding has marker (#) like you would have to when using the JSP <tt>s:property</tt> tag. This is a nice convenience, though be careful because there is a small chance it could trip you up.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;@s.url id="url" value="http://www.yahoo.com"/&gt;
+Click &lt;a xhref="${url}"&gt;here&lt;/a&gt;!
+]]></script>
+</div></div>
+<p>The built-in variables that Struts-FreeMarker integration provides are:</p>
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> stack </td><td colspan="1" rowspan="1" class="confluenceTd"> The value stack itself, useful for calls like ${stack.findString('ognl expr')} </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> action </td><td colspan="1" rowspan="1" class="confluenceTd"> The action most recently executed </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> response </td><td colspan="1" rowspan="1" class="confluenceTd"> The HttpServletResponse </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> res </td><td colspan="1" rowspan="1" class="confluenceTd"> Same as response </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> request </td><td colspan="1" rowspan="1" class="confluenceTd"> The HttpServletRequest </td></tr><tr><td colspan="
 1" rowspan="1" class="confluenceTd"> req </td><td colspan="1" rowspan="1" class="confluenceTd"> Same as request </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> session </td><td colspan="1" rowspan="1" class="confluenceTd"> The HttpSession </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> application </td><td colspan="1" rowspan="1" class="confluenceTd"> The ServletContext </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> base </td><td colspan="1" rowspan="1" class="confluenceTd"> The request's context path </td></tr></tbody></table>
+</div>
+
+
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-FreeMarkerconfiguration"></a>FreeMarker configuration</h2>
+
+<p>To configure the FreeMarker engine, just add a file <tt>freemarker.properties</tt> to the classpath.  The supported properties are those that the FreeMarker Configuration object expects, see <a shape="rect" class="external-link" href="http://freemarker.sourceforge.net/docs/pgui_config.html" rel="nofollow">FreeMarker's documentation</a> for more details.  </p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>freemarker.properties example</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+default_encoding=ISO-8859-1
+template_update_delay=5
+locale=no_NO
+]]></script>
+</div></div>
+
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-Tags"></a>Tags</h2>
+
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-UsingStrutstags"></a>Using Struts tags </h3>
+
+<p>Tags distributed with Struts are automatically made available to FreeMarker templates. To use any tag add "<tt>@s.</tt>" in front of the tag name. Like:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Using Struts tags on FreeMarker templates</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;@s.if test="printName"&gt;
+    &lt;@s.property value="myBeanProperty" /&gt;
+&lt;/@s.if&gt;
+]]></script>
+</div></div>
+
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-UsingJSPtags"></a>Using JSP tags</h3>
+
+<p>To use JSP tags that are not part of Struts you have to:</p>
+
+<p>1. Add JspSupportSerlvet to web.xml</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Adding JspSupportSerlvet to web.xml</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;servlet&gt;
+    &lt;servlet-name&gt;JspSupportServlet&lt;/servlet-name&gt;
+    &lt;servlet-class&gt;org.apache.struts2.views.JspSupportServlet&lt;/servlet-class&gt;
+    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
+&lt;/servlet&gt;
+]]></script>
+</div></div>
+
+<p>2. Declare the tld on web.xml or use FreeMarker's "<tt>assign</tt>" directive. When using the "<tt>assign</tt>" directive, provide the absolute path to the tld file.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Using JSP tags on FreeMarker templates</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;#assign ex=JspTaglibs["/WEB-INF/example.tld"] /&gt;
+
+&lt;@ex.mytag text="hello" /&gt;
+]]></script>
+</div></div>
+
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-TipsandTricks"></a>Tips and Tricks</h2>
+
+<p>There are some advanced features that may be useful when building Struts applications with FreeMarker.</p>
+
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-TypeConversionandLocales"></a>Type Conversion and Locales</h3>
+
+<p>FreeMarker has built in support for formatting dates and numbers. The formatting rules are based on the locale associated with the action request, which is by default set in <a shape="rect" href="strutsproperties.html" title="struts.properties">struts.properties</a> but can be over-ridden using the <a shape="rect" href="i18n-interceptor.html" title="I18n Interceptor">I18n Interceptor</a>. This is normally perfect for your needs, but it is important to remember that these formatting rules are handled by FreeMarker and not by the framework's <a shape="rect" href="type-conversion.html" title="Type Conversion">Type Conversion</a> support.</p>
+
+<p>If you want the framework to handle the formatting according to the <a shape="rect" href="type-conversion.html" title="Type Conversion">Type Conversion</a> you have specified, you shouldn't use the normal ${...} syntax. Instead, you should use the <a shape="rect" href="property.html" title="property">property</a> tag. The difference is that the property tag is specifically designed to take an <a shape="rect" href="ognl.html" title="OGNL">OGNL</a> expression, evaluate it, and then convert it to a String using any <a shape="rect" href="type-conversion.html" title="Type Conversion">Type Conversion</a> rules you have specified. The normal ${...} syntax will use a FreeMarker expression language, evaluate it, and then convert it to a String using the built in formatting rules. </p>
+
+<div class="panelMacro"><table class="noteMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">The difference in how type conversion is handled under Freemarker is subtle but important to understand.</td></tr></table></div>
+
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-StringandNonStringValuesontags"></a>String and Non String Values on tags</h3>
+
+<p>In FreeMarker it is incorrect to quote non string values. If a value is quoted, then an string will be passed, instead of the expected object, causing an exception. For example, the "textarea" tag expects the attributes "rows" and "cols" of type Integer:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Do not quote non string values in tag attributes!</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;@s.textarea rows=5 cols=40 /&gt;
+]]></script>
+</div></div>
+
+
+<h3><a shape="rect" name="UsingFreemarkerTemplates-Extending"></a>Extending</h3>
+
+<p>Sometimes you may with to extend the framework's FreeMarker support. For example, you might want to extend the Struts tags that come bundled with the framework.</p>
+
+<p>To extend the Freemarker support, develop a class that extends <tt>org.apache.struts2.views.freemarker.FreemarkerManager</tt>, overriding methods as needed, and plugin the class through the <a shape="rect" href="strutsproperties.html" title="struts.properties">struts.properties</a>:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: plain; gutter: false" type="syntaxhighlighter"><![CDATA[
+struts.freemarker.manager.classname = com.yourcompany.YourFreeMarkerManager
+]]></script>
+</div></div>
+
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-FreeMarkeralternativesyntax"></a>FreeMarker alternative syntax</h2>
+
+<p>FreeMarker by default uses the "&lt;#directive /&gt;" syntax. FreeMarker supports an alternative syntax, where [ and ] are used instead of &lt; and &gt;. To enable the alternative syntax, add [#ftl] at the beginning of the template. The alternative syntax makes it easier to differentiate between FreeMarker directives, and JSP or HTML tags.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Use alternative syntax</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+[#ftl]
+&lt;html&gt;
+   &lt;head&gt;FreeMarker Example&lt;/head&gt;
+    
+   &lt;body&gt;
+       &lt;h1&gt;Alternative Syntax&lt;/h1&gt;
+       [@s.if test="printName"]
+          [@s.property value="myBeanProperty" /]
+       [/@s.if]
+   &lt;/body&gt;
+&lt;/html&gt;
+]]></script>
+</div></div>
+
+<p><img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/lightbulb_on.gif" height="16" width="16" alt="" border="0"> There are a number of <a shape="rect" class="external-link" href="http://freemarker.sourceforge.net/editors.html" rel="nofollow">IDE plugins</a> available for FreeMarker. But, if your IDE is not on the list, then the using alternative syntax will avoid conflicts between FreeMarker and the HTML syntax highlighting provided by your IDE.</p>
+
+<h2><a shape="rect" name="UsingFreemarkerTemplates-FreeMarkerlinks"></a>FreeMarker links</h2>
+
+<ul><li><a shape="rect" class="external-link" href="http://freemarker.sourceforge.net/" rel="nofollow">Home Page</a></li><li><a shape="rect" class="external-link" href="http://freemarker.sourceforge.net/docs/index.html" rel="nofollow">Documentation</a></li><li><a shape="rect" class="external-link" href="http://freemarker.sourceforge.net/editors.html" rel="nofollow">IDE Integration</a></li></ul>
+
+</div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/using-non-field-validators.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/using-non-field-validators.html (added)
+++ websites/production/struts/content/development/2.x/docs/using-non-field-validators.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,227 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <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 type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Using Non Field Validators</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="core-developers-guide.html">Core Developers Guide</a>&nbsp;&gt;&nbsp;<a href="validation.html">Validation</a>&nbsp;&gt;&nbsp;<a href="using-non-field-validators.html">Using Non Field Validators</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Using Non Field Validators</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14301">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14301">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14301">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14301">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14301">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14301">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><h2><a shape="rect" name="UsingNonFieldValidators-Description"></a>Description</h2>
+<p>The followings show a simple example using Webwork's Non Field Validators</p>
+
+<h3><a shape="rect" name="UsingNonFieldValidators-Step1"></a>Step 1</h3>
+<p>Create the jsp page</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;s:actionerror/&gt;
+
+&lt;s:form method="POST" action="submitNonFieldValidatorsExamples" namespace="/validation"&gt;
+	&lt;s:textfield name="someText" label="Some Text"/&gt;
+	&lt;s:textfield name="someTextRetype" label="Retype Some Text"/&gt;
+	&lt;s:textfield name="someTextRetypeAgain" label="Retype Some Text Again"/&gt;
+	&lt;s:submit label="Submit" cssClass="btn btn-primary"/&gt;
+&lt;/s:form&gt;
+
+
+]]></script>
+</div></div>
+
+
+<h3><a shape="rect" name="UsingNonFieldValidators-Step2"></a>Step 2</h3>
+<p>Create the action class</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+
+public class NonFieldValidatorsExampleAction extends AbstractValidationActionSupport {
+
+	private static final long serialVersionUID = -524460368233581186L;
+
+	private String someText;
+	private String someTextRetype;
+	private String someTextRetypeAgain;
+
+	public String getSomeText() {
+		return someText;
+	}
+
+	public void setSomeText(String someText) {
+		this.someText = someText;
+	}
+
+	public String getSomeTextRetype() {
+		return someTextRetype;
+	}
+
+	public void setSomeTextRetype(String someTextRetype) {
+		this.someTextRetype = someTextRetype;
+	}
+
+	public String getSomeTextRetypeAgain() {
+		return someTextRetypeAgain;
+	}
+
+	public void setSomeTextRetypeAgain(String someTextRetypeAgain) {
+		this.someTextRetypeAgain = someTextRetypeAgain;
+	}
+}
+
+
+]]></script>
+</div></div>
+
+
+<h3><a shape="rect" name="UsingNonFieldValidators-Step3"></a>Step 3</h3>
+<p>Create the validator.xml.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+  		
+&lt;validators&gt;
+	&lt;validator type="expression"&gt;
+		&lt;param name="expression"&gt;&lt;![CDATA[ ( (someText == someTextRetype) &amp;&amp; (someTextRetype == someTextRetypeAgain) ) ]]&gt;&lt;/param&gt;
+		&lt;message&gt;&lt;![CDATA[ all three text must be exactly the same ]]&gt;&lt;/message&gt;
+	&lt;/validator&gt;
+&lt;/validators&gt;
+
+]]></script>
+</div></div>
+
+</div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file



Mime
View raw message