You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by gi...@apache.org on 2017/09/21 10:05:39 UTC

[01/11] struts-site git commit: Updates production by Jenkins

Repository: struts-site
Updated Branches:
  refs/heads/asf-site 08f875300 -> 2b2ec9b30


http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/url-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/url-tag.html b/content/tag-developers/url-tag.html
new file mode 100644
index 0000000..b49f68c
--- /dev/null
+++ b/content/tag-developers/url-tag.html
@@ -0,0 +1,255 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/url-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="url">url</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>The id attribute is deprecated in Struts 2.1.x, and has been replaced by the var attribute.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.URL</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Setting a default value for includeParams</strong></p>
+
+<p>The property <em>struts.url.includeParams</em>  can be used to set the default value of the <em>includeParams</em>  attribute.</p>
+
+<p><strong>Setting the default value of includeParams</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;struts&gt;
+   ...
+   &lt;constant name="struts.url.includeParams" value="none" /&gt;
+   ...
+&lt;/struts&gt;
+
+</code></pre>
+</div>
+
+<p>See <em>Constant Configuration</em>  for further information.</p>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>As of Struts 2.1.3 the includeParams constant defaults to “none”.</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/url.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.URL</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/velocity-tags.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/velocity-tags.html b/content/tag-developers/velocity-tags.html
new file mode 100644
index 0000000..8136144
--- /dev/null
+++ b/content/tag-developers/velocity-tags.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/velocity-tags.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="velocity-tags">Velocity Tags</h1>
+
+<p>Velocity tags are extensions of the generic <a href="#PAGE_14248">Struts Tags</a> provided by the framework. You can get jump right in just by knowing the structure in which the tags can be accessed: <strong>#s*</strong><strong>tag</strong> <strong>*(…) … #end</strong>, where <strong>tag</strong>  is any of the <a href="#PAGE_14248">Struts Tags</a> supported by the framework.</p>
+
+<p>For example, in JSP you might create a form using Struts tags.</p>
+
+<p><strong>JSP Form</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:form action="updatePerson"&gt;
+    &lt;s:textfield label="First name" name="firstName"/&gt;
+    &lt;s:submit value="Update"/&gt;
+&lt;/s:form&gt;
+
+</code></pre>
+</div>
+
+<p>In Velocity, the same form can also be built using macros.</p>
+
+<p><strong>VM Form</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+#sform ("action=updatePerson")
+    #stextfield ("label=First name" "name=firstName")
+    #ssubmit ("value=Update")
+#end
+
+</code></pre>
+</div>
+
+<p>####Block and Inline Tags####</p>
+
+<p>Some VM tags require an #end statement while others do not. The inconsistency arises from a limitation in Velocity where tags must declare if they are a <em>block</em>  or <em>inline</em>  tag up front. As such, by default all tags are <em>inline</em>  except for a few key ones, such as the <a href="#PAGE_14201">form</a> tag.</p>
+
+<p>####Back To:####</p>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/velocity.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/velocity.html b/content/tag-developers/velocity.html
new file mode 100644
index 0000000..e2f1e3b
--- /dev/null
+++ b/content/tag-developers/velocity.html
@@ -0,0 +1,359 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/velocity.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="velocity">Velocity</h1>
+
+<p>Velocity is a templating language for Java.</p>
+
+<p>For more information on Velocity itself, please visit the <a href="http://velocity.apache.org/">Velocity website</a>^[http://velocity.apache.org/].</p>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>Velocity is similar to <a href="#PAGE_14078">FreeMarker</a>, as both are template languages that can be used outside of a Servlet container. The framework uses FreeMarker internally since it has better error reporting. Developers may also like that FreeMarker supports JSP taglibs. However, both are good alternatives to JSP.</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<p>####Getting Started####</p>
+
+<p>Getting started with Velocity is as simple as ensuring all the dependencies are included in your project’s classpath. Other than that, <em>struts-default.xml</em>  already configures the <em>Velocity Result</em> .</p>
+
+<p><strong>struts.xml</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;action name="test" class="com.acme.TestAction"&gt;
+    &lt;result name="success" type="velocity"&gt;test-success.vm&lt;/result&gt;
+&lt;/action&gt;
+
+</code></pre>
+</div>
+
+<p><strong>test-success.vm</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+<span class="nt">&lt;html&gt;</span>
+<span class="nt">&lt;head&gt;</span>
+    <span class="nt">&lt;title&gt;</span>Hello<span class="nt">&lt;/title&gt;</span>
+<span class="nt">&lt;/head&gt;</span>
+<span class="nt">&lt;body&gt;</span>
+
+Hello, ${name}
+
+<span class="nt">&lt;/body&gt;</span>
+<span class="nt">&lt;/html&gt;</span>
+
+</code></pre>
+</div>
+
+<p>Where</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>name
+</code></pre>
+</div>
+<p>is a property on the Action class. That’s it!</p>
+
+<p>There are few more details of interest, such as how templates are loaded and variables are resolved.</p>
+
+<p>####Template Loading####</p>
+
+<p>The framework looks for Velocity templates in two locations (in this order):</p>
+
+<ol>
+  <li>
+    <p>Web application</p>
+  </li>
+  <li>
+    <p>Class path</p>
+  </li>
+</ol>
+
+<p>The ordering is designed so that a default set of templates can be placed in a JAR (perhaps shared between applications). If a template needs to be overridden, a different version can be placed in the web application.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>Unlike JSPs, templates can be loaded from a JAR. Templates are a great way to support “plugins”, since the entire module can be delivered in a single JAR, and the views easily customized by the host application.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>####Variable Resolution####</p>
+
+<p>In Velocity, there are three sources for variables, searched in a specific order.</p>
+
+<ol>
+  <li>
+    <p>The value stack</p>
+  </li>
+  <li>
+    <p>The action context</p>
+  </li>
+  <li>
+    <p>Built-in variables</p>
+  </li>
+</ol>
+
+<p>Since the action context is resolved after the value stack, you can reference the variable without the typical preceding marker (#) that has to be used with the JSP</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>s:property
+</code></pre>
+</div>
+<p>tag. Omitting the marker can be convenient, but it can also trip you up, if used carelessly.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+#surl "id=url" "value=http://www.yahoo.com"
+Click &lt;a href="${url}"&gt;here&lt;/a&gt;!
+
+</code></pre>
+</div>
+
+<p>The Stuts2-Velocity integration layer provides several implicit variables.</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>Variable</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>stack</td>
+      <td>The value stack itself, useful for calls like ${stack.findString(‘ognl expr’)}</td>
+    </tr>
+    <tr>
+      <td>action</td>
+      <td>The action most recently executed</td>
+    </tr>
+    <tr>
+      <td>response</td>
+      <td>The HttpServletResponse</td>
+    </tr>
+    <tr>
+      <td>res</td>
+      <td>Same as response</td>
+    </tr>
+    <tr>
+      <td>request</td>
+      <td>The HttpServletRequest</td>
+    </tr>
+    <tr>
+      <td>req</td>
+      <td>Same as request</td>
+    </tr>
+    <tr>
+      <td>session</td>
+      <td>The HttpSession</td>
+    </tr>
+    <tr>
+      <td>application</td>
+      <td>The ServletContext</td>
+    </tr>
+    <tr>
+      <td>base</td>
+      <td>The request’s context path</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>####Configuring Velocity####</p>
+
+<p>You can configure Velocity by placing configuration items in <em>velocity.properties</em> .</p>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/xhtml-theme.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/xhtml-theme.html b/content/tag-developers/xhtml-theme.html
new file mode 100644
index 0000000..27ca8d4
--- /dev/null
+++ b/content/tag-developers/xhtml-theme.html
@@ -0,0 +1,400 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/xhtml-theme.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="xhtml-theme">xhtml theme</h1>
+
+<p>The xhtml provides all the basics that the <a href="#PAGE_14291">simple theme</a> provides and adds several features.</p>
+
+<ul>
+  <li>
+    <p>Standard two-column table layout for the HTML <a href="#PAGE_14248">Struts Tags</a> (<a href="#PAGE_14201">form</a>, <a href="#PAGE_13912">textfield</a>, <a href="#PAGE_14127">select</a>, and so forth)</p>
+  </li>
+  <li>
+    <p>Labels for each of the HTML <a href="#PAGE_14248">Struts Tags</a> on the left hand side (or top, depending on the</p>
+  </li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>labelposition
+</code></pre>
+</div>
+<p>attribute)</p>
+
+<ul>
+  <li>
+    <p><em>Validation</em>  and error reporting</p>
+  </li>
+  <li>
+    <p><em>Pure JavaScript Client Side Validation</em>  using 100% JavaScript on the browser</p>
+  </li>
+</ul>
+
+<p><strong>Wrapping the Simple Theme</strong></p>
+
+<p>The xhtml theme uses the “wrapping” technique described by <a href="#PAGE_13962">Extending Themes</a>. Let’s look at how the HTML tags are wrapped by a standard header and footer. For example, in the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>text.ftl
+</code></pre>
+</div>
+<p>template, the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlheader.ftl
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlfooter.ftl
+</code></pre>
+</div>
+<p>templates are wrapped around the simple template.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/text.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>(?)  The</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlheader.ftl
+</code></pre>
+</div>
+<p>is referenced using ${parameters.theme} so that the code can be reused by the <a href="#PAGE_14205">ajax theme</a>.</p>
+
+<p><strong>XHTML Theme Header</strong></p>
+
+<p>Now let’s look at the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlheader.ftl
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlheader-core.ftl
+</code></pre>
+</div>
+<p>. Again, these are split up for easy re-use with the <a href="#PAGE_14205">ajax theme</a>) contents:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/controlheader.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/controlheader-core.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>The header used by the HTML tags in the xhtml theme is complicated. However, a close look reveals that the logic produces two behaviors: either a two-column format or a two-row format. Generally the two-column approach is what we want, so that is the default option. To use the two-row approach, change the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>labelposition
+</code></pre>
+</div>
+<p>parameter to</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>top
+</code></pre>
+</div>
+<p>.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>The fieldErrors, usually caused by <em>Validation</em> , are printed out as a row above the HTML form element. Some people prefer that the errors display elsewhere, such as in a third column. If you wish to place these elsehwere, overriding the headers is easy, allowing you to continue to use the other features provided by this theme. See <a href="#PAGE_13817">Template Loading</a> for more information on how to do this.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>XHTML Theme Footer</strong></p>
+
+<p>The primary objective of</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlfooter.ftl
+</code></pre>
+</div>
+<p>is to close the table. But, before the table closes, the template checks for an</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>after
+</code></pre>
+</div>
+<p>parameter.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/controlfooter.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>While “after” isn’t an attribute supported by any of the <a href="#PAGE_14248">Struts Tags</a>, if you are using <a href="#PAGE_14294">FreeMarker Tags</a>, <a href="#PAGE_13950">Velocity Tags</a>, or the <a href="#PAGE_13825">param</a> tag in any template language, you can add an</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>after
+</code></pre>
+</div>
+<p>parameter to place any content you like after the <a href="#PAGE_14291">simple theme</a> template renders. The</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>after
+</code></pre>
+</div>
+<p>attribute makes it easier to fine-tune HTML forms for your specific environment.</p>
+
+<p><strong>Special Interest</strong></p>
+
+<p>Two xhtml templates of special interest are</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>head
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>form
+</code></pre>
+</div>
+<p>.</p>
+
+<p><strong>head template</strong></p>
+
+<p>The xhtml <a href="#PAGE_13997">head</a> template extends the <em>simple head template</em>  and provides an additional CSS that helps render the  form elements.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/head.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>The head template imports a style sheet.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/styles.css</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>form template</strong></p>
+
+<p>The xhtml form template sets up the wrapping table around all the other  form elements. In addition to creating this wrapping table, the opening and closing templates also, if the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>validate
+</code></pre>
+</div>
+<p>parameter is set to true, enable <em>Pure JavaScript Client Side Validation</em> .</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/form.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>The closing template,</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>form-close.ftl*
+</code></pre>
+</div>
+<p>:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/form-close.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>xhtml form template</strong></p>
+
+<p>The xhtml form template sets up the wrapping table around all the other <a href="#PAGE_13834">xhtml theme</a> form elements. In addition to creating this wrapping table, the opening and closing templates also, if the <em>validate</em>  parameter is set to true, enable <em>Pure JavaScript Client Side Validation</em> . See the <strong>form.ftl</strong> contents:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/form.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>The closing template, <strong>form-close.ftl</strong>:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/form-close.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>xhtml head template</strong></p>
+
+<p>The xhtml <a href="#PAGE_13997">head</a> template extends the <em>simple head template</em>  and provides an additional CSS that helps render the <a href="#PAGE_13834">xhtml theme</a> form elements. The contents of <strong>head.ftl</strong> are:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=webwork/src/java/template/xhtml/head.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>The contents of <strong>styles.css</strong> are:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=webwork/src/java/template/xhtml/styles.css</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[08/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/debug-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/debug-tag.html b/content/tag-developers/debug-tag.html
new file mode 100644
index 0000000..d89dcd0
--- /dev/null
+++ b/content/tag-developers/debug-tag.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/debug-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="debug">debug</h1>
+
+<p>Outputs the content of the Value Stack.</p>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/else-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/else-tag.html b/content/tag-developers/else-tag.html
new file mode 100644
index 0000000..e59820c
--- /dev/null
+++ b/content/tag-developers/else-tag.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/else-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="else">else</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Else</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/else.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.Else</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/elseif-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/elseif-tag.html b/content/tag-developers/elseif-tag.html
new file mode 100644
index 0000000..bb3b24c
--- /dev/null
+++ b/content/tag-developers/elseif-tag.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/elseif-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="elseif">elseif</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.ElseIf</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/elseif.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.ElseIf</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/extending-themes.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/extending-themes.html b/content/tag-developers/extending-themes.html
new file mode 100644
index 0000000..7a807eb
--- /dev/null
+++ b/content/tag-developers/extending-themes.html
@@ -0,0 +1,335 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/extending-themes.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="extending-themes">Extending Themes</h1>
+
+<p>Most often, an application may just need to override a template (see <a href="#PAGE_13817">Template Loading</a>) so that a certain control renders differently. Or, an application may need to add a new template to an existing theme. Other times, you might want to create an entirely new theme, perhaps because you are building a rich set of unique and reusable templates for your organization.</p>
+
+<p>There are three ways to create new themes:</p>
+
+<ul>
+  <li>
+    <p>Create a new theme from scratch (<strong>hard!</strong>)</p>
+  </li>
+  <li>
+    <p>Wrap an existing theme</p>
+  </li>
+  <li>
+    <p>Extend an existing theme</p>
+  </li>
+</ul>
+
+<p><strong>Creating a New Theme from Scratch</strong></p>
+
+<p>It’s probably never a good idea to create a new theme from scratch. Instead, use the <a href="#PAGE_14291">simple theme</a> as a starting point. The simple theme provides just enough foundation to make it easy to create new controls by extending or wrapping the basic controls. Before starting a new theme, be sure to review the source templates for all of the provided themes. The existing themes are your best guide to creating new themes.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Wrapping an Existing Theme</strong></p>
+
+<p>The <a href="#PAGE_13834">xhtml theme</a> provides several good examples of the “wrapping” technique. The <a href="#PAGE_14291">simple theme</a> renders the basic control. The xhtml theme “dresses up” many of the controls by adding a header and footer.</p>
+
+<p><strong>Wrapping a control</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" /&gt;
+&lt;#include "/${parameters.templateDir}/simple/xxx.ftl" /&gt;
+&lt;#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /&gt;
+
+</code></pre>
+</div>
+
+<p>Wrapping is a great way to augment the basic HTML elements provided by the simple theme.</p>
+
+<p><strong>Extending an Existing Theme</strong></p>
+
+<p>One benefit of object-orientated programming is that it lets us “design by difference.” We can extend an object and code only the behaviour that changes. Themes provide a similar capability. The subdirectory that hosts a theme can contain a</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>theme.properties
+</code></pre>
+</div>
+<p>file. A</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>parent
+</code></pre>
+</div>
+<p>entry can be added to the property file to designate a theme to extend. The <a href="#PAGE_14205">ajax theme</a> extends the <a href="#PAGE_13834">xhtml theme</a> using this technique.</p>
+
+<p><strong>/template/ajax/theme.properties</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>parent = xhtml
+
+</code></pre>
+</div>
+
+<p>An extended theme does not need to implement every single template that the <a href="#PAGE_14248">Struts Tags</a> expect. It only needs to implement the templates that change. The other templates are loaded from the parent template.</p>
+
+<p><strong>Special parameters</strong></p>
+
+<p><a href="http://struts.apache.org/development/2.x/struts2-core/apidocs/org/apache/struts2/components/UIBean.html">UIBean</a>^[http://struts.apache.org/development/2.x/struts2-core/apidocs/org/apache/struts2/components/UIBean.html] provides few special parameters which can be used to build a new template (they are already used in</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>xhtml
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>css_xhtml
+</code></pre>
+</div>
+<p>theme):</p>
+
+<ul>
+  <li></li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>templateDir
+</code></pre>
+</div>
+<ul>
+  <li>
+    <p>current value of templateDir parameter, see <a href="#PAGE_14227">Selecting Template Directory</a></p>
+  </li>
+  <li></li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>theme
+</code></pre>
+</div>
+<ul>
+  <li>
+    <p>used theme, see <a href="#PAGE_14016">Selecting Themes</a></p>
+  </li>
+  <li></li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>template
+</code></pre>
+</div>
+<ul>
+  <li>
+    <p>name of the template file to use (i.e. text)</p>
+  </li>
+  <li></li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>themeExpansionToken
+</code></pre>
+</div>
+<ul>
+  <li>special token used to indicate to search for a template also in parent theme (when used with</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;#include /&gt;
+</code></pre>
+</div>
+<p>directive)</p>
+
+<ul>
+  <li></li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>expandTheme
+</code></pre>
+</div>
+<ul>
+  <li>tells internal template loader mechanism to try load template from current theme and then from parent theme (and parent theme, and so on)</li>
+</ul>
+
+<p>Using</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>expandTheme
+</code></pre>
+</div>
+<p>parameter allows to override only some parts of the theme’s templates, e.g. css.ftl. You can define a new theme (set theme.properties) and override just single file.</p>
+
+<p>${parameters.expandTheme} is a recurrence which tells ThemeManager to load template from current theme and then from parent theme (defined in theme.properties) and so on.</p>
+
+<p>Please also notice that the ThemeManager builds list of possible templates based on current theme and inherited themes (/template/custom/textarea.ftl, /template/xhtml/textarea.ftl, /template/simple/textarea.ftl). This is also true for templates which are loaded via ${parameters.expandTheme}.</p>
+
+<p>(ok)  See also example <em>Struts 2 Themes</em>  or <a href="http://www.vitarara.org/cms/struts_2_cookbook/creating_a_theme">Creating a Theme in Struts 2</a>^[http://www.vitarara.org/cms/struts_2_cookbook/creating_a_theme] (Mark Menard)</p>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/form-tags.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/form-tags.html b/content/tag-developers/form-tags.html
new file mode 100644
index 0000000..171d1d7
--- /dev/null
+++ b/content/tag-developers/form-tags.html
@@ -0,0 +1,481 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/form-tags.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="form-tags">Form Tags</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>Within the form tags, there are two classes of tags: the form tag itself, and all other tags, which make up the individual form elements. The behavior of the form tag is different than the elements enclosed within it.</p>
+
+<p><strong>Form Tag Themes</strong></p>
+
+<p>As explained in <a href="#PAGE_14247">Themes and Templates</a>, the HTML Tags (which includes Form Tags) are all driven by templates. Templates are grouped together to create themes. The framework bundles three themes in the distribution.</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>simple</th>
+      <th>Sometimes <em>too</em>  simple</th>
+      <th> </th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>xhtml</td>
+      <td>Extends simple</td>
+      <td>(default)</td>
+    </tr>
+    <tr>
+      <td>ajax</td>
+      <td>Extends xhtml</td>
+      <td> </td>
+    </tr>
+  </tbody>
+</table>
+
+<p>The predefined themes can be used “as is” or customized.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>The xhtml theme renders out a two-column table. If a different layout is needed, do <em>not</em>  write your own HTML. Create a new theme or utilize the simple theme.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Simple theme caveats</strong></p>
+
+<p>The downside of using the simple theme is that it doesn’t support as many of the attributes that the other themes do. For example, the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>label
+</code></pre>
+</div>
+<p>attribute does nothing in the simple theme, and the automatic display of error messages is not supported.</p>
+
+<p><strong>Common Attributes</strong></p>
+
+<p>All the form tags extend the UIBean class. This base class provides a set of common attributes, that can be grouped in to three categories:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>templated-related
+</code></pre>
+</div>
+<p>, javascript-related, and general attributes. The individual attributes are documented on each tag’s reference page.</p>
+
+<p>In addition to the common attributes, a special attribute exists for all form element tags:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>form
+</code></pre>
+</div>
+<p>(${parameters.form}). The</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>form
+</code></pre>
+</div>
+<p>property represents the attributes used to render the form tag, such as the form’s id. In a template, the form’s ID can be found by calling ${parameters.form.id}.</p>
+
+<p><strong>Template-Related Attributes</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=templateRelatedAttributes|javadoc=true|url=org.apache.struts2.components.UIBean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Javascript-Related Attributes</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javascriptRelatedAttributes|javadoc=true|url=org.apache.struts2.components.UIBean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Tooltip Related Attributes</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tooltipattributes|javadoc=true|url=org.apache.struts2.components.UIBean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>General Attributes</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=generalAttributes|javadoc=true|url=org.apache.struts2.components.UIBean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<table>
+  <tbody>
+    <tr>
+      <td>Some tag attributes may not be utilized by all, or any, of the templates. For example, the form tag supports the tabindex attribute, but none of the themes render the tabindex.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Value/Name Relationship</strong></p>
+
+<p>In many of the tags (except for the form tag) there is a unique relationship between the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>name
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>attributes. The</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>name
+</code></pre>
+</div>
+<p>attribute provides the name for the tag, which in turn is used as the control attribute when the form is submitted. The value submitted is bound to the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>name
+</code></pre>
+</div>
+<p>. In most cases, the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>name
+</code></pre>
+</div>
+<p>maps to a simple JavaBean property, such as “postalCode”. On a submit, the value would be set to the property by calling the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>setPostalCode
+</code></pre>
+</div>
+<p>mutator.</p>
+
+<p>Likewise, a form control could be populated by calling a JavaBean accessor, like</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>getPostalCode
+</code></pre>
+</div>
+<p>. In the expression language, we can refer to the JavaBean property by name. An expression like “%{postalCode}” would in turn call</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>getPostalCode
+</code></pre>
+</div>
+<p>.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;@s.form action="updateAddress"&gt;
+    &lt;@s.textfield label="Postal Code" name="postalCode" value="%{postalCode}"/&gt;
+    ...
+&lt;/@s.form&gt;
+
+</code></pre>
+</div>
+
+<p>However, since the tags imply a relationship between the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>name
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>, the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>attribute is optional. If a</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>is not specified, by default, the JavaBean accessor is used instead.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;@s.form action="updateAddress"&gt;
+    &lt;@s.textfield label="Postal Code" name="postalCode"/&gt;
+    ...
+&lt;/@s.form&gt;
+
+</code></pre>
+</div>
+
+<p>While most attributes are exposed to the underlying templates as the same key as the attribute (${parameters.label}), the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>attribute is not. Instead, it can be accessed via the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>nameValue
+</code></pre>
+</div>
+<p>key (${parameters.nameValue}). The</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>nameValue
+</code></pre>
+</div>
+<p>key indicates that the value may have been generated from the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>name
+</code></pre>
+</div>
+<p>attribute rather than explicitly defined in the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>attribute.</p>
+
+<p><strong>ID Name Assignment</strong></p>
+
+<p>All form tags automatically assign an ID to the control, but the ID can be overridden if needed.</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>Forms</th>
+      <th>The default ID is the action name. For example, “updateAddress”.</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>Controls</td>
+      <td>The default ID is the form’s name concatenated with the tag name. For example, “updateAddress_postalCode”.</td>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Form labelposition propagation</strong></p>
+
+<p>When </p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>labelposition
+</code></pre>
+</div>
+<p>attribute was defined for </p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:form&gt;
+</code></pre>
+</div>
+<p>tag it will be propagated to all form elements, but if form element defines its own </p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>labelposition
+</code></pre>
+</div>
+<p>it will take precedence over </p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:form&gt;
+</code></pre>
+</div>
+<p>’s attribute. Since 2.3.17.</p>
+
+<p><strong>Required Attribute</strong></p>
+
+<p>The</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>required
+</code></pre>
+</div>
+<p>attribute on many UI tags defaults to true only if you have client-side validation enabled, and a validator is associated with that particular field.</p>
+
+<p><strong>Tooltip</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tooltipdescription|javadoc=true|url=org.apache.struts2.components.UIBean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tooltipexample|lang=xml|javadoc=true|url=org.apache.struts2.components.UIBean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/freemarker-tags.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/freemarker-tags.html b/content/tag-developers/freemarker-tags.html
new file mode 100644
index 0000000..6d4e1da
--- /dev/null
+++ b/content/tag-developers/freemarker-tags.html
@@ -0,0 +1,331 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/freemarker-tags.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 class="no_toc" id="freemarker-tags">FreeMarker Tags</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#attributes-and-parameters" id="markdown-toc-attributes-and-parameters">Attributes and Parameters</a>    <ul>
+      <li><a href="#using-inline-attributes-with-templates" id="markdown-toc-using-inline-attributes-with-templates">Using inline attributes with templates</a></li>
+    </ul>
+  </li>
+  <li><a href="#attribute-types" id="markdown-toc-attribute-types">Attribute Types</a></li>
+  <li><a href="#jsp-tag-support" id="markdown-toc-jsp-tag-support">JSP Tag Support</a></li>
+</ul>
+
+<p>FreeMarker tags are extensions of the generic <a href="struts-tags.html">Struts Tags</a> provided by the framework. You can jump 
+right in just by knowing the generic structure in which the tags can be accessed:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.tag&gt; ...<span class="err">&lt;</span>/@s.tag&gt;
+</code></pre>
+</div>
+
+<p>, where <code class="highlighter-rouge">tag</code> is any of the <a href="tags.html">tags</a> supported by the framework.</p>
+
+<p>For example, in JSP you might create a form using Struts tags.</p>
+
+<p><strong>JSP Form</strong></p>
+
+<pre><code class="language-jsp">&lt;s:form action="updatePerson"&gt;
+    &lt;s:textfield label="First name" name="firstName"/&gt;
+    &lt;s:submit value="Update"/&gt;
+&lt;/s:form&gt;
+</code></pre>
+
+<p>In FreeMarker the same form can also be built using Struts tags.</p>
+
+<p><strong>FTL Form</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.form action="updatePerson"&gt;
+    <span class="err">&lt;</span>@s.textfield label="First name" name="firstName"/&gt;
+    <span class="err">&lt;</span>@s.submit value="Update"/&gt;
+<span class="err">&lt;</span>/@s.form&gt;
+</code></pre>
+</div>
+
+<p><strong>But, wait there’s more!</strong></p>
+
+<p>Aside from doing everything that the JSP tags do, the FTL tags boast additional features that you can use to make your 
+pages even easier to code. You can even invoke third-party JSP taglibs as if there were native FTL tags.</p>
+
+<h2 id="attributes-and-parameters">Attributes and Parameters</h2>
+
+<p>Unlike older versions of JSP (in which the <a href="jsp-tags.html">JSP Tags</a> are based), FreeMarker allows for <em>dynamic attributes</em>, 
+much like JSP 2.0. You can supply attributes to the tags that the tag doesn’t explicitedly support. Those attributes 
+that cannot be applied directly to the tag object will be set to the tag’s general-purpose <code class="highlighter-rouge">parameters</code> Map.</p>
+
+<p>Suppose we wanted to build an URL in a JSP. The URL needs to take an arbitary parameter to the query string, 
+that (being arbitary) isn’t specified on the URL tag. In a JSP, we’d have to use the <code class="highlighter-rouge">url</code> and <code class="highlighter-rouge">param</code> tags together.</p>
+
+<p><strong>Creating a URL with a query string (JSP)</strong></p>
+
+<pre><code class="language-jsp">&lt;s:url value="somePage"&gt;
+    &lt;s:param name="personId" value="%{personId}"/&gt;
+&lt;/s:url&gt;
+</code></pre>
+
+<p>In FreeMarker, we can pass the arbitrary parameter directly and create the URL in one simple statement.</p>
+
+<p><strong>Creating a URL with a query string (FTL)</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.url value="somePage" personId="${personId}"/&gt;
+</code></pre>
+</div>
+
+<h3 id="using-inline-attributes-with-templates">Using inline attributes with templates</h3>
+
+<p>Suppose you created a “three column” theme to replace the typical two column theme (xhtml). You might want an additional 
+parameter to display in the third column called “description”. Using FreeMarker, you can just pop the description 
+attribute into the textfield tag, no fuss, no muss.</p>
+
+<p><strong>Passing an attribute to the template</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.form action="updatePerson"&gt;
+    <span class="err">&lt;</span>@s.textfield label="First name" name="firstName" description="..."/&gt;
+    <span class="err">&lt;</span>@s.submit value="Update"/&gt;
+<span class="err">&lt;</span>/@s.form&gt;
+</code></pre>
+</div>
+
+<p>In the new template, the description is referenced via the parameters Map: <code class="highlighter-rouge">${parameters.description}</code>.</p>
+
+<blockquote>
+  <p>For simple cases, inline attributes are much easier to use than the param} tag. But, the <code class="highlighter-rouge">param</code> tag is more flexible 
+than inline attributes for advanced use cases. For example, <code class="highlighter-rouge">param</code> can take the entire body of the tag and apply 
+that as the <code class="highlighter-rouge">value</code> attribute.</p>
+</blockquote>
+
+<h2 id="attribute-types">Attribute Types</h2>
+
+<p>Remember that all tag attributes must first be set as Strings - they are then later evaluated (using <a href="ognl.html">OGNL</a>) 
+to a different type, such as List, int, or boolean. This generally works just fine, but it can be limiting when using 
+FreeMarker which provides more advanced ways to apply attributes. Suppose the following example:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.select label="Foo label - ${foo}" name="${name}" list="%1"/&gt;
+</code></pre>
+</div>
+
+<p>What will happen here is that each attribute will be evaluated to a String as best it can. This may involve calling the
+<code class="highlighter-rouge">toString</code> method on the internal FreeMarker objects. In this case, all objects will end up being exactly what you would 
+expect. Then, when the tag runs, the <code class="highlighter-rouge">list</code> attribute will be converted from a String to a List using <a href="ogn.html">OGNL</a>’s 
+advanced collection support.</p>
+
+<p>But suppose you wish to use FreeMarker’s list or hash support instead? You can do this:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.select label="Foo label - ${foo}" name="${name}" list=[1, 2, 3]/&gt;
+</code></pre>
+</div>
+
+<p>Notice that the list attribute no longer has quotes around it. Now it will come in to the tag as an object that can’t 
+easily be converted to a String. Normally, the tag would just call <code class="highlighter-rouge">toString</code>, which would return <code class="highlighter-rouge">[1, 2, 3]</code> and be 
+unable to be converted back to a List by OGNL. Rather than go through all this back and forth, the frameworks’s FreeMarker 
+tag support will recognize collections and not pass them through the normal tag attribute. Instead, the framework will 
+set them directly in the <code class="highlighter-rouge">parameters</code> Map, ready to be consumed by the template.</p>
+
+<p>In the end, everything tends to do what you would expect, but it can help to understand the difference of when OGNL is 
+being used and when it isn’t, and how attribute types get converted.</p>
+
+<h2 id="jsp-tag-support">JSP Tag Support</h2>
+
+<p>While the framework provides native FreeMarker Tags, you might wish to use other third-party tags that are only available 
+for JSP. Fortunately, FreeMarker has the ability to run JSP tags. To do so, you must include the JspSupportServlet in 
+the application’s <code class="highlighter-rouge">web.xml</code>, as this allows the FreeMarker integration to get access to the required objects needed 
+to emulate a JSP taglib container.</p>
+
+<p><strong>Adding JspSupportSerlvet to web.xml</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;servlet&gt;</span>
+    <span class="nt">&lt;servlet-name&gt;</span>JspSupportServlet<span class="nt">&lt;/servlet-name&gt;</span>
+    <span class="nt">&lt;servlet-class&gt;</span>org.apache.struts2.views.JspSupportServlet<span class="nt">&lt;/servlet-class&gt;</span>
+    <span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
+<span class="nt">&lt;/servlet&gt;</span>
+</code></pre>
+</div>
+
+<p>Once you’ve done that, you can simply add something like this in your templates:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>#assign cewolf=JspTaglibs["/WEB-INF/cewolf.tld"] /&gt;
+...
+<span class="err">&lt;</span>@cewold.xxx ... /&gt;
+</code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[10/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/ajax-and-javascript-recipes.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/ajax-and-javascript-recipes.html b/content/tag-developers/ajax-and-javascript-recipes.html
new file mode 100644
index 0000000..fd3a533
--- /dev/null
+++ b/content/tag-developers/ajax-and-javascript-recipes.html
@@ -0,0 +1,1162 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/ajax-and-javascript-recipes.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 class="no_toc" id="ajax-and-javascript-recipes">Ajax and JavaScript Recipes</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#common" id="markdown-toc-common">Common</a></li>
+  <li><a href="#requests" id="markdown-toc-requests">Requests</a>    <ul>
+      <li><a href="#request-is-triggered-by-a-topic" id="markdown-toc-request-is-triggered-by-a-topic">Request is triggered by a topic</a></li>
+      <li><a href="#attached-to-an-event" id="markdown-toc-attached-to-an-event">Attached to an event</a></li>
+      <li><a href="#attached-to-an-event-on-multiple-sources" id="markdown-toc-attached-to-an-event-on-multiple-sources">Attached to an event on multiple sources</a></li>
+      <li><a href="#attached-to-multiple-events-on-multiple-sources" id="markdown-toc-attached-to-multiple-events-on-multiple-sources">Attached to multiple events on multiple sources</a></li>
+      <li><a href="#update-target-element-with-content-returned-from-url" id="markdown-toc-update-target-element-with-content-returned-from-url">Update target element with content returned from url</a></li>
+      <li><a href="#update-multiple-target-elements-with-content-returned-from-url" id="markdown-toc-update-multiple-target-elements-with-content-returned-from-url">Update multiple target elements with content returned from url</a></li>
+      <li><a href="#show-indicator-while-request-is-in-progress" id="markdown-toc-show-indicator-while-request-is-in-progress">Show indicator while request is in progress</a></li>
+      <li><a href="#highlight-content-of-target-with-blue-color-for-2-seconds" id="markdown-toc-highlight-content-of-target-with-blue-color-for-2-seconds">Highlight content of target with blue color, for 2 seconds</a></li>
+      <li><a href="#execute-javascript-in-the-returned-content" id="markdown-toc-execute-javascript-in-the-returned-content">Execute JavaScript in the returned content</a></li>
+      <li><a href="#publish-a-topic-before-the-request" id="markdown-toc-publish-a-topic-before-the-request">Publish a topic before the request</a></li>
+      <li><a href="#publish-a-topic-after-the-request" id="markdown-toc-publish-a-topic-after-the-request">Publish a topic after the request</a></li>
+      <li><a href="#publish-a-topic-on-error" id="markdown-toc-publish-a-topic-on-error">Publish a topic on error</a></li>
+      <li><a href="#show-a-fixed-error-message-on-error" id="markdown-toc-show-a-fixed-error-message-on-error">Show a fixed error message on error</a></li>
+      <li><a href="#prevent-a-request" id="markdown-toc-prevent-a-request">Prevent a request</a></li>
+      <li><a href="#submit-a-form-plain-form" id="markdown-toc-submit-a-form-plain-form">Submit a form (plain form)</a></li>
+      <li><a href="#submit-a-form-using-sform-tag" id="markdown-toc-submit-a-form-using-sform-tag">Submit a form (using s:form tag)</a></li>
+    </ul>
+  </li>
+  <li><a href="#div" id="markdown-toc-div">Div</a>    <ul>
+      <li><a href="#loads-its-content-after-page-is-loaded" id="markdown-toc-loads-its-content-after-page-is-loaded">Loads its content after page is loaded</a></li>
+      <li><a href="#reloads-content-when-topic-is-published" id="markdown-toc-reloads-content-when-topic-is-published">Reloads content when topic is published</a></li>
+      <li><a href="#updates-its-content-every-2-seconds-shows-indicator-while-loading-content" id="markdown-toc-updates-its-content-every-2-seconds-shows-indicator-while-loading-content">Updates its content every 2 seconds, shows indicator while loading content</a></li>
+      <li><a href="#loads-its-content-after-a-delay-of-2-seconds" id="markdown-toc-loads-its-content-after-a-delay-of-2-seconds">Loads its content after a delay of 2 seconds</a></li>
+      <li><a href="#show-some-text-while-content-is-loaded" id="markdown-toc-show-some-text-while-content-is-loaded">Show some text while content is loaded</a></li>
+      <li><a href="#fixed-error-message" id="markdown-toc-fixed-error-message">Fixed error message</a></li>
+      <li><a href="#execute-javascript-in-the-returned-content-1" id="markdown-toc-execute-javascript-in-the-returned-content-1">Execute JavaScript in the returned content</a></li>
+      <li><a href="#control-refresh-timer-using-topics" id="markdown-toc-control-refresh-timer-using-topics">Control refresh timer using topics</a></li>
+    </ul>
+  </li>
+  <li><a href="#date-and-time-picker" id="markdown-toc-date-and-time-picker">Date and Time picker</a>    <ul>
+      <li><a href="#date-picker" id="markdown-toc-date-picker">Date picker</a></li>
+      <li><a href="#time-picker" id="markdown-toc-time-picker">Time picker</a></li>
+      <li><a href="#set-value-from-an-string" id="markdown-toc-set-value-from-an-string">Set value from an String</a></li>
+      <li><a href="#set-value-from-stack-value-must-evaluate-to-either-a-date-calendar-or-an-string-that-can-be-parsed-using-the-formats-defined-in-simpledateformat-and-rfc-3339" id="markdown-toc-set-value-from-stack-value-must-evaluate-to-either-a-date-calendar-or-an-string-that-can-be-parsed-using-the-formats-defined-in-simpledateformat-and-rfc-3339">Set value from stack (value must evaluate to either a Date, Calendar, or an String that can be parsed using the formats defined in SimpleDateFormat, and RFC 3339)</a></li>
+      <li><a href="#setget-value-using-javascript" id="markdown-toc-setget-value-using-javascript">Set/Get value using JavaScript</a></li>
+      <li><a href="#style-the-textbox" id="markdown-toc-style-the-textbox">Style the textbox</a></li>
+      <li><a href="#publish-topic-when-value-changes" id="markdown-toc-publish-topic-when-value-changes">Publish topic when value changes</a></li>
+      <li><a href="#use-other-locales" id="markdown-toc-use-other-locales">Use other locales</a></li>
+    </ul>
+  </li>
+  <li><a href="#tabbed-panel" id="markdown-toc-tabbed-panel">Tabbed Panel</a>    <ul>
+      <li><a href="#local-tabs" id="markdown-toc-local-tabs">Local Tabs</a></li>
+      <li><a href="#local-and-remote-tabs" id="markdown-toc-local-and-remote-tabs">Local and remote tabs</a></li>
+      <li><a href="#fixed-size-size-does-not-adjust-to-current-tab" id="markdown-toc-fixed-size-size-does-not-adjust-to-current-tab">Fixed size (size does not adjust to current tab)</a></li>
+      <li><a href="#do-not-load-tab-2-when-page-loads-it-will-be-loaded-when-selected" id="markdown-toc-do-not-load-tab-2-when-page-loads-it-will-be-loaded-when-selected">Do not load tab 2 when page loads (it will be loaded when selected)</a></li>
+      <li><a href="#reload-tabs-content-when-selected" id="markdown-toc-reload-tabs-content-when-selected">Reload tabs content when selected</a></li>
+      <li><a href="#disabled-tabs" id="markdown-toc-disabled-tabs">Disabled tabs</a></li>
+      <li><a href="#enabledisable-tabs-using-javascript" id="markdown-toc-enabledisable-tabs-using-javascript">Enable/Disable tabs using JavaScript</a></li>
+      <li><a href="#set-tab-labels-position-to-bottom-can-be-top-right-bottom-left" id="markdown-toc-set-tab-labels-position-to-bottom-can-be-top-right-bottom-left">Set Tab labels position to bottom (can be: top, right, bottom, left)</a></li>
+      <li><a href="#allow-tab-2-to-be-removedclosed" id="markdown-toc-allow-tab-2-to-be-removedclosed">Allow tab 2 to be removed(closed)</a></li>
+      <li><a href="#publish-topics-when-tab-is-selected" id="markdown-toc-publish-topics-when-tab-is-selected">Publish topics when tab is selected</a></li>
+      <li><a href="#select-tab-using-javascript" id="markdown-toc-select-tab-using-javascript">Select tab using JavaScript</a></li>
+      <li><a href="#prevent-tab-2-from-being-selected" id="markdown-toc-prevent-tab-2-from-being-selected">Prevent tab 2 from being selected</a></li>
+      <li><a href="#customize-template-css-path-dojo-widget-template-css" id="markdown-toc-customize-template-css-path-dojo-widget-template-css">Customize template css path (Dojo widget template css)</a></li>
+    </ul>
+  </li>
+  <li><a href="#autocompleter" id="markdown-toc-autocompleter">Autocompleter</a>    <ul>
+      <li><a href="#fixed-list" id="markdown-toc-fixed-list">Fixed list</a></li>
+      <li><a href="#set-initial-value" id="markdown-toc-set-initial-value">Set initial value</a></li>
+      <li><a href="#force-valid-option-restore-option-when-focus-is-lost" id="markdown-toc-force-valid-option-restore-option-when-focus-is-lost">Force valid option (restore option when focus is lost)</a></li>
+      <li><a href="#using-the-json-plugin-to-generate-the-values-one-of-the-possible-ways" id="markdown-toc-using-the-json-plugin-to-generate-the-values-one-of-the-possible-ways">Using the JSON plugin to generate the values (one of the possible ways)</a></li>
+      <li><a href="#example-action" id="markdown-toc-example-action">Example action</a></li>
+      <li><a href="#set-initial-key-and-value" id="markdown-toc-set-initial-key-and-value">Set initial key and value</a></li>
+      <li><a href="#change-default-key-name" id="markdown-toc-change-default-key-name">Change default key name</a></li>
+      <li><a href="#json-accepted" id="markdown-toc-json-accepted">JSON accepted</a></li>
+      <li><a href="#load-characters-while-user-types-when-text-size--3" id="markdown-toc-load-characters-while-user-types-when-text-size--3">Load characters while user types (when text size &gt;= 3)</a></li>
+      <li><a href="#hide-dropdown-arrow" id="markdown-toc-hide-dropdown-arrow">Hide dropdown arrow</a></li>
+      <li><a href="#limit-options-shown-to-3" id="markdown-toc-limit-options-shown-to-3">Limit options shown to 3</a></li>
+      <li><a href="#all-matching-options-are-shown" id="markdown-toc-all-matching-options-are-shown">All matching options are shown</a></li>
+      <li><a href="#set-dropdown-height-and-width-in-pixels" id="markdown-toc-set-dropdown-height-and-width-in-pixels">Set dropdown height and width, in pixels</a></li>
+      <li><a href="#disable-it-when-page-is-loaded" id="markdown-toc-disable-it-when-page-is-loaded">Disable it when page is loaded</a></li>
+      <li><a href="#disable-itenable-it-using-javascript" id="markdown-toc-disable-itenable-it-using-javascript">Disable it/enable it using JavaScript</a></li>
+      <li><a href="#reload-options-when-topic-is-published" id="markdown-toc-reload-options-when-topic-is-published">Reload options when topic is published</a></li>
+      <li><a href="#submit-form-when-options-are-loaded" id="markdown-toc-submit-form-when-options-are-loaded">Submit form when options are loaded</a></li>
+      <li><a href="#filter-fields-top-be-submitted-when-options-are-loaded-return-true-to-include" id="markdown-toc-filter-fields-top-be-submitted-when-options-are-loaded-return-true-to-include">Filter fields top be submitted when options are loaded (return true to include)</a></li>
+      <li><a href="#link-two-autocompleters-using-topics" id="markdown-toc-link-two-autocompleters-using-topics">Link two autocompleters, using topics</a></li>
+      <li><a href="#show-options-but-dont-make-suggestion-autocomple-in-the-textbox" id="markdown-toc-show-options-but-dont-make-suggestion-autocomple-in-the-textbox">Show options, but don’t make suggestion (autocomple) in the textbox</a></li>
+      <li><a href="#prevent-options-from-loading-when-page-loads" id="markdown-toc-prevent-options-from-loading-when-page-loads">Prevent options from loading when page loads</a></li>
+    </ul>
+  </li>
+</ul>
+
+<p><strong>Dojo plugin is deprecated</strong></p>
+
+<h2 id="common">Common</h2>
+
+<p>All examples on this page assume the following JSP fragment is on the same page as the example.</p>
+
+<pre><code class="language-jsp">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;
+&lt;%@ taglib prefix="sx" uri="/struts-dojo-tags" %&gt;
+
+&lt;head&gt;
+    &lt;sx:head /&gt;
+&lt;/head&gt;
+
+&lt;s:url id="url" value="/MyAction.action" /&gt;
+</code></pre>
+
+<h2 id="requests">Requests</h2>
+
+<h3 id="request-is-triggered-by-a-topic">Request is triggered by a topic</h3>
+
+<pre><code class="language-jsp">&lt;s:submit value="Make Request" onclick="dojo.event.topic.publish('/request')" /&gt;
+&lt;sx:bind listenTopics="/request" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="attached-to-an-event">Attached to an event</h3>
+
+<pre><code class="language-jsp">&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind sources="submit" events="onclick" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="attached-to-an-event-on-multiple-sources">Attached to an event on multiple sources</h3>
+
+<pre><code class="language-jsp">&lt;s:submit value="Make Request" id="submit0" /&gt;
+&lt;s:submit value="Make Request" id="submit1" /&gt;
+&lt;sx:bind sources="submit0,submit1" events="onclick" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="attached-to-multiple-events-on-multiple-sources">Attached to multiple events on multiple sources</h3>
+
+<pre><code class="language-jsp">&lt;s:textarea id="area0" /&gt;
+&lt;s:textarea id="area1" /&gt;
+&lt;sx:bind sources="area0,area1" events="onfocus,onchange" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="update-target-element-with-content-returned-from-url">Update target element with content returned from url</h3>
+
+<pre><code class="language-jsp">&lt;s:div id="div" /&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind targets="div" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit targets="div" value="Make Request" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a targets="div" value="Make Request" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="update-multiple-target-elements-with-content-returned-from-url">Update multiple target elements with content returned from url</h3>
+
+<pre><code class="language-jsp">&lt;s:div id="div0" /&gt;
+&lt;s:div id="div1" /&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind targets="div0,div1" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit targets="div0,div1" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a targets="div0,div1" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="show-indicator-while-request-is-in-progress">Show indicator while request is in progress</h3>
+
+<pre><code class="language-jsp">&lt;img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" style="display:none" /&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind indicator="indicator" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit indicator="indicator" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a indicator="indicator" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="highlight-content-of-target-with-blue-color-for-2-seconds">Highlight content of target with blue color, for 2 seconds</h3>
+
+<pre><code class="language-jsp">&lt;s:div id="div" /&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind highlightColor="blue" highlightDuration="2000" targets="div" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit highlightColor="blue" highlightDuration="2000" targets="div" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a highlightColor="blue" highlightDuration="2000" targets="div" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="execute-javascript-in-the-returned-content">Execute JavaScript in the returned content</h3>
+
+<pre><code class="language-jsp">&lt;s:div id="div" /&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind executeScripts="true" targets="div" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit executeScripts="true" targets="div" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a executeScripts="true" targets="div" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="publish-a-topic-before-the-request">Publish a topic before the request</h3>
+
+<p>``html
+<script type="text/javascript">
+dojo.event.topic.subscribe("/before", function(event, widget){
+   alert('inside a topic event. before request');
+   //event: event object
+   //widget: widget that published the topic
+});
+</script></p>
+
+<!-- With a bind tag -->
+<s:submit value="Make Request" id="submit" />
+
+<sx:bind beforenotifytopics="/before" sources="submit" events="onclick" href="%{#url}" />
+
+<!-- With a submit tag -->
+<sx:submit beforenotifytopics="/before" href="%{#url}" />
+
+<!-- With an anchor tag -->
+<sx:a beforenotifytopics="/before" href="%{#url}" />
+
+<p>``</p>
+
+<h3 id="publish-a-topic-after-the-request">Publish a topic after the request</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+dojo.event.topic.subscribe("/after", function(data, request, widget){
+   alert('inside a topic event. after request');
+   //data : text returned from request
+   //request: XMLHttpRequest object
+   //widget: widget that published the topic
+});
+&lt;/script&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind afterNotifyTopics="/after" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit afterNotifyTopics="/after" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a afterNotifyTopics="/after" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="publish-a-topic-on-error">Publish a topic on error</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+dojo.event.topic.subscribe("/error", function(error, request, widget){
+   alert('inside a topic event. on error');
+   //error : error object (error.message has the error message)
+   //request: XMLHttpRequest object
+   //widget: widget that published the topic
+});
+&lt;/script&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind errorNotifyTopics="/error" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit errorNotifyTopics="/error" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a errorNotifyTopics="/error" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="show-a-fixed-error-message-on-error">Show a fixed error message on error</h3>
+
+<pre><code class="language-jsp">&lt;div id="div" /&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind errorText="Error Loading" targets="div" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit errorText="Error Loading" targets="div" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a errorText="Error Loading" targets="div" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="prevent-a-request">Prevent a request</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+dojo.event.topic.subscribe("/before", function(event, widget){
+   alert('I will stop this request');
+   event.cancel = true;
+});
+&lt;/script&gt;
+
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind beforeNotifyTopics="/before" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit beforeNotifyTopics="/before" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a beforeNotifyTopics="/before" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="submit-a-form-plain-form">Submit a form (plain form)</h3>
+
+<pre><code class="language-jsp">&lt;form id="form"&gt;
+  &lt;input type=textbox name="data"&gt;
+&lt;/form&gt;
+
+&lt;!-- With a bind tag --&gt;
+&lt;s:submit value="Make Request" id="submit" /&gt;
+&lt;sx:bind formId="form" sources="submit" events="onclick" href="%{#url}" /&gt;
+
+&lt;!-- With a submit tag --&gt;
+&lt;sx:submit formId="form" href="%{#url}" /&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;sx:a formId="form" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="submit-a-form-using-sform-tag">Submit a form (using s:form tag)</h3>
+
+<pre><code class="language-jsp">&lt;!-- With a submit tag --&gt;
+&lt;s:form namespace="/mynamespace" action="MyAction"&gt;
+  &lt;input type=textbox name="data"&gt;
+  &lt;sx:submit /&gt;
+&lt;/s:form&gt;
+
+&lt;!-- With an anchor tag --&gt;
+&lt;s:form namespace="/mynamespace" action="MyAction"&gt;
+  &lt;input type=textbox name="data"&gt;
+  &lt;sx:a /&gt;
+&lt;/s:form&gt;
+</code></pre>
+
+<h2 id="div">Div</h2>
+
+<h3 id="loads-its-content-after-page-is-loaded">Loads its content after page is loaded</h3>
+
+<pre><code class="language-jsp">&lt;sx:div href="%{#url}"&gt;
+  Initial Content
+&lt;/sx:div&gt;
+</code></pre>
+
+<h3 id="reloads-content-when-topic-is-published">Reloads content when topic is published</h3>
+
+<pre><code class="language-jsp">&lt;sx:div href="%{#url}" listenTopics="/refresh"&gt;
+  Initial Content
+&lt;/sx:div&gt;
+
+&lt;s:submit value="Refresh" onclick="dojo.event.topic.publish('/refresh')" /&gt;
+</code></pre>
+
+<h3 id="updates-its-content-every-2-seconds-shows-indicator-while-loading-content">Updates its content every 2 seconds, shows indicator while loading content</h3>
+
+<pre><code class="language-jsp">&lt;img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" style="display:none"/&gt;
+&lt;sx:div href="%{#url}" updateFreq="2000"&gt;
+  Initial Content
+&lt;/sx:div&gt;
+</code></pre>
+
+<h3 id="loads-its-content-after-a-delay-of-2-seconds">Loads its content after a delay of 2 seconds</h3>
+
+<pre><code class="language-jsp">&lt;sx:div href="%{#url}" delay="2000"&gt;
+  Initial Content
+&lt;/sx:div&gt;
+</code></pre>
+
+<h3 id="show-some-text-while-content-is-loaded">Show some text while content is loaded</h3>
+
+<pre><code class="language-jsp">&lt;sx:div href="%{#url}" loadingText="reloading" showLoadingText="true"&gt;
+  Initial Content
+&lt;/sx:div&gt;
+</code></pre>
+
+<h3 id="fixed-error-message">Fixed error message</h3>
+
+<pre><code class="language-jsp">&lt;sx:div href="noaction" errorText="Error loading content"&gt;
+  Initial Content
+&lt;/sx:div&gt;
+</code></pre>
+
+<h3 id="execute-javascript-in-the-returned-content-1">Execute JavaScript in the returned content</h3>
+
+<pre><code class="language-jsp">&lt;sx:div href="%{#url}" executeScripts="true"&gt;
+  Initial Content
+&lt;/sx:div&gt;
+</code></pre>
+
+<h3 id="control-refresh-timer-using-topics">Control refresh timer using topics</h3>
+
+<pre><code class="language-jsp">&lt;sx:div href="%{#url}"
+        listenTopics="/refresh"
+	startTimerListenTopics="/startTimer"
+	stopTimerListenTopics="/stopTimer"
+	updateFreq="3000"&gt;
+  Initial Content
+&lt;/sx:div&gt;
+
+&lt;s:submit value="Refresh" onclick="dojo.event.topic.publish('/refresh')" /&gt;
+&lt;s:submit value="Start refresh timer" onclick="dojo.event.topic.publish('/startTimer')" /&gt;
+&lt;s:submit value="Stop refresh timer" onclick="dojo.event.topic.publish('/stopTimer')" /&gt;
+</code></pre>
+
+<h2 id="date-and-time-picker">Date and Time picker</h2>
+
+<h3 id="date-picker">Date picker</h3>
+
+<pre><code class="language-jsp">&lt;sx:datetimepicker name="picker" /&gt;
+</code></pre>
+
+<h3 id="time-picker">Time picker</h3>
+
+<pre><code class="language-jsp">&lt;sx:datetimepicker type="time" name="picker" /&gt;
+</code></pre>
+
+<h3 id="set-value-from-an-string">Set value from an String</h3>
+
+<pre><code class="language-jsp">&lt;sx:datetimepicker value="%{'2007-01-01'}" name="picker" /&gt;
+</code></pre>
+
+<h3 id="set-value-from-stack-value-must-evaluate-to-either-a-date-calendar-or-an-string-that-can-be-parsed-using-the-formats-defined-in-simpledateformat-and-rfc-3339">Set value from stack (value must evaluate to either a Date, Calendar, or an String that can be parsed using the formats defined in SimpleDateFormat, and RFC 3339)</h3>
+
+<pre><code class="language-jsp">&lt;sx:datetimepicker value="date" name="picker" /&gt;
+</code></pre>
+
+<h3 id="setget-value-using-javascript">Set/Get value using JavaScript</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+  function setValue() {
+     var picker = dojo.widget.byId("picker");
+     
+     //string value
+     picker.setValue('2007-01-01');
+     
+     //Date value
+     picker.setValue(new Date());
+  }
+  
+  function showValue() {
+     var picker = dojo.widget.byId("picker");
+     
+     //string value
+     var stringValue = picker.getValue();
+     alert(stringValue);
+      
+     //date value
+     var dateValue = picker.getDate();
+     alert(dateValue);
+  }
+&lt;/script&gt;
+
+&lt;sx:datetimepicker id="picker" /&gt;
+</code></pre>
+
+<h3 id="style-the-textbox">Style the textbox</h3>
+
+<pre><code class="language-jsp">&lt;sx:datetimepicker id="picker" cssStye="background:red" cssClass="someclass"/&gt;
+</code></pre>
+
+<h3 id="publish-topic-when-value-changes">Publish topic when value changes</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+  dojo.event.topic.subscribe("/value", function(text, date, widget){
+      alert('value changed');
+      //textEntered: String entered in the textbox
+      //date: JavaScript Date object with the value selected
+      //widget: widget that published the topic 
+  });
+&lt;/script&gt; 
+
+&lt;sx:datetimepicker label="Order Date" valueNotifyTopics="/value"/&gt;
+</code></pre>
+
+<h3 id="use-other-locales">Use other locales</h3>
+
+<p>Locales must be specified in the sx:head tag.</p>
+
+<pre><code class="language-jsp">&lt;sx:head extraLocales="en-us,nl-nl,de-de" /&gt;
+
+&lt;sx:datetimepicker label="In German" name="dddp7" value="%{'2006-06-28'}" language="de-de" /&gt;
+&lt;sx:datetimepicker label="In Dutch"  name="dddp8" value="%{'2006-06-28'}" language="nl-nl" /&gt;
+</code></pre>
+
+<h2 id="tabbed-panel">Tabbed Panel</h2>
+
+<h3 id="local-tabs">Local Tabs</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel id="tabContainer"&gt;
+   &lt;sx:div label="Tab 1" &gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div label="Tab 2" &gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="local-and-remote-tabs">Local and remote tabs</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel id="tabContainer"&gt;
+   &lt;sx:div label="Local Tab 1" &gt;
+       Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div label="Remote Tab 2" href="%{#url}"&gt;
+       Remote Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="fixed-size-size-does-not-adjust-to-current-tab">Fixed size (size does not adjust to current tab)</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel cssStyle="width: 500px; height: 300px;" doLayout="true" id="tabContainer"&gt;
+   &lt;sx:div label="Tab 1" &gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div label="Tab 2" &gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="do-not-load-tab-2-when-page-loads-it-will-be-loaded-when-selected">Do not load tab 2 when page loads (it will be loaded when selected)</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel id="tabContainer"&gt;
+   &lt;sx:div label="Remote Tab 1" href="%{#url}"&gt;
+       Remote Tab 1
+   &lt;/sx:div&gt;  
+   &lt;sx:div label="Remote Tab 2" href="%{#url}" preload="false"&gt;
+       Remote Tab 1
+   &lt;/sx:div&gt;      
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="reload-tabs-content-when-selected">Reload tabs content when selected</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel id="tabContainer"&gt;
+   &lt;sx:div label="Remote Tab 1" href="%{#url}" refreshOnShow="true"&gt;
+       Remote Tab 1
+   &lt;/sx:div&gt;  
+   &lt;sx:div label="Remote Tab 2" href="%{#url}" refreshOnShow="true"&gt;
+       Remote Tab 2
+   &lt;/sx:div&gt;      
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="disabled-tabs">Disabled tabs</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel id="tabContainer"&gt;
+   &lt;sx:div label="Tab 1" &gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div label="Tab 2" disabled="true"&gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="enabledisable-tabs-using-javascript">Enable/Disable tabs using JavaScript</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+   function enableTab(param) {
+      var tabContainer = dojo.widget.byId('tabContainer');
+      tabContainer.enableTab(param);
+   }
+    
+   
+   function disableTab(param) {
+      var tabContainer = dojo.widget.byId('tabContainer');
+      tabContainer.disableTab(param);
+   }
+&lt;/script&gt;
+
+&lt;sx:tabbedpanel id="tabContainer" id="tabContainer"&gt;
+   &lt;sx:div id="tab1" label="Tab 1"&gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div id="tab2" label="Tab 2" disabled="true"&gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+
+&lt;!-- By Tab Index --&gt;
+&lt;input type="button" onclick="enableTab(1)" value="Enable Tab 2 using Index" /&gt;
+&lt;input type="button" onclick="disableTab(1)" value="Disable Tab 2 using Index" /&gt;
+    
+&lt;!-- By Tab Id --&gt;
+&lt;input type="button" onclick="enableTab('tab2')" value="Enable Tab 2 using Id" /&gt;
+&lt;input type="button" onclick="disableTab('tab2')" value="Disable Tab 2 using Id" /&gt;
+   
+&lt;!-- By Widget --&gt;
+&lt;input type="button" onclick="enableTab(dojo.widget.byId('tab2'))" value="Enable Tab 2 using widget" /&gt;
+&lt;input type="button" onclick="disableTab(dojo.widget.byId('tab2'))" value="Disable Tab 2 using widget" /&gt;
+</code></pre>
+
+<h3 id="set-tab-labels-position-to-bottom-can-be-top-right-bottom-left">Set Tab labels position to bottom (can be: top, right, bottom, left)</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel labelposition="bottom" id="tabContainer"&gt;
+   &lt;sx:div label="Tab 1" &gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div label="Tab 2" &gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="allow-tab-2-to-be-removedclosed">Allow tab 2 to be removed(closed)</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel id="tabContainer"&gt;
+   &lt;sx:div label="Tab 1" &gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div label="Tab 2"  closable="true"&gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="publish-topics-when-tab-is-selected">Publish topics when tab is selected</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+   dojo.event.topic.subscribe('/before', function(event, tab, tabContainer) {
+      alert("Before selecting tab");
+   });
+
+   dojo.event.topic.subscribe('/after', function(tab, tabContainer) {
+      alert("After tab was selected");
+   });
+&lt;/script&gt;
+&lt;sx:tabbedpanel beforeSelectTabNotifyTopics="/before" afterSelectTabNotifyTopics="/after" id="tabContainer"&gt;
+   &lt;sx:div label="Tab 1"&gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div label="Tab 2"&gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="select-tab-using-javascript">Select tab using JavaScript</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+   function selectTab(id) {
+     var tabContainer = dojo.widget.byId("tabContainer");
+     tabContainer.selectTab(id);
+   }
+&lt;/script&gt;
+&lt;sx:tabbedpanel id="tabContainer"&gt;
+   &lt;sx:div label="Tab 1" id="tab1"&gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div label="Tab 2" id="tab2"&gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+
+&lt;input type="button" onclick="selectTab('tab1')" value="Select tab 1" /&gt;
+&lt;input type="button" onclick="selectTab('tab2')" value="Select tab 2" /&gt;
+</code></pre>
+
+<h3 id="prevent-tab-2-from-being-selected">Prevent tab 2 from being selected</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+   dojo.event.topic.subscribe('/before', function(event, tab, tabContainer) {
+      event.cancel = tab.widgetId == "tab2" ;
+   });
+&lt;/script&gt;
+&lt;sx:tabbedpanel beforeSelectTabNotifyTopics="/before" id="tabContainer"&gt;
+   &lt;sx:div id="tab1" label="Tab 1"&gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div id="tab2" label="Tab 2"&gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h3 id="customize-template-css-path-dojo-widget-template-css">Customize template css path (Dojo widget template css)</h3>
+
+<pre><code class="language-jsp">&lt;sx:tabbedpanel templateCssPath="%{#cssUrl}" id="tabContainer"&gt;
+   &lt;sx:div id="tab1" label="Tab 1"&gt;
+       Local Tab 1
+   &lt;/sx:div&gt;   
+   &lt;sx:div id="tab2" label="Tab 2"&gt;
+       Local Tab 2
+   &lt;/sx:div&gt;   
+&lt;/sx:tabbedpanel&gt;
+</code></pre>
+
+<h2 id="autocompleter">Autocompleter</h2>
+
+<h3 id="fixed-list">Fixed list</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter list="{'apple','banana','grape','pear'}" /&gt;
+</code></pre>
+
+<h3 id="set-initial-value">Set initial value</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter list="{'apple','banana','grape','pear'}" value="apple"/&gt;
+</code></pre>
+
+<h3 id="force-valid-option-restore-option-when-focus-is-lost">Force valid option (restore option when focus is lost)</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter list="{'apple','banana','grape','pear'}" forceValidOption="true"/&gt;
+</code></pre>
+
+<h3 id="using-the-json-plugin-to-generate-the-values-one-of-the-possible-ways">Using the JSON plugin to generate the values (one of the possible ways)</h3>
+
+<p>The action</p>
+
+<p><strong>AutocompleterExample.java</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">AutocompleterExample</span> <span class="kd">extends</span> <span class="n">ActionSupport</span> <span class="o">{</span>
+
+   <span class="kd">public</span> <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">String</span><span class="o">&gt;</span> <span class="n">getOptions</span><span class="o">()</span> <span class="o">{</span>
+      <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">options</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HashMap</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span><span class="n">String</span><span class="o">&gt;();</span>
+      <span class="n">options</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"Florida"</span><span class="o">,</span> <span class="s">"FL"</span><span class="o">);</span>
+      <span class="n">options</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"Alabama"</span><span class="o">,</span> <span class="s">"AL"</span><span class="o">);</span>
+
+      <span class="k">return</span> <span class="n">options</span><span class="o">;</span>
+   <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>The mapping:</p>
+
+<p><strong>struts.xml</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;struts&gt;</span>
+...
+   <span class="nt">&lt;package</span> <span class="na">name=</span><span class="s">"autocompleter"</span> <span class="na">namespace=</span><span class="s">"/autocompleter"</span> <span class="na">extends=</span><span class="s">"json-default"</span><span class="nt">&gt;</span>
+       <span class="nt">&lt;action</span> <span class="na">name=</span><span class="s">"getStates"</span> <span class="na">class=</span><span class="s">"AutocompleterExample"</span><span class="nt">&gt;</span>
+           <span class="nt">&lt;result</span> <span class="na">type=</span><span class="s">"json"</span><span class="nt">&gt;</span>
+               <span class="nt">&lt;param</span> <span class="na">name=</span><span class="s">"root"</span><span class="nt">&gt;</span>options<span class="nt">&lt;/param&gt;&lt;/result&gt;</span>
+       <span class="nt">&lt;/action&gt;</span>
+   <span class="nt">&lt;/package&gt;</span>
+...
+<span class="nt">&lt;/struts&gt;</span>
+</code></pre>
+</div>
+
+<p>The JSP (fragment):</p>
+
+<pre><code class="language-jsp">&lt;s:url id="optionsUrl" namespace="/autocompleter" action="getStates" /&gt;
+
+&lt;sx:autocompleter href="%{#optionsUrl}" /&gt;
+</code></pre>
+
+<h3 id="example-action">Example action</h3>
+
+<p>When a form containing an autocompleter is submitted, two values will be submitted for each autocompleter, 
+one for the selected value, and one for its associated key.</p>
+
+<p>The action:</p>
+
+<p><strong>MyAction.java</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="n">MyAction</span> <span class="kd">extends</span> <span class="n">ActionSupport</span> <span class="o">{</span>
+    <span class="kd">private</span> <span class="n">String</span> <span class="n">optionsKey</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="n">String</span> <span class="n">options</span><span class="o">;</span>
+
+    <span class="o">...</span>    
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>The JSP:</p>
+
+<pre><code class="language-jsp">&lt;s:form id="form"&gt;
+  &lt;sx:autocompleter name="options" label="Options" /&gt;
+&lt;/s:form&gt;
+</code></pre>
+
+<h3 id="set-initial-key-and-value">Set initial key and value</h3>
+
+<pre><code class="language-jsp">&lt;s:url id="optionsUrl" namespace="/autocompleter" action="getStates" /&gt;
+
+&lt;sx:autocompleter href="%{#optionsUrl}" value="Florida" keyValue="FL"/&gt;
+</code></pre>
+
+<h3 id="change-default-key-name">Change default key name</h3>
+
+<p>The action:</p>
+
+<p><strong>MyAction.java</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="n">MyAction</span> <span class="kd">extends</span> <span class="n">ActionSupport</span> <span class="o">{</span>
+    <span class="kd">private</span> <span class="n">String</span> <span class="n">superKey</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="n">String</span> <span class="n">options</span><span class="o">;</span>
+
+    <span class="o">...</span>    
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>The JSP:</p>
+
+<pre><code class="language-jsp">&lt;s:form id="form"&gt;
+  &lt;sx:autocompleter keyName="superKey" name="options" label="Options" /&gt;
+&lt;/s:form&gt;
+</code></pre>
+
+<h3 id="json-accepted">JSON accepted</h3>
+
+<p>for this autocompleter:</p>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter name="state" /&gt;
+</code></pre>
+
+<p>The following JSON will be accepted:</p>
+
+<p><strong>Map(recommended as it is the easiest one to generate)</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="w">
+    </span><span class="nt">"Alabama"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"AL"</span><span class="p">,</span><span class="w">
+    </span><span class="nt">"Alaska"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"AK"</span><span class="w">
+</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Array of arrays</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">[</span><span class="w">
+    </span><span class="p">[</span><span class="s2">"Alabama"</span><span class="p">,</span><span class="w"> </span><span class="s2">"AL"</span><span class="p">],</span><span class="w">
+    </span><span class="p">[</span><span class="s2">"Alaska"</span><span class="p">,</span><span class="w"> </span><span class="s2">"AK"</span><span class="p">]</span><span class="w">
+</span><span class="p">]</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Array inside object, same name as field</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="w">
+    </span><span class="nt">"state"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
+        </span><span class="p">[</span><span class="s2">"Alabama"</span><span class="p">,</span><span class="s2">"AL"</span><span class="p">],</span><span class="w">
+        </span><span class="p">[</span><span class="s2">"Alaska"</span><span class="p">,</span><span class="s2">"AK"</span><span class="p">]</span><span class="w">
+    </span><span class="p">]</span><span class="w">
+</span><span class="p">}</span><span class="w">     
+</span></code></pre>
+</div>
+
+<p><strong>Map inside object, same name as field</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="w">
+    </span><span class="nt">"state"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+        </span><span class="nt">"Alabama"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"Alabama"</span><span class="p">,</span><span class="w">
+        </span><span class="nt">"Alaska"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"AK"</span><span class="w">
+    </span><span class="p">}</span><span class="w">
+</span><span class="p">}</span><span class="w">    
+</span></code></pre>
+</div>
+
+<p><strong>Array inside object, field in response starts with the name of the autocompleter(“state” in this example)</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="w">
+    </span><span class="nt">"states"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
+        </span><span class="p">[</span><span class="s2">"Alabama"</span><span class="p">,</span><span class="s2">"AL"</span><span class="p">],</span><span class="w">
+        </span><span class="p">[</span><span class="s2">"Alaska"</span><span class="p">,</span><span class="s2">"AK"</span><span class="p">]</span><span class="w">
+    </span><span class="p">]</span><span class="w">
+</span><span class="p">}</span><span class="w">     
+</span></code></pre>
+</div>
+
+<p><strong>No name match, use first array found, and hope for the best</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="w">
+    </span><span class="nt">"Australopithecus"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
+       </span><span class="p">[</span><span class="s2">"Alabama"</span><span class="p">,</span><span class="s2">"AL"</span><span class="p">],</span><span class="w">
+       </span><span class="p">[</span><span class="s2">"Alaska"</span><span class="p">,</span><span class="s2">"AK"</span><span class="p">]</span><span class="w">
+    </span><span class="p">]</span><span class="w">
+</span><span class="p">}</span><span class="w">     
+</span></code></pre>
+</div>
+
+<h3 id="load-characters-while-user-types-when-text-size--3">Load characters while user types (when text size &gt;= 3)</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter href="%{#url}" loadOnTextChange="true" loadMinimumCount="3" /&gt;
+</code></pre>
+
+<h3 id="hide-dropdown-arrow">Hide dropdown arrow</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter href="%{#url}" showDownArrow="false" /&gt;
+</code></pre>
+
+<h3 id="limit-options-shown-to-3">Limit options shown to 3</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter href="%{#url}" resultsLimit="3" /&gt;
+</code></pre>
+
+<h3 id="all-matching-options-are-shown">All matching options are shown</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter href="%{#url}" resultsLimit="-1" /&gt;
+</code></pre>
+
+<h3 id="set-dropdown-height-and-width-in-pixels">Set dropdown height and width, in pixels</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter href="%{#url}" dropdownHeight="180" dropdownWidth="200" /&gt;
+</code></pre>
+
+<h3 id="disable-it-when-page-is-loaded">Disable it when page is loaded</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter href="%{#url}" disabled="true" /&gt;
+</code></pre>
+
+<h3 id="disable-itenable-it-using-javascript">Disable it/enable it using JavaScript</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+  function enableit() {
+     var autoCompleter = dojo.widget.byId("auto");
+     autoCompleter.enable();
+  }
+
+  function disableit() {
+     var autoCompleter = dojo.widget.byId("auto");
+     autoCompleter.disable();
+  }
+&lt;/script&gt;
+
+&lt;sx:autocompleter id="auto" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="reload-options-when-topic-is-published">Reload options when topic is published</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter listenTopics="/reload" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="submit-form-when-options-are-loaded">Submit form when options are loaded</h3>
+
+<pre><code class="language-jsp">&lt;s:form id="form"&gt;
+  &lt;input type="textbox" name="data"&gt;
+&lt;/s:form&gt;
+
+&lt;sx:autocompleter formId="form" href="%{#url}"  /&gt;
+</code></pre>
+
+<h3 id="filter-fields-top-be-submitted-when-options-are-loaded-return-true-to-include">Filter fields top be submitted when options are loaded (return true to include)</h3>
+
+<pre><code class="language-jsp">&lt;script type="text/javascript"&gt;
+  function filter(input) {
+     return input.name == "data1";
+  }
+&lt;/script&gt;
+
+&lt;s:form id="form"&gt;
+  &lt;input type="textbox" name="data0"&gt;
+  &lt;input type="textbox" name="data1"&gt;
+&lt;/s:form&gt;
+
+&lt;sx:autocompleter formId="form" formFilter="filter" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="link-two-autocompleters-using-topics">Link two autocompleters, using topics</h3>
+
+<pre><code class="language-jsp">&lt;form id="selectForm"&gt;
+   &lt;sx:autocompleter  name="select" list="{'fruits','colors'}"  valueNotifyTopics="/changed" /&gt;
+&lt;/form&gt;
+
+&lt;sx:autocompleter  href="%{#url}" formId="selectForm" listenTopics="/changed" /&gt;
+</code></pre>
+
+<h3 id="show-options-but-dont-make-suggestion-autocomple-in-the-textbox">Show options, but don’t make suggestion (autocomple) in the textbox</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter autoComplete="false" href="%{#url}" /&gt;
+</code></pre>
+
+<h3 id="prevent-options-from-loading-when-page-loads">Prevent options from loading when page loads</h3>
+
+<pre><code class="language-jsp">&lt;sx:autocompleter preload="false" href="%{#url}" /&gt;
+</code></pre>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/ajax-tags.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/ajax-tags.html b/content/tag-developers/ajax-tags.html
new file mode 100644
index 0000000..ea95388
--- /dev/null
+++ b/content/tag-developers/ajax-tags.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/ajax-tags.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="ajax-tags">Ajax Tags</h1>
+
+<p><strong>Dojo plugin is deprecated and was removed since Struts 2.5</strong></p>
+
+<blockquote>
+  <p><strong>Please</strong> check that documentation and the Dojo tag examples in the showcase app of the appropriate Struts 2 version 
+before asking questions on the struts-user mailing list!</p>
+</blockquote>
+
+<h2 id="description">Description</h2>
+
+<p>To use the AJAX tags from 2.1 on you must:</p>
+
+<ul>
+  <li>Include the Dojo Plugin distributed with Struts 2 in your /WEB-INF/lib folder.</li>
+  <li>Add <code class="highlighter-rouge">&lt;%@ taglib prefix="sx" uri="/struts-dojo-tags" %&gt;</code> to your page.</li>
+  <li>Include the <a href="head-tag.html">head</a> tag on the page, which can be configured for performance or debugging purposes.</li>
+</ul>
+
+<h2 id="handling-ajax-responses">Handling AJAX Responses</h2>
+
+<p>The following attributes affect the handling of all ajax responses.</p>
+
+<p>|Attribute|Default Value|Description|
+|———|————-|———–|
+|parseContent|true|When true, Dojo will parse the response into an XHTML Document Object and traverse the nodes searching for Dojo Widget markup.  The parse and traversal is performed prior to inserting the nodes into the DOM. This attribute must be enabled to nest Dojo widgets (dojo tags) within responses. There’s significant processing involved to create and parse the document so switch this feature off when not required. Note also that the response must be valid XHTML for cross-browser support and widgets must have unique IDs.|
+|separateScripts|true|When true, Dojo will extract the <script> tags from the response, concatenate the extracted code into one block, create a new Function whose body is the extracted code and immediately invoke the function. The invocation is performed after the DOM has been updated with the XHTML. The function is executed within the scope of the widget (that is, the  **this** variable points to the widget instance).\
+\
+When false, Dojo will extract the <script> tags from the response, concatenate the extracted code into one block and:\
+\
+\*in IE:  invoke window.execScript() on the code\
+\
+\*in other browsers: create a <script> node containing the code and insert that node into the DOM\
+\
+This invocation occurs after the DOM has been updated with the XHTML. Note that scripts may not be executed if it is not valid to create a <script> node in the DOM at the destination.|
+|executeScripts|false|When true, Dojo will extract code from the <script> tags from the response and execute it based on the separateScripts value.\
+\
+When false, the XHTML response is inserted into the DOM and <script> nodes are ignored. |</script></script></script></script></script></script></p>
+
+<blockquote>
+  <p>It’s possible that the updated DOM will not include <script> nodes even though the inline code has been executed.</script></p>
+</blockquote>
+
+<p>Ensure the response is XHTML-compliant (including, for example, thead and tbody tags in tables).</p>
+
+<p>If you intend to run inline javascript:</p>
+
+<ul>
+  <li>Ensure the  javascript can be concatenated and executed in one block,</li>
+  <li>set executeScripts=true,</li>
+  <li>set separateScripts=true (the reliable option)</li>
+</ul>
+
+<h2 id="topics">Topics</h2>
+
+<p>Most of the AJAX tags use Dojo topics for event notification and communication between them, to learn about topics visit 
+<a href="http://dojotoolkit.org/book/dojo-book-0-4/part-5-connecting-pieces/event-system/topics">Dojo’s documentation</a></p>
+
+<h2 id="examples">Examples</h2>
+
+<p>Examples can be found on the documentation for each tag in the <a href="ui-tag-reference.html">UI Tag Reference</a> page, 
+for additional examples see <a href="ajax-and-javascript-recipes.html">Ajax and JavaScript Recipes</a> and the Showcase application 
+distributed with Struts 2.</p>
+
+<h2 id="tags">Tags</h2>
+
+<ul>
+  <li><a href="dojo-href-tag.html">a</a></li>
+  <li><a href="dojo-autocompleter-tag.html">autocompleter</a></li>
+  <li><a href="dojo-bind-tag.html">bind</a></li>
+  <li><a href="dojo-datetimepicker-tag.html">datetimepicker</a></li>
+  <li><a href="dojo-div-tag.html">div</a></li>
+  <li><a href="dojo-head-tag.html">head</a></li>
+  <li><a href="dojo-submit-tag.html">submit</a></li>
+  <li><a href="dojo-tabbedpanel-tag.html">tabbedpanel</a></li>
+  <li><a href="dojo-textarea-tag.html">textarea</a></li>
+  <li><a href="dojo-tree-tag.html">tree</a></li>
+  <li><a href="dojo-treenode-tag.html">treenode</a></li>
+</ul>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[03/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/push-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/push-tag.html b/content/tag-developers/push-tag.html
new file mode 100644
index 0000000..7f31885
--- /dev/null
+++ b/content/tag-developers/push-tag.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/push-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="push">push</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/push.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1|lang=xml|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1description|lang=none|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2|lang=xml|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2description|lang=none|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3|lang=xml|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3description|lang=none|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example4|lang=xml|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example4description|lang=none|javadoc=true|url=org.apache.struts2.components.Push</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/selecting-template-directory.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/selecting-template-directory.html b/content/tag-developers/selecting-template-directory.html
new file mode 100644
index 0000000..1961137
--- /dev/null
+++ b/content/tag-developers/selecting-template-directory.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/selecting-template-directory.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="selecting-template-directory">Selecting Template Directory</h1>
+
+<p>Template directory can be selected using several different rules, in this order:</p>
+
+<ol>
+  <li>The</li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>templateDir
+</code></pre>
+</div>
+<p>attribute on the specific tag</p>
+
+<ol>
+  <li>The page-scoped attribute named</li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>templateDir
+</code></pre>
+</div>
+
+<ol>
+  <li>The request-scoped attribute named</li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>templateDir
+</code></pre>
+</div>
+
+<ol>
+  <li>The session-scoped attribute named</li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>templateDir
+</code></pre>
+</div>
+
+<ol>
+  <li>The application-scoped attribute named</li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>templateDir
+</code></pre>
+</div>
+
+<ol>
+  <li>The</li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts.ui.templateDir
+</code></pre>
+</div>
+<p>property in <em>struts.properties</em>  (defaults to <em>template</em> )</p>
+
+<p><strong>Tips</strong></p>
+
+<ul>
+  <li>To change the template directory for the entire application, modify the <em>struts.properties</em> .</li>
+</ul>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/selecting-themes.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/selecting-themes.html b/content/tag-developers/selecting-themes.html
new file mode 100644
index 0000000..3bd1607
--- /dev/null
+++ b/content/tag-developers/selecting-themes.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/selecting-themes.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="selecting-themes">Selecting Themes</h1>
+
+<p>Themes can be selected using several different rules, in this order:</p>
+
+<ol>
+  <li>The</li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>theme
+</code></pre>
+</div>
+<p>attribute on the specific tag</p>
+
+<ol>
+  <li>The</li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>theme
+</code></pre>
+</div>
+<p>attribute on a tag’s surrounding <a href="#PAGE_14201">form</a> tag</p>
+
+<ol>
+  <li>
+    <p>The page-scoped attribute named “theme”</p>
+  </li>
+  <li>
+    <p>The request-scoped attribute named “theme”</p>
+  </li>
+  <li>
+    <p>The session-scoped attribute named “theme”</p>
+  </li>
+  <li>
+    <p>The application-scoped attribute named “theme”</p>
+  </li>
+  <li>
+    <p>The</p>
+  </li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts.ui.theme
+</code></pre>
+</div>
+<p>property in <em>struts.properties</em>  (defaults to <em>xhtml</em> )</p>
+
+<p>See “<em>Can I change theme on a per-page basis</em> “ page for using scoped “theme” attribute.</p>
+
+<p><strong>Tips</strong></p>
+
+<ul>
+  <li>
+    <p>To override an entire form’s theme, change the “theme” attribute of the form. (Convenient for using the <a href="#PAGE_14205">ajax theme</a> for specific forms, for example.)</p>
+  </li>
+  <li>
+    <p>To support user-selected themes, set the theme in the user’s session.</p>
+  </li>
+  <li>
+    <p>To change the theme for the entire application, modify the <em>struts.properties</em> .</p>
+  </li>
+</ul>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/set-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/set-tag.html b/content/tag-developers/set-tag.html
new file mode 100644
index 0000000..9543d37
--- /dev/null
+++ b/content/tag-developers/set-tag.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/set-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="set">set</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Set</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/set.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.Set</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/simple-theme.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/simple-theme.html b/content/tag-developers/simple-theme.html
new file mode 100644
index 0000000..16c93ec
--- /dev/null
+++ b/content/tag-developers/simple-theme.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/simple-theme.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="simple-theme">simple theme</h1>
+
+<p>The simple theme renders “bare bones” HTML elements. The simple theme is most often used as a starting point for other themes. (See <a href="#PAGE_13962">Extending Themes</a> for more.)</p>
+
+<p>For example, the <a href="#PAGE_13912">textfield</a> tag renders the HTML</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;input/&gt;
+</code></pre>
+</div>
+<p>tag without a label, validation, error reporting, or any other formatting or functionality.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>Both the <a href="#PAGE_13834">xhtml theme</a> and <a href="#PAGE_14215">css_xhtml theme</a> extend the simple theme. Look to them for examples of how to build on the foundation laid by the simple theme.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Head Tag</strong></p>
+
+<p>The simple theme <a href="#PAGE_13997">head</a> template prints out a javascript include required for the <a href="#PAGE_14274">datetimepicker</a> tag to render properly.</p>
+
+<p><strong>simple head template</strong></p>
+
+<p>The <a href="#PAGE_14291">simple theme</a><a href="#PAGE_13997">head</a> template only does one thing: it loads the minimal Ajax/Dojo support so that tags can import Dojo widgets easily.</p>
+
+<p>The source of the simple head.ftl template is:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/simple/head.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/sort-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/sort-tag.html b/content/tag-developers/sort-tag.html
new file mode 100644
index 0000000..5b99507
--- /dev/null
+++ b/content/tag-developers/sort-tag.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/sort-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="sort">sort</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SortIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|url=struts2-tags/sort.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SortIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/struts-tags.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/struts-tags.html b/content/tag-developers/struts-tags.html
new file mode 100644
index 0000000..f2d76d5
--- /dev/null
+++ b/content/tag-developers/struts-tags.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/struts-tags.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="struts-tags">Struts Tags</h1>
+
+<p>The framework provides a tag library decoupled from the view technology. In this section, we describe each tag in general 
+terms, such as the attributes it supports, what the behaviors are, and so forth. Most tags are supported in all template 
+languages (see <a href="jsp-tags.html">JSP Tags</a>, <a href="velocity-tags.html">Velocity Tags</a>, and <a href="freemarker-tags.html">FreeMarker Tags</a>), 
+but some are currently only specific to one language. Whenever a tag doesn’t have complete support for every language, 
+it is noted on the tag’s reference page.</p>
+
+<p>The types of tags can be broken in to two types: generic and UI. Besides function and responsibility, the biggest 
+difference between the two is that the HTML tags support <em>templates</em>  and <em>themes</em> . In addition to the general tag 
+reference, we also provide examples for using these generic tags in each of the support languages.</p>
+
+<blockquote>
+  <p>Be sure to read the <a href="tag-syntax.html">Tag Syntax</a> document to learn how tag attribute syntax works.</p>
+</blockquote>
+
+<h2 id="faqs">FAQs</h2>
+
+<ul>
+  <li>
+    <p><em>Why do the form tags put table tags around controls</em> ?</p>
+  </li>
+  <li>
+    <p><em>How can I put a String literal in a Javascript call, for instance in an onChange attribute</em> ?</p>
+  </li>
+  <li>
+    <p><em>Why won’t the ‘if’ tag evaluate a one char string</em> ?</p>
+  </li>
+  <li>
+    <p><em>Why does FreeMarker complain that there’s an error in my user-directive when I used JSP Tag</em> ?</p>
+  </li>
+  <li>
+    <p><em>Can an action tag run another method apart from the default execute method</em> ?</p>
+  </li>
+  <li>
+    <p><em>Why didn’t my action tag get executed when I have validation errors</em> ?</p>
+  </li>
+  <li>
+    <p><em>Why are request parameters appended to our hyperlinks</em> ?</p>
+  </li>
+</ul>
+
+<h2 id="resources">Resources</h2>
+
+<ul>
+  <li><a href="http://www.vitarara.org/cms/struts_2_cookbook/creating_a_ui_component">Creating a UI Component in Struts 2</a> (Mark Menard)</li>
+  <li><a href="http://www.roseindia.net/struts/struts2/struts-2-tags.shtml">Struts 2 Tags</a> (Rose India)</li>
+</ul>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/subset-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/subset-tag.html b/content/tag-developers/subset-tag.html
new file mode 100644
index 0000000..9c7ae2f
--- /dev/null
+++ b/content/tag-developers/subset-tag.html
@@ -0,0 +1,223 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/subset-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="subset">subset</h1>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SubsetIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/subset.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=action|lang=java|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SubsetIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1|lang=xml|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SubsetIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2|lang=xml|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SubsetIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3|lang=xml|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SubsetIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example4|lang=xml|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SubsetIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example5|lang=xml|javadoc=true|url=org.apache.struts2.views.jsp.iterator.SubsetIteratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[06/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/index.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/index.html b/content/tag-developers/index.html
index 7a8d8e1..ee6e4bc 100644
--- a/content/tag-developers/index.html
+++ b/content/tag-developers/index.html
@@ -126,105 +126,108 @@
 <article class="container">
   <section class="col-md-12">
     <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/index.md" title="Edit this page on GitHub">Edit on GitHub</a>
-    <p>#Tag Developers Guide# {#PAGE_14324}</p>
+    <h1 id="tag-developers-guide">Tag Developers Guide</h1>
 
 <p>The framework offers a flexible view layer that supports multiple view technologies, including JSP, FreeMaker, and Velocity.</p>
 
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
+<ul>
+  <li><a href="struts-tags.html">Struts Tags</a>
+    <ul>
+      <li><a href="generic-tags.html">Generic Tags</a></li>
+      <li><a href="ui-tags.html">UI Tags</a></li>
+      <li><a href="themes-and-templates.html">Themes and Templates</a></li>
+      <li><a href="tag-reference.html">Tag Reference</a></li>
+      <li><a href="ajax-tags.html">Ajax Tags</a>
+        <ul>
+          <li><a href="ajax-and-javascript-recipes.html">Ajax and JavaScript Recipes</a></li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+  <li><a href="ognl.html">OGNL</a>
+    <ul>
+      <li><a href="ognl-basics.html">OGNL Basics</a></li>
+      <li><a href="ognl-expression-compilation.html">OGNL Expression compilatio</a></li>
+    </ul>
+  </li>
+  <li><a href="tag-syntax.html">Tag Syntax</a></li>
+  <li><em>Alt Syntax</em></li>
+  <li><a href="jsp.html">JSP</a>
+    <ul>
+      <li><a href="jsp-tags.html">specific tags</a></li>
+    </ul>
+  </li>
+  <li><a href="freemarker.html">FreeMarker</a>
+    <ul>
+      <li><a href="freemarker-tags.html">specific tags</a></li>
+    </ul>
+  </li>
+  <li><a href="velocity.html">Velocity</a>
+    <ul>
+      <li><a href="velocity-tags.html">specific tags</a></li>
+    </ul>
+  </li>
+</ul>
 
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
+<h2 id="wip">WIP</h2>
 
-<p>| |\
-\
-+ <a href="#PAGE_14248">Struts Tags</a>\
-\
-  + <a href="#PAGE_19745">Generic Tags</a>\
-\
-  + <a href="#PAGE_19736">UI Tags</a>\
-\
-  + <a href="#PAGE_14247">Themes and Templates</a>\
-\
-  + <a href="#PAGE_19705">Tag Reference</a>\
-\
-  + <a href="#PAGE_31510">Ajax Tags</a>\
-\
-    + <a href="#PAGE_56182">Ajax and JavaScript Recipes</a>\
-\
-+ <a href="#PAGE_14198">OGNL</a>\
-\
-+ <a href="#PAGE_13927">Tag Syntax</a>\
-\
-+ <em>Alt Syntax</em> \
-|\
-\
-+ <a href="#PAGE_14141">JSP</a>\
-\
-  + <a href="#PAGE_13973">specific tags</a>\
-\
-+ <a href="#PAGE_14078">FreeMarker</a>\
-\
-  + <a href="#PAGE_14294">specific tags</a>\
-\
-+ <a href="#PAGE_13894">Velocity</a>\
-\
-  + <a href="#PAGE_13950">specific tags</a>\
-|
-|————————————————————————————————————————————————————————————————————————————————————————————————————————————————-|————————————————————————————————————————————————————————————————–|</p>
+<p>#####actionerror##### {#PAGE_14130}</p>
 
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
+<p><strong>Description</strong></p>
 
-<p>###Next:###</p>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.ActionError</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<p>##FreeMarker## {#PAGE_14078}</p>
+<p><strong>Parameters</strong></p>
 
-<p>FreeMarker is a Java-based template engine that is a great alternative to <a href="#PAGE_14141">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 class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/actionerror.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<p>For more information on FreeMarker itself, please visit the <a href="http://freemarker\.sourceforge\.net/">FreeMarker website</a>^[http://freemarker.sourceforge.net/].</p>
+<p><strong>Examples</strong></p>
 
-<table>
-  <tbody>
-    <tr>
-      <td>The framework utilizes FreeMarker because the engine includes strong error reporting, built-in internationalization and powerful macro libraries.</td>
-    </tr>
-  </tbody>
-</table>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.ActionError</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
+<p>#####actionmessage##### {#PAGE_14023}</p>
 
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
+<p><strong>Description</strong></p>
 
-<table>
-  <tbody>
-    <tr>
-      <td>Support is also included for <a href="#PAGE_13894">Velocity</a> templates. For a comparison of Velocity vs FreeMarker see <a href="http://freemarker\.org/fmVsVel\.html">here</a>^[http://freemarker.org/fmVsVel.html].</td>
-    </tr>
-  </tbody>
-</table>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.ActionMessage</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/actionmessage.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.ActionMessage</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>#####ajax common header##### {#PAGE_66934}</p>
+
+<p>To use this tag:</p>
+
+<ul>
+  <li>
+    <p>Add: <em>&lt;%@ taglib prefix=”sx” uri=”/struts-dojo-tags” %&gt;</em>  to your page.</p>
+  </li>
+  <li>
+    <p>The <a href="#PAGE_66757">head</a> tag must be included on the page, which can be configured for performance or debugging purposes.</p>
+  </li>
+  <li>
+    <p>If the parseContent parameter for the <a href="#PAGE_66757">head</a> tag is false (it is false by default), then the <strong>id</strong> tag is required.</p>
+  </li>
+</ul>
+
+<p>For more examples see <a href="#PAGE_56182">Ajax and JavaScript Recipes</a></p>
 
 <table>
   <tbody>
@@ -233,188 +236,195 @@
   </tbody>
 </table>
 
-<p>####Getting Started####</p>
+<p>#####autocompleter##### {#PAGE_46753}</p>
 
-<p>Getting started with FreeMarker is as simple as ensuring all the dependencies are included in your project’s classpath. Typically, the only dependency is</p>
+<p><strong>Description</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>freemarker.jar
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>. Other than that, <em>struts-default.xml</em>  already configures the <em>FreeMarker Result</em>  needed to process your application’s templates.</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;action name="test" class="com.acme.TestAction"&gt;
-    &lt;result name="success" type="freemarker"&gt;test-success.ftl&lt;/result&gt;
-&lt;/action&gt;
+<p><strong>Parameters</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/ajax/autocompleter.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>Then in</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>test-success.ftl
-</code></pre>
-</div>
-<p>:</p>
+<p><strong>Examples</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;html&gt;</span>
-<span class="nt">&lt;head&gt;</span>
-    <span class="nt">&lt;title&gt;</span>Hello<span class="nt">&lt;/title&gt;</span>
-<span class="nt">&lt;/head&gt;</span>
-<span class="nt">&lt;body&gt;</span>
+<p>Get list from an action:</p>
 
-Hello, ${name}
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<span class="nt">&lt;/body&gt;</span>
-<span class="nt">&lt;/html&gt;</span>
+<p>Uses a list:</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>Where</p>
+<p>Autocompleter that reloads its content everytime the text changes (and the length of the text is greater than 3):</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>name
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>is a property on your action. That’s it! Read the rest of this document for details on how templates are loaded, variables are resolved, and tags can be used.</p>
 
-<p>####Servlet / JSP Scoped Objects####</p>
-
-<p>The following are ways to obtained Application scope attributes, Session scope attributes, Request scope attributes, Request parameters, and framework Context scope parameters:-</p>
+<p>Linking two autocompleters:</p>
 
-<p>#####Application Scope Attribute#####</p>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example4|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<p>Assuming there’s an attribute with name</p>
+<p>Set/Get selected values using JavaScript:</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>myApplicationAttribute
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example5|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>in the Application scope.</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;#if Application.myApplicationAttribute?exists&gt;
-     ${Application.myApplicationAttribute}
-&lt;/#if&gt;
+<p>Using beforeNotifyTopics:</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example6|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>or</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;@s.property value="%{#application.myApplicationAttribute}" /&gt;
+<p>Using errorNotifyTopics:</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example7|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>#####Session Scope Attribute#####</p>
-
-<p>Assuming there’s an attribute with name</p>
+<p>Using errorNotifyTopics:</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>mySessionAttribute
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example8|lang=html|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>in the Session scope.</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;#if Session.mySessionAttribute?exists&gt;
-     ${Session.mySessionAttribute}
-&lt;/#if&gt;
+<p>Using valueNotifyTopics:</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example9|lang=html|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>or</p>
+<p><strong>Caveats</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;@s.property value="%{#session.mySessionAttribute}" /&gt;
+<ul>
+  <li>The service that is producing the HTTP Response with JSON response to the Autocompleter tag must set the HTTP Header Response Content-Type to</li>
+</ul>
 
+<div class="highlighter-rouge"><pre class="highlight"><code>text/json
 </code></pre>
 </div>
+<p>. JSON has its own MIME type, which this tag expects.</p>
 
-<p>#####Request Scope Attribute#####</p>
+<ul>
+  <li>Since 2.0.9, there is a change in the value:key order. Now, the value <strong>must</strong> come before the key.</li>
+</ul>
 
-<p>Assuming there’s an attribute with name ‘myRequestAttribute’ in the Request scope.</p>
+<p>#####bind##### {#PAGE_66798}</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;#if Request.myRequestAttribute?exists&gt;
-      ${Request.myRequestAttribute}
-&lt;/#if&gt;
+<p><strong>Description</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>or</p>
+<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="highlighter-rouge"><pre class="highlight"><code>&lt;@s.property value="%{#request.myRequestAttribute}" /&gt;
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;img id="loadingImage" src="images/loadingAnimation.gif" style="display:none"/&gt;
+&lt;s:div id="parentDiv"&gt;
+    &lt;s:form action="actionName"&gt;
+        &lt;s:submit id="btn" /&gt;
+        &lt;sx:bind sources="btn" events="onclick" targets="parentDiv" showLoadingText="false" indicator="loadingImage"/&gt;
+    &lt;/s:form&gt;
+&lt;/s:div&gt;
 
 </code></pre>
 </div>
 
-<p>#####Request Parameter#####</p>
-
-<p>Assuming there’s a request parameter myParameter (eg. <a href="http://host/myApp/myAction\.action?myParameter=one">http://host/myApp/myAction.action?myParameter=one</a>).</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;#if Parameters.myParameter?exists&gt;
-     ${Parameters.myParameter}
-&lt;/#if&gt;
+<p><strong>Parameters</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/ajax/bind.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>or</p>
+<p><strong>Examples</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;@s.property value="%{#parameters.myParameter}" /&gt;
+<p>Without attaching to an event, listening to a topic (used to make an Ajax call):</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example0|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>#####Context parameter#####</p>
+<p>Attached to event ‘onclick’ on submit button:</p>
 
-<p>Assuming there’s a parameter with the name myContextParam in framework context.</p>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>${stack.findValue('#myContextParam')}
+<p>Submit form:</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>or</p>
+<p>Using beforeNotifyTopics:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example4|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;@s.property value="%{#myContextParam}" /&gt;
+<p>Using afterNotifyTopics and highlight:</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example5|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>####Template Loading####</p>
+<p>Using errorNotifyTopics and indicator:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example6|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<p>The framework looks for FreeMarker templates in two locations (in this order):</p>
+<p>#####checkbox##### {#PAGE_14029}</p>
 
-<ol>
-  <li>
-    <p>Web application</p>
-  </li>
-  <li>
-    <p>Class path</p>
-  </li>
-</ol>
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
 
-<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 href="#PAGE_14230">Form Tags</a> included with the framework.</p>
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
 
-<p>In addition, you can specify a location (directory on your file system) through the</p>
+<p><strong>Description</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>templatePath
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Checkbox</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>or</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>TemplatePath
-</code></pre>
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/checkbox.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>context variable (in the</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>web.xml
-</code></pre>
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.Checkbox</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>). If a variable is specified, the content of the directory it points to will be searched first.</p>
+
+<p>#####checkboxlist##### {#PAGE_13969}</p>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
 
 <table>
   <tbody>
     <tr>
-      <td>This variable is currently NOT relative to the root of your application.</td>
     </tr>
   </tbody>
 </table>
@@ -422,6620 +432,311 @@ Hello, ${name}
 <table>
   <tbody>
     <tr>
+      <td>{snippet:id=javadoc</td>
+      <td>javadoc=true</td>
+      <td>url=org.apache.struts2.components.ListUIBean}</td>
     </tr>
   </tbody>
 </table>
 
-<p>####Variable Resolution####</p>
-
-<p>When using FreeMarker with the framework, variables are looked up in several different places, in this order:</p>
-
-<ol>
-  <li>
-    <p>Built-in variables</p>
-  </li>
-  <li>
-    <p>Value stack</p>
-  </li>
-  <li>
-    <p>Action context</p>
-  </li>
-  <li>
-    <p>Request scope</p>
-  </li>
-  <li>
-    <p>Session scope</p>
-  </li>
-  <li>
-    <p>Application scope</p>
-  </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</p>
+<p><strong>Description</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>s:property
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.CheckboxList</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>tag. This is a nice convenience, though be careful because there is a small chance it could trip you up.</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;@s.url id="url" value="http://www.yahoo.com"/&gt;
-Click &lt;a xhref="${url}"&gt;here&lt;/a&gt;!
+<p><strong>Parameters</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/checkboxlist.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.CheckboxList</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>The built-in variables that Struts-FreeMarker integration provides are:</p>
+<p>#####combobox##### {#PAGE_14259}</p>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
 
 <table>
-  <thead>
-    <tr>
-      <th>Name</th>
-      <th>Description</th>
-    </tr>
-  </thead>
   <tbody>
     <tr>
-      <td>stack</td>
-      <td>The value stack itself, useful for calls like ${stack.findString(‘ognl expr’)}</td>
-    </tr>
-    <tr>
-      <td>action</td>
-      <td>The action most recently executed</td>
-    </tr>
-    <tr>
-      <td>response</td>
-      <td>The HttpServletResponse</td>
-    </tr>
-    <tr>
-      <td>res</td>
-      <td>Same as response</td>
-    </tr>
-    <tr>
-      <td>request</td>
-      <td>The HttpServletRequest</td>
-    </tr>
-    <tr>
-      <td>req</td>
-      <td>Same as request</td>
-    </tr>
-    <tr>
-      <td>session</td>
-      <td>The HttpSession</td>
-    </tr>
-    <tr>
-      <td>application</td>
-      <td>The ServletContext</td>
-    </tr>
-    <tr>
-      <td>base</td>
-      <td>The request’s context path</td>
     </tr>
   </tbody>
 </table>
 
-<p>####Tag Support####</p>
+<p><strong>Description</strong></p>
 
-<p>FreeMarker includes complete tag support. See the <a href="#PAGE_14294">FreeMarker Tags</a> documentation for information on how to use the generic <a href="#PAGE_14248">Struts Tags</a> provided by Struts. In addition to this, you can use any JSP tag, like so:</p>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.ComboBox</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;#assign mytag=JspTaglibs["/WEB-INF/mytag.tld"]&gt;
-&lt;@mytag.tagx attribute1="some ${value}"/&gt;
+<p><strong>Parameters</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/combobox.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>Where <strong>mytag.tld</strong> is the JSP Tag Library Definition file for your tag library. Note: in order to use this support in FreeMarker, you must enable the</p>
+<p><strong>Examples</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>JSPSupportServlet
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.ComboBox</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>in</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>web.xml
-</code></pre>
-</div>
-<p>:</p>
+<p>#####component##### {#PAGE_14033}</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&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;
+<p><strong>Description</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.GenericUIBean</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>####Tips and Tricks####</p>
+<table>
+  <tbody>
+    <tr>
+      <td>{snippet:id=note</td>
+      <td>javadoc=true</td>
+      <td>url=org.apache.struts2.components.GenericUIBean}</td>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>(!) templateDir and theme attribute</strong></p>
 
-<p>There are some advanced features that may be useful when building Struts applications with FreeMarker.</p>
+<blockquote>
 
-<p>#####Type Conversion and Locales#####</p>
+</blockquote>
 
-<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 <em>struts.properties</em>  but can be over-ridden using the <em>I18n Interceptor</em> . 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 <em>Type Conversion</em>  support.</p>
+<blockquote>
 
-<p>If you want the framework to handle the formatting according to the <em>Type Conversion</em>  you have specified, you shouldn’t use the normal ${...} syntax. Instead, you should use the <a href="#PAGE_13960">property</a> tag. The difference is that the property tag is specifically designed to take an <a href="#PAGE_14198">OGNL</a> expression, evaluate it, and then convert it to a String using any <em>Type Conversion</em>  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>
+</blockquote>
 
-<p>(!)  The difference in how type conversion is handled under Freemarker is subtle but important to understand.</p>
+<blockquote>
+  <p>The final path to the template will be built using the <em>templateDir</em>  and <em>template</em>  attributes, like ${templateDir}/${theme}/${template}. If for example your component is under /components/html/option.jsp, you would have to set templateDir=”components”, theme=”html” and template=”options.jsp”.</p>
+</blockquote>
 
-<p>#####Extending#####</p>
+<blockquote>
 
-<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>
+</blockquote>
 
-<p>To extend the Freemarker support, develop a class that extends</p>
+<blockquote>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>org.apache.struts2.views.freemarker.FreemarkerManager
-</code></pre>
-</div>
-<p>, overriding methods as needed, and plugin the class through the <em>struts.properties</em> :</p>
+</blockquote>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>struts.freemarker.manager.classname = com.yourcompany.YourFreeMarkerManager
+<blockquote>
+  <p>For any Struts tag that you use in your component, make sure that you set its templateDir=”template”</p>
+</blockquote>
 
-</code></pre>
-</div>
+<blockquote>
 
-<p>#####ObjectWrapper Settings#####</p>
+</blockquote>
 
-<p>Once you get familiar with FreeMarker, you will find certain <em>subtleties</em> with it that may become frustrating. The most common thing you’ll likely run in to is the BeansWrapper provided by FreeMarker. If you don’t know what this is, don’t worry. However, if you do, know this:</p>
+<p><strong>Parameters</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.views.freemarker.StrutsBeanWrapper</span><span class="p">}</span><span class="w">
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/component.html</span><span class="p">}</span><span class="w">
 </span></code></pre>
 </div>
 
-<p>#####Syntax Notes#####</p>
-
-<p>As of FreeMarker 2.3.4, an alternative syntax is supported. This alternative syntax is great if you find that your IDE (especially IntelliJ IDEA) makes it difficult to work with the default syntax. You can read more about this syntax <a href="http://freemarker\.sourceforge\.net/docs/dgui\_misc\_alternativesyntax\.html">here</a>^[http://freemarker.sourceforge.net/docs/dgui_misc_alternativesyntax.html].</p>
+<p><strong>Examples</strong></p>
 
-<p>#####Cache#####</p>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.GenericUIBean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<p>You can enable FreeMarker cache mechanism by specifying below options in struts.xml:</p>
+<p>#####datetextfield##### {#PAGE_40506485}</p>
 
-<ul>
-  <li></li>
-</ul>
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;constant name="struts.freemarker.mru.max.strong.size" value="250" /&gt;
-</code></pre>
-</div>
-<p>- this option will be used by <a href="http://freemarker\.org/docs/api/freemarker/cache/MruCacheStorage\.html">freemarker.cache.MruCacheStorage</a>^[http://freemarker.org/docs/api/freemarker/cache/MruCacheStorage.html]</p>
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
 
-<ul>
-  <li></li>
-</ul>
+<p><strong>Description</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;constant name="struts.freemarker.templatesCache.updateDelay" value="1800" /&gt;
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.DateTextField</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>- default update cache interval (5 seconds)</p>
 
-<ul>
-  <li></li>
-</ul>
+<p><strong>Parameters</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;constant name="struts.freemarker.templatesCache" value="true" /&gt;
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/datetextfield.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>- *<strong>DEPRECATED</strong>* this option will use a internal ConcurrentHashMap in FreemarkerTemplateEngine but not freemarker native cache</p>
-
-<p>Setting</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>devMode
-</code></pre>
-</div>
-<p>to true will disable cache and updateDelay immediately, but you can explicit specify these constants to enable cache even in</p>
+<p><strong>Examples</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>devMode
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.DateTextField</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>, see <em>devMode</em></p>
 
-<p>#####Incompatible Improvements#####</p>
-
-<p>By default Struts is using FreeMarker in way to be backward compatible as much as possible but if you need to enable new features you can do it via </p>
+<p>#####datetimepicker##### {#PAGE_14274}</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>freemarker.properties
-</code></pre>
-</div>
-<p>by defining <a href="http://freemarker\.org/docs/pgui\_config\_incompatible\_improvements\.html\#pgui\_config\_incompatible\_improvements\_how\_to\_set">incompatible improvements</a>^[http://freemarker.org/docs/pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set] settings, ie.:</p>
+<p><strong>Description</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>incompatible_improvements=2.3.22
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>You can also pass this setting via </p>
+<p><strong>Parameters</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>ServletContext
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/ajax/datetimepicker.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p> </p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;init-param/&gt; (since Struts 2.5.13):
-</code></pre>
-</div>
+<p><strong>Examples</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;init-param&gt;
-    &lt;param-name&gt;freemarker.incompatible_improvements&lt;/param-name&gt;
-    &lt;param-value&gt;2.3.22&lt;/param-value&gt;
-&lt;/init-param&gt;
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>This can impact your freemarker powered pages and Struts tags as well, so please careful test this change.</p>
-
-<p>####Next:####</p>
-
-<p>##FreeMarker Tags## {#PAGE_14294}</p>
-
-<p>FreeMarker tags are extensions of the generic <a href="#PAGE_14248">Struts Tags</a> provided by the framework. You can jump right in just by knowing the generic structure in which the tags can be accessed:</p>
+<p>Getting and getting the datetimepicker value, from JavaScript:</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;@s.tag&gt; ...&lt;/@s.tag&gt;
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>, where <em>tag</em>  is any of the <a href="#PAGE_14248">tags</a> supported by the framework.</p>
-
-<p>For example, in JSP you might create a form using Struts tags.</p>
 
-<p><strong>JSP Form</strong></p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;s:form action="updatePerson"&gt;
-    &lt;s:textfield label="First name" name="firstName"/&gt;
-    &lt;s:submit value="Update"/&gt;
-&lt;/s:form&gt;
+<p>Publish topic when value changes</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>In FreeMarker the same form can also be built using Struts tags.</p>
-
-<p><strong>FTL Form</strong></p>
+<p>#####div##### {#PAGE_13908}</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;@s.form action="updatePerson"&gt;
-    &lt;@s.textfield label="First name" name="firstName"/&gt;
-    &lt;@s.submit value="Update"/&gt;
-&lt;/@s.form&gt;
+<p><strong>Description</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Div</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p><em>But, wait there’s more!</em></p>
-
-<p>Aside from doing everything that the JSP tags do, the FTL tags boast additional features that you can use to make your pages even easier to code. You can even invoke third-party JSP taglibs as if there were native FTL tags.</p>
+<table>
+  <tbody>
+    <tr>
+      <td>While this tag can be used with the <a href="#PAGE_14291">simple theme</a>, <a href="#PAGE_13834">xhtml theme</a>, and others, it is really designed to work best with the <a href="#PAGE_14205">ajax theme</a>. We recommend reading the <em>ajax div template</em>  documentation for more details.</td>
+    </tr>
+  </tbody>
+</table>
 
-<p>####Attributes and Parameters####</p>
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
 
-<p>Unlike older versions of JSP (in which the <a href="#PAGE_13973">JSP Tags</a> are based), FreeMarker allows for <em>dynamic attributes</em> , much like JSP 2.0. You can supply attributes to the tags that the tag doesn’t explicitedly support. Those attributes that cannot be applied directly to the tag object will be set to the tag’s general-purpose</p>
+<p><strong>Parameters</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>parameters
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/div.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>Map.</p>
 
-<p>Suppose we wanted to build an URL in a JSP. The URL needs to take an arbitary parameter to the query string, that (being arbitary) isn’t specified on the URL tag. In a JSP, we’d have to use the</p>
+<p>#####dojo div##### {#PAGE_66929}</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>url
-</code></pre>
-</div>
-<p>and</p>
+<p><strong>Description</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>param
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>tags together.</p>
 
-<p><strong>Creating a URL with a query string (JSP)</strong></p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;s:url value="somePage"&gt;
-    &lt;s:param name="personId" value="%{personId}"/&gt;
-&lt;/s:url&gt;
+<p><strong>Parameters</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/ajax/div.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>In FreeMarker, we can pass the arbitrary parameter directly and create the URL in one simple statement.</p>
-
-<p><strong>Creating a URL with a query string (FTL)</strong></p>
+<p><strong>Examples</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;@s.url value="somePage" personId="${personId}"/&gt;
+<p>Simple div that loads its content once:</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>#####Using inline attributes with templates#####</p>
-
-<p>Suppose you created a “three column” theme to replace the typical two column theme (xhtml). You might want an additional parameter to display in the third column called “description”. Using FreeMarker, you can just pop the description attribute into the textfield tag, no fuss, no muss.</p>
+<p>div that reloads its content every 2 seconds, and shows an indicator while reloading:</p>
 
-<p><strong>Passing an attribute to the template</strong></p>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;@s.form action="updatePerson"&gt;
-    &lt;@s.textfield label="First name" name="firstName" description="..."/&gt;
-    &lt;@s.submit value="Update"/&gt;
-&lt;/@s.form&gt;
+<p>div that uses topics to control the timer, highlights its content in red after reload, and submits a form:</p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>In the new template, the description is referenced via the parameters Map: “${parameters.description}”.</p>
+<p>#####dojo head##### {#PAGE_66757}</p>
 
-<table>
-  <tbody>
-    <tr>
-      <td>For simple cases, inline attributes are much easier to use than the param} tag. But, the {{param} tag is more flexible than inline attributes for advanced use cases. For example, {{param can take the entire body of the tag and apply that as the <em>value</em>  attribute.</td>
-    </tr>
-  </tbody>
-</table>
+<p><strong>Description</strong></p>
 
 <table>
   <tbody>
     <tr>
+      <td>{snippet:id=notice</td>
+      <td>javadoc=true</td>
+      <td>url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Head.java}</td>
     </tr>
   </tbody>
 </table>
 
-<p>####Attribute Types####</p>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Head.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
 
-<p>Remember that all tag attributes must first be set as Strings - they are then later evaluated (using <a href="#PAGE_14198">OGNL</a>) to a different type, such as List, int, or boolean. This generally works just fine, but it can be limiting when using FreeMarker which provides more advanced ways to apply attributes. Suppose the following example:</p>
+<blockquote>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;@s.select label="Foo label - ${foo}" name="${name}" list="%1"/&gt;
+</blockquote>
 
-</code></pre>
-</div>
+<blockquote>
 
-<p>What will happen here is that each attribute will be evaluated to a String as best it can. This may involve calling the</p>
+</blockquote>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>toString
-</code></pre>
-</div>
-<p>method on the internal FreeMarker objects. In this case, all objects will end up being exactly what you would expect. Then, when the tag runs, the</p>
+<blockquote>
+  <p>If you are planning to nest tags from the Dojo plugin, make sure you set parseContent=”false”, otherwise each request made by the inner tags will be performed twice.</p>
+</blockquote>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>list
-</code></pre>
-</div>
-<p>attribute will be converted from a String to a List using <a href="#PAGE_14198">OGNL</a>’s advanced collection support.</p>
+<blockquote>
 
-<p>But suppose you wish to use FreeMarker’s list or hash support instead? You can do this:</p>
+</blockquote>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;@s.select label="Foo label - ${foo}" name="${name}" list=[1, 2, 3]/&gt;
+<p><strong>Parameters</strong></p>
 
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/ajax/head.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
 
-<p>Notice that the list attribute no longer has quotes around it. Now it will come in to the tag as an object that can’t easily be converted to a String. Normally, the tag would just call</p>
+<p><strong>Examples</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>toString
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Head.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>, which would return “[1, 2, 3]” and be unable to be converted back to a List by OGNL. Rather than go through all this back and forth, the frameworks’s FreeMarker tag support will recognize collections and not pass them through the normal tag attribute. Instead, the framework will set them directly in the</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>parameters
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3|lang=xml|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Head.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>Map, ready to be consumed by the template.</p>
-
-<p>In the end, everything tends to do what you would expect, but it can help to understand the difference of when OGNL is being used and when it isn’t, and how attribute types get converted.</p>
 
-<p>####JSP Tag Support####</p>
+<p>#####dojo textarea##### {#PAGE_66931}</p>
 
-<p>While the framework provides native FreeMarker Tags, you might wish to use other third-party tags that are only available for JSP. Fortunately, FreeMarker has the ability to run JSP tags. To do so, you must include the JspSupportServlet in the application’s</p>
+<p><strong>Description</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>web.xml
-</code></pre>
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=struts2/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TextArea.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
 </div>
-<p>, as this allows the FreeMarker integration to get access to the required objects needed to emulate a JSP taglib container.</p>
-
-<p><strong>Adding JspSupportSerlvet to web.xml</strong></p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&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;
+<p><strong>Parameters</strong></p>
 
-</code></pre>
-</div>
-
-<p>Once you’ve done that, you can simply add something like this in your templates:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;#assign cewolf=JspTaglibs["/WEB-INF/cewolf.tld"] /&gt;
-...
-&lt;@cewold.xxx ... /&gt;
-
-</code></pre>
-</div>
-
-<p>####Next:####</p>
-
-<p>##JSP## {#PAGE_14141}</p>
-
-<p>The default configuration (<em>struts-default.xml</em> ) configures the <em>Dispatcher Result</em>  as the default result, which works well with JavaServer Pages. Any JSP 1.2+ container can work with Struts 2 JSP tags immediately.</p>
-
-<p>####Getting Started####</p>
-
-<p>Because JSP support occurs through the <em>Dispatcher Result</em> , which is the default result type, you don’t need to specify the type attribute when configuring <em>struts.xml</em> :</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;action name="test" class="com.acme.TestAction"&gt;
-    &lt;result name="success"&gt;test-success.jsp&lt;/result&gt;
-&lt;/action&gt;
-
-</code></pre>
-</div>
-
-<p>Then in <strong>test-success.jsp</strong>:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-<span class="err">&lt;</span>%@ taglib prefix="s" uri="/struts-tags" %&gt;
-
-<span class="nt">&lt;html&gt;</span>
-<span class="nt">&lt;head&gt;</span>
-    <span class="nt">&lt;title&gt;</span>Hello<span class="nt">&lt;/title&gt;</span>
-<span class="nt">&lt;/head&gt;</span>
-<span class="nt">&lt;body&gt;</span>
-
-Hello, <span class="nt">&lt;s:property</span> <span class="na">value=</span><span class="s">"name"</span><span class="nt">/&gt;</span>
-
-<span class="nt">&lt;/body&gt;</span>
-<span class="nt">&lt;/html&gt;</span>
-
-</code></pre>
-</div>
-
-<p>Where <strong>name</strong> is a property on your action. That’s it!</p>
-
-<p>####Servlet / JSP Scoped Objects####</p>
-
-<p>The following are ways to obtain Application scope attributes, Session scope attributes, Request scope attributes, Request parameters and framework Context scope parameters:-</p>
-
-<p>#####Application Scope Attribute#####</p>
-
-<p>Assuming there’s an attribute with name ‘myApplicationAttribute’ in the Application scope.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;s:property value="%{#application.myApplicationAttribute}" /&gt;
-
-</code></pre>
-</div>
-
-<p>#####Session Scope Attribute#####</p>
-
-<p>Assuming there’s an attribute with name ‘mySessionAttribute’ in the Session scope.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;s:property value="%{#session.mySessionAttribute}" /&gt;
-
-</code></pre>
-</div>
-
-<p>#####Request Scope Attribute#####</p>
-
-<p>Assuming there’s an attribute with name ‘myRequestAttribute’ in the Request scope.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;s:property value="%{#request.myRequestAttribute}" /&gt;
-
-</code></pre>
-</div>
-
-<p>#####Request Parameter#####</p>
-
-<p>Assuming there’s a request parameter myParameter (e.g. <a href="http://host/myApp/myAction\.action?myParameter=one">http://host/myApp/myAction.action?myParameter=one</a>).</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;s:property value="%{#parameters.myParameter}" /&gt;
-
-</code></pre>
-</div>
-
-<p>#####Context Scope Parameter#####</p>
-
-<p>Assuming there’s a parameter with the name myContextParam in our context.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-&lt;s:property value="%{#myContextParam}" /&gt;
-
-</code></pre>
-</div>
-
-<p>####Tag Support####</p>
-
-<p>See the <a href="#PAGE_13973">JSP Tags</a> documentation for information on how to use the generic <a href="#PAGE_14248">Struts Tags</a> provided by the framework.</p>
-
-<p>####Exposing the ValueStack####</p>
-
-<p>There are a couple of ways to obtain <em>access to ValueStack from JSPs</em> .</p>
-
-<p>####Next:####</p>
-
-<p>###Access to ValueStack from JSPs### {#PAGE_14315}</p>
-
-<p>To access the ValueStack from third-party JSP taglibs, expose property values to JSP using the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:set
-</code></pre>
-</div>
-<p>tag.</p>
-
-<p><strong>Set a request scoped parameter ‘a’ to list of integers</strong></p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:set name="'a'" value="{ 1, 2, 3, 4 }" scope="request"/&gt;
-
-</code></pre>
-</div>
-
-<p>After setting parameters, third-party JSP taglibs can access variables or use JSP 2.0 EL (Expression Language). This is convenient as short hand EL expression syntax</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>${expression
-</code></pre>
-</div>
-<p>}</p>
-
-<p>can be used in a text or inside of tag attributes:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>a[0] = ${a[0]}
-
-&lt;sample:tag value="${a[1]}"/&gt;
-
-</code></pre>
-</div>
-
-<p>In practice, several variables must be exposed to make effective use of third party taglibs like <a href="http://displaytag\.sourceforge\.net/11/">DisplayTag</a>^[http://displaytag.sourceforge.net/11/]. Unfortunately, this approach leads to a lot of</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;ww:set/&gt;
-</code></pre>
-</div>
-<p>tags.</p>
-
-<table>
-  <tbody>
-    <tr>
-      <td>Unfortunately, it isn’t that simple. we tinkered with JSPFactory.setDefault() to wrap around getPageContext() and create ExpressionEvaluator that would use OGNL. This strategy works in practice, but code generated by Jasper2 doesn’t call JSPFactory.getPageContext().getExpressionEvaluator() but goes directly to static method that is hardwired to Jakarta Commons-EL implementation.</td>
-    </tr>
-  </tbody>
-</table>
-
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
-
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
-
-<table>
-  <tbody>
-    <tr>
-      <td>Even if this approach did work, it wouldn’t be <em>clean</em>  as JSPFactory.setDefault() should only be called by JSP implementation.</td>
-    </tr>
-  </tbody>
-</table>
-
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
-
-<p>There is a simple, if not elegant, solution available in JSP 2.0 EL, for exposing ValueStack to OGNL. It is possible to create custom functions that can be called from EL expressions. Functions have to be ‘public static’ and specified in a TLD file.
- To use a function, import the TLD in a JSP file where you’ve want to use a function. For example, you could access Action properties by evaluating OGNL expression by a function ‘vs’ (for valuestack) in EL.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;%@ taglib uri="/WEB-INF/tld/wwel.tld" prefix="x" %&gt;
-
-a[0] = ${x:vs('a[0]')}
-a[0] * 4 = ${x:vs('a[0] * 4')}
-
-Current action name: ${x:name()}
-Top of ValueStack: ${x:top()}
-
-</code></pre>
-</div>
-
-<p>To use this code you’ve got to add</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>wwel.tld
-</code></pre>
-</div>
-<p>and</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>Functions.java
-</code></pre>
-</div>
-<p>to your webapp project.</p>
-
-<table>
-  <tbody>
-    <tr>
-      <td>If someone were interested, it would be helpful for a developer (like you!) to define a set of functions that we could include in a future release of the framework.</td>
-    </tr>
-  </tbody>
-</table>
-
-<table>
-  <tbody>
-    <tr>
-    </tr>
-  </tbody>
-</table>
-
-<p><strong>wwel.tld</strong></p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0"?&gt;</span>
-<span class="nt">&lt;taglib</span> <span class="na">xmlns=</span><span class="s">"http://java.sun.com/xml/ns/j2ee"</span>
-	<span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span>
-	<span class="na">xsi:schemaLocation=</span><span class="s">"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"</span>
-	<span class="na">version=</span><span class="s">"2.0"</span><span class="nt">&gt;</span>
-
-<span class="nt">&lt;description&gt;</span>
-This taglib enables access to the ValueStack
-from JSP 2.0 Expression Language
-<span class="nt">&lt;/description&gt;</span>
-
-<span class="nt">&lt;tlib-version&gt;</span>1.0<span class="nt">&lt;/tlib-version&gt;</span>
-
-<span class="nt">&lt;short-name&gt;</span>wwel<span class="nt">&lt;/short-name&gt;</span>
-
-<span class="nt">&lt;function&gt;</span>
-	<span class="nt">&lt;name&gt;</span>vs<span class="nt">&lt;/name&gt;</span>
-	<span class="nt">&lt;function-class&gt;</span>com.nmote.wwel.Functions<span class="nt">&lt;/function-class&gt;</span>
-	<span class="nt">&lt;function-signature&gt;</span>
-		java.lang.Object findOnValueStack(java.lang.String)
-	<span class="nt">&lt;/function-signature&gt;</span>
-<span class="nt">&lt;/function&gt;</span>
-
-<span class="nt">&lt;function&gt;</span>
-	<span class="nt">&lt;name&gt;</span>name<span class="nt">&lt;/name&gt;</span>
-	<span class="nt">&lt;function-class&gt;</span>com.nmote.wwel.Functions<span class="nt">&lt;/function-class&gt;</span>
-	<span class="nt">&lt;function-signature&gt;</span>
-		java.lang.Object getActionName()
-	<span class="nt">&lt;/function-signature&gt;</span>
-<span class="nt">&lt;/function&gt;</span>
-
-<span class="nt">&lt;function&gt;</span>
-	<span class="nt">&lt;name&gt;</span>top<span class="nt">&lt;/name&gt;</span>
-	<span class="nt">&lt;function-class&gt;</span>com.nmote.wwel.Functions<span class="nt">&lt;/function-class&gt;</span>
-	<span class="nt">&lt;function-signature&gt;</span>
-		java.lang.Object getTopOfValueStack()
-	<span class="nt">&lt;/function-signature&gt;</span>
-<span class="nt">&lt;/function&gt;</span>
-
-<span class="nt">&lt;/taglib&gt;</span>
-
-</code></pre>
-</div>
-
-<p><strong>Functions.java</strong></p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>package com.nmote.wwel;
-
-import com.opensymphony.xwork.ActionContext;
-
-/**
- * Utility functions for accessing value stack and action context
- * from JSP 2.0 EL taglibs.
- */
-public class Functions {
-
-	public static Object findOnValueStack(String expr) {
-		ActionContext a = ActionContext.getContext();
-		Object value = a.getValueStack().findValue(expr);
-		return value;
-	}
-
-	public static Object getTopOfValueStack() {
-		ActionContext a = ActionContext.getContext();
-		Object value = a.getValueStack().peek();
-		return value;
-	}
-
-	public static Object getActionName() {
-		ActionContext a = ActionContext.getContext();
-		Object value = a.getName();
-		return value;
-	}
-}
-
-</code></pre>
-</div>
-
-<p>##JSP Tags## {#PAGE_13973}</p>
-
-<p>JSP tags are extensions of the generic tags provided by the framework. You can get started almost immediately by simply knowing the generic structure in which the tags can be accessed: &lt;s:tag&gt; ... &lt;/s:tag&gt;, where tag is any of the tags supported by the framework.</p>
-
-<p>####Tag Library Definition (TLD)####</p>
-
-<p>The JSP TLD is included in the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>struts-core.jar
-</code></pre>
-</div>
-<p>. To use, just include the usual red-tape at the top of your JSP.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-<span class="err">&lt;</span>%@ taglib prefix="s" uri="/struts-tags" %&gt;
-<span class="nt">&lt;html&gt;</span>
-  <span class="nt">&lt;body&gt;</span>
-    <span class="nt">&lt;p&gt;</span>Now you can use the tags, like so:<span class="nt">&lt;/p&gt;</span>
-    <span class="nt">&lt;s:iterator</span> <span class="na">value=</span><span class="s">"people"</span><span class="nt">&gt;</span>
-      <span class="nt">&lt;s:property</span> <span class="na">value=</span><span class="s">"lastName"</span><span class="nt">/&gt;</span>, <span class="nt">&lt;s:property</span> <span class="na">value=</span><span class="s">"firstName"</span><span class="nt">/&gt;</span>
-    <span class="nt">&lt;/s:iterator&gt;</span>
-    ...
-
-</code></pre>
-</div>
-
-<p>####Next:####</p>
-
-<p>##OGNL## {#PAGE_14198}</p>
-
-<p>OGNL is the Object Graph Navigation Language (see <a href="http://commons\.apache\.org/proper/commons\-ognl/">http://commons.apache.org/proper/commons-ognl/</a> for the full documentation of OGNL). Here, we will cover a few examples of OGNL features that co-exist with the framework. To review basic concepts, refer to <a href="#PAGE_14000">OGNL Basics</a>.</p>
-
-<p>The framework uses a standard naming context to evaluate OGNL expressions. The top level object dealing with OGNL is a Map (usually referred as a context map or context). OGNL has a notion of there being a root (or default) object within the context. In expression, the properties of the root object can be referenced without any special “marker” notion. References to other objects are marked with a pound sign (</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>#
-</code></pre>
-</div>
-<p>).</p>
-
-<p>The framework sets the OGNL context to be our ActionContext, and the value stack to be the OGNL root object. (The value stack is a set of several objects, but to OGNL it appears to be a single object.) Along with the value stack, the framework places other objects in the ActionContext, including Maps representing the application, session, and request contexts. These objects coexist in the ActionContext, alongside the value stack (our OGNL root).</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>                     |
-                     |--application
-                     |
-                     |--session
-       context map---|
-                     |--value stack(root)
-                     |
-                     |--action (the current action)
-                     |
-                     |--request
-                     |
-                     |--parameters
-                     |
-                     |--attr (searches page, request, session, then application scopes)
-                     |
-
-</code></pre>
-</div>
-
-<p>(information) There are other objects in the context map. The diagram is for example only.</p>
-
-<p>The Action instance is always pushed onto the value stack. Because the Action is on the stack, and the stack is the OGNL root, references to Action properties can omit the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>#
-</code></pre>
-</div>
-<p>marker. But, to access other objects in the ActionContext, we must use the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>#
-</code></pre>
-</div>
-<p>notation so OGNL knows not to look in the root object, but for some other object in the ActionContext.</p>
-
-<p><strong>Referencing an Action property</strong></p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:property value="postalCode"/&gt;
-
-</code></pre>
-</div>
-
-<p>Other (non-root) objects in the ActionContext can be rendered use the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>#
-</code></pre>
-</div>
-<p>notation.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:property value="#session.mySessionPropKey"/&gt; or
-&lt;s:property value="#session['mySessionPropKey']"/&gt; or
-&lt;s:property value="#request['myRequestPropKey']"/&gt;
-
-</code></pre>
-</div>
-
-<p>The ActionContext is also exposed to Action classes via a static method.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ActionContext.getContext().getSession().put("mySessionPropKey", mySessionObject);
-
-</code></pre>
-</div>
-
-<p>You can also put expression for attributes that don’t support dynamic content, like below:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;c:set var="foo" value="bar" scope="request"/&gt;
-&lt;s:textfield name="username" label="%{#request.foo}" /&gt;
-
-</code></pre>
-</div>
-
-<p>####Collections (Maps, Lists, Sets)####</p>
-
-<p>Dealing with Collections (Maps, Lists, and Sets) in the framework comes often, so below please there are a few examples using the select tag. The <a href="http://commons\.apache\.org/proper/commons\-ognl/language\-guide\.html\#Collection\_Construction">OGNL documentation</a>^[http://commons.apache.org/proper/commons-ognl/language-guide.html#Collection_Construction] also includes some examples.</p>
-
-<p>Syntax for list: {e1,e2,e3}. This idiom creates a List containing the String “name1”, “name2” and “name3”. It also selects “name2” as the default value.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:select label="label" name="name" list="{'name1','name2','name3'}" value="%{'name2'}" /&gt;
-
-</code></pre>
-</div>
-
-<p>Syntax for map: #{key1:value1,key2:value2}. This idiom creates a map that maps the string “foo” to the string “foovalue” and “bar” to the string “barvalue”:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:select label="label" name="name" list="#{'foo':'foovalue', 'bar':'barvalue'}" /&gt;
-
-</code></pre>
-</div>
-
-<p>To determine if an element exists in a Collection, use the operations</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>in
-</code></pre>
-</div>
-<p>and</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>not in
-</code></pre>
-</div>
-<p>.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:if test="'foo' in {'foo','bar'}"&gt;
-   muhahaha
-&lt;/s:if&gt;
-&lt;s:else&gt;
-   boo
-&lt;/s:else&gt;
-
-&lt;s:if test="'foo' not in {'foo','bar'}"&gt;
-   muhahaha
-&lt;/s:if&gt;
-&lt;s:else&gt;
-   boo
-&lt;/s:else&gt;
-
-</code></pre>
-</div>
-
-<p>To select a subset of a collection (called projection), use a wildcard within the collection.</p>
-
-<ul>
-  <li>
-    <p>? - All elements matching the selection logic</p>
-  </li>
-  <li>
-    <p>^ - Only the first element matching the selection logic</p>
-  </li>
-  <li>
-    <p>$ - Only the last element matching the selection logic</p>
-  </li>
-</ul>
-
-<p>To obtain a subset of just male relatives from the object person:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>person.relatives.{? #this.gender == 'male'}
-
-</code></pre>
-</div>
-
-<p>####Lambda Expressions####</p>
-
-<p>OGNL supports basic lamba expression syntax enabling you to write simple functions.</p>
-
-<p>(Dedicated to all you math majors who didn’t think you would ever see this one again.)</p>
-
-<p>Fibonacci: if n==0 return 0; elseif n==1 return 1; else return fib(n-2)+fib(n-1);
- fib(0) = 0
- fib(1) = 1
- fib(11) = 89</p>
-
-<p><strong>(i) How the expression works</strong></p>
-
-<blockquote>
-
-</blockquote>
-
-<blockquote>
-
-</blockquote>
-
-<blockquote>
-  <p>The lambda expression is everything inside the square brackets. The #this variable holds the argument to the expression, which in the following example is the number 11 (the code after the square-bracketed lamba expression, #fib(11)).</p>
-</blockquote>
-
-<blockquote>
-
-</blockquote>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;s:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" /&gt;
-
-</code></pre>
-</div>
-
-<p>####Next:####</p>
-
-<p>###OGNL Basics### {#PAGE_14000}</p>
-
-<p>#####XWork-specific language features#####</p>
-
-<p>The biggest addition that XWork provides on top of OGNL is the support for the ValueStack. While OGNL operates under the assumption there is only one “root”, XWork’s ValueStack concept requires there be many “roots”.</p>
-
-<p>For example, suppose we are using standard OGNL (not using XWork) and there are two objects in the OgnlContext map: “foo” -&gt; foo and “bar” -&gt; bar and that the foo object is also configured to be the single <strong>root</strong> object. The following code illustrates how OGNL deals with these three situations:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>#foo.blah // returns foo.getBlah()
-#bar.blah // returns bar.getBlah()
-blah      // returns foo.getBlah() because foo is the root
-
-</code></pre>
-</div>
-
-<p>What this means is that OGNL allows many objects in the context, but unless the object you are trying to access is the root, it must be prepended with a namespaces such as @bar. Now let’s talk about how XWork is a little different...</p>
-
-<p><strong>(i) Useful Information</strong></p>
-
-<blockquote>
-
-</blockquote>
-
-<blockquote>
-
-</blockquote>
-
-<blockquote>
-  <p>In XWork, the entire ValueStack is the root object in the context. Rather than having your expressions get the object you want from the stack and then get properties from that (ie: peek().blah), XWork has a special OGNL PropertyAccessor that will automatically look at the all entries in the stack (from the top down) until it finds an object with the property you are looking for.</p>
-</blockquote>
-
-<blockquote>
-
-</blockquote>
-
-<p>For example, suppose the stack contains two objects: Animal and Person. Both objects have a “name” property, Animal has a “species” property, and Person has a “salary” property. Animal is on the top of the stack, and Person is below it. The follow code fragments help you get an idea of what is going on here:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>species    // call to animal.getSpecies()
-salary     // call to person.getSalary()
-name       // call to animal.getName() because animal is on the top
-
-</code></pre>
-</div>
-
-<p>In the last example, there was a tie and so the animal’s name was returned. Usually this is the desired effect, but sometimes you want the property of a lower-level object. To do this, XWork has added support for indexes on the ValueStack. All you have to do is:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>[0].name   // call to animal.getName()
-[1].name   // call to person.getName()
-
-</code></pre>
-</div>
-
-<p>With expression like [0] ... [3] etc. Struts 2 will cut the stack and still return back a CompoundRoot object. To get the top of that particular stack cut, use <em>0</em> .top</p>
-
-<table>
-  <thead>
-    <tr>
-      <th>ognl expression</th>
-      <th>description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td>[0].top</td>
-      <td>would get the top of the stack cut starting from element 0 in the stack (similar to top in this case)</td>
-    </tr>
-    <tr>
-      <td>[1].top</td>
-      <td>would get the top of the stack cut starting from element 1 in the stack</td>
-    </tr>
-  </tbody>
-</table>
-
-<p>#####Accessing static properties#####</p>
-
-<p>OGNL supports accessing static properties as well as static methods.</p>
-
-<p>By default, Struts 2 is configured to disallow this--to enable OGNL’s static member support you must set the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>struts.ognl.allowStaticMethodAccess
-</code></pre>
-</div>
-<p>constant to</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>true
-</code></pre>
-</div>
-<p>via any of the <em>Constant Configuration</em>  methods.</p>
-
-<p>OGNL’s static access looks like this:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>@some.package.ClassName@FOO_PROPERTY
-@some.package.ClassName@someMethod()
-
-</code></pre>
-</div>
-
-<p>However, XWork allows you to avoid having to specify the full package name and call static properties and methods of your action classes using the “vs” prefix:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>&lt;at:var at:name="vs" /&gt;FOO_PROPERTY
-&lt;at:var at:name="vs" /&gt;someMethod()
-
-&lt;at:var at:name="vs1" /&gt;FOO_PROPERTY
-&lt;at:var at:name="vs1" /&gt;someMethod()
-
-&lt;at:var at:name="vs2" /&gt;BAR_PROPERTY
-&lt;at:var at:name="vs2" /&gt;someOtherMethod()
-
-</code></pre>
-</div>
-
-<p>“vs” stands for “value stack”. The important thing to note here is that if the class name you specify is just “vs”, the class for the object on the top of the stack is used. If you specify a number after the “vs” string, an object’s class deeper in the stack is used instead.</p>
-
-<p>#####Differences from the WebWork 1.x EL#####</p>
-
-<p>Besides the examples and descriptions given above, there are a few major changes in the EL since WebWork 1.x. The biggest one is that properties are no longer accessed with a forward slash (/) but with a dot (.). Also, rather than using “..” to traverse down the stack, we now use “[n]” where n is some positive number. Lastly, in WebWork 1.x one could access special named objects (the request scope attributes to be exact) by using “@foo”, but now special variables are accessed using “#foo”. However, it is important to note that “#foo” does NOT access the request attributes. Because XWork is not built only for the web, there is no concept of “request attributes”, and thus “#foo” is merely a request to another object in the OgnlContext other than the root.</p>
-
-<table>
-  <thead>
-    <tr>
-      <th>Old Expression</th>
-      <th>New Expression</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td>foo/blah</td>
-      <td>foo.blah</td>
-    </tr>
-    <tr>
-      <td>foo/someMethod()</td>
-      <td>foo.someMethod()</td>
-    </tr>
-    <tr>
-      <td>../bar/blah</td>
-      <td>[1].bar.blah</td>
-    </tr>
-    <tr>
-      <td>@baz</td>
-      <td>not directly supported, but #baz is similar</td>
-    </tr>
-    <tr>
-      <td>.</td>
-      <td>‘top’ or [0]</td>
-    </tr>
-  </tbody>
-</table>
-
-<p>#####Struts 2 Named Objects#####</p>
-
-<p>Struts 2 places request parameters and request, session, and application attributes on the OGNL stack. They may be accessed as shown below.</p>
-
-<table>
-  <thead>
-    <tr>
-      <th>name</th>
-      <th>value</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td>#action[‘foo’] or #action.foo</td>
-      <td>current action getter (getFoo())</td>
-    </tr>
-    <tr>
-      <td>#parameters[‘foo’] or #parameters.foo</td>
-      <td>request parameter [‘foo’] (request.getParameter())</td>
-    </tr>
-    <tr>
-      <td>#request[‘foo’] or #request.foo</td>
-      <td>request attribute [‘foo’] (request.getAttribute())</td>
-    </tr>
-    <tr>
-      <td>#session[‘foo’] or #session.foo</td>
-      <td>session attribute ‘foo’</td>
-    </tr>
-    <tr>
-      <td>#application[‘foo’] or #application.foo</td>
-      <td>ServletContext attributes ‘foo’</td>
-    </tr>
-    <tr>
-      <td>#attr[‘foo’] or #attr.foo</td>
-      <td>Access to PageContext if available, otherwise searches request/session/application respectively</td>
-    </tr>
-  </tbody>
-</table>
-
-<p>###OGNL Expression Compilation### {#PAGE_61661}</p>
-
-<p>This document is meant as a development/integration guide for anyone wanting to use the new OGNL 2.7 features for doing byte code runtime enhancements on OGNL statements.  This is <em>not</em>  meant for general user reference as it covers what are mostly internal API development concerns.</p>
-
-<p>##### Basic Usage#####</p>
-
-<p>By default there isn’t much you have to do to use the new compilation abilities in OGNL.  Following is an example of compiling a simple property expression and invoking it.</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-SimpleObject root = new SimpleObject();
-OgnlContext context =  (OgnlContext) Ognl.createDefaultContext(null);
-
-Node node =  (Node) Ognl.compileExpression(context, root, "user.name");
-String userName = node.getAccessor().get(context, root);
-
-</code></pre>
-</div>
-
-<p>You’ll notice that this example references the new</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ognl.enhance.ExpressionAccessor
-</code></pre>
-</div>
-<p>class.  This is the interface used to create the enhanced expression versions of any given expression via javassist and should be used to set/get expression values from the compiled versions of the code.  Although the old</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>Ognl.getValue(node, context, root)
-</code></pre>
-</div>
-<p>method of getting/setting values will correctly detect a compiled expression and use the accessor directly as well,  it’s not going to be as fast as you doing it directly.</p>
-
-<p>##### ognl.enhance.OgnlExpressionCompiler#####</p>
-
-<p>The core class involved in doing the management of these expression compilations by default is</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ognl.enhance.ExpressionCompiler
-</code></pre>
-</div>
-<p>, which implements</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ognl.enhance.OgnlExpressionCompiler
-</code></pre>
-</div>
-<p>.  Although you can in theory use this default implementation it is not recommended for more robust integration points - such as being incorporated within a web framework.  The majority of examples here are going to be based around the strategy that Tapestry has used to integrate these new features.</p>
-
-<p><strong> Tapestry OGNL Integration</strong></p>
-
-<p>There are only small handful of classes/services involved in the Tapestry implementation of these features, so hopefully using them as a reference will help anyone trying to get started with this:</p>
-
-<ul>
-  <li><a href="http://svn\.apache\.org/viewvc/tapestry/tapestry4/trunk/tapestry\-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler\.java?view=markup">org.apache.tapestry.services.impl.HiveMindExpressionCompiler</a>^[http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java?view=markup] The Tapestry implementation of</li>
-</ul>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ognl.enhance.OgnlExpressionCompiler
-</code></pre>
-</div>
-<p>- which is a subclass of the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ognl.enhance.ExpressionCompiler
-</code></pre>
-</div>
-<p>default implementation.</p>
-
-<ul>
-  <li>
-    <p><a href="http://svn\.apache\.org/viewvc/tapestry/tapestry4/trunk/tapestry\-framework/src/java/org/apache/tapestry/services/impl/ExpressionEvaluatorImpl\.java?view=markup">org.apache.tapestry.services.impl.ExpressionEvaluatorImpl</a>^[http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionEvaluatorImpl.java?view=markup] Main service point involved in compiling/evaluating OGNL expressions.  This is the core service that the rest of Tapestry uses when dealing with OGNL expressions.</p>
-  </li>
-  <li>
-    <p><a href="http://svn\.apache\.org/viewvc/tapestry/tapestry4/trunk/tapestry\-framework/src/java/org/apache/tapestry/services/impl/ExpressionCacheImpl\.java?view=markup">org.apache.tapestry.services.impl.ExpressionCacheImpl</a>^[http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionCacheImpl.java?view=markup] Service responsible for caching OGNL statements where appropriate.</p>
-  </li>
-  <li>
-    <p><a href="http://svn\.apache\.org/viewvc/tapestry/tapestry4/trunk/tapestry\-framework/src/java/org/apache/tapestry/binding/ExpressionBinding\.java?view=markup">org.apache.tapestry.binding.ExpressionBinding</a>^[http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/binding/ExpressionBinding.java?view=markup] Wrapper class which represents a single OGNL binding expression within Tapestry templates/annotations/html/etc.  Anything formally specified in an html attribute for components in Tapestry is represented by a specific type of</p>
-  </li>
-</ul>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>IBinding
-</code></pre>
-</div>
-<p>,</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ExpressionBinding
-</code></pre>
-</div>
-<p>represents the type of bindings for OGNL expressions.</p>
-
-<p>*<a href="http://svn\.apache\.org/viewvc/tapestry/tapestry4/trunk/tapestry\-framework/src/java/org/apache/tapestry/bean/BeanProviderPropertyAccessor\.java?view=markup">org.apache.tapestry.bean.BeanProviderPropertyAccessor</a>^[http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java?view=markup] One of the custom</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>PropertyAccessor
-</code></pre>
-</div>
-<p>classes Tapestry registers with OGNL.  This will be a good reference for the new source code generation methods you will need to implement for your</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>PropertyAccessor
-</code></pre>
-</div>
-<p>classes if you want to compile expressions.</p>
-
-<p><strong> ExpressionEvaluator</strong></p>
-
-<p>If you look at the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ExpressionEvaluator
-</code></pre>
-</div>
-<p>source you’ll see a block of initialization where the</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>HiveMindExpressionCompiler
-</code></pre>
-</div>
-<p>and</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>OgnlContext
-</code></pre>
-</div>
-<p>pools are setup:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-OgnlRuntime.setCompiler(new HiveMindExpressionCompiler(_classFactory));
-
-_contextPool = new GenericObjectPool(new PoolableOgnlContextFactory(_ognlResolver, _typeConverter));
-
-_contextPool.setMaxActive(-1);
-_contextPool.setMaxIdle(-1);
-_contextPool.setMinEvictableIdleTimeMillis(POOL_MIN_IDLE_TIME);
-_contextPool.setTimeBetweenEvictionRunsMillis(POOL_SLEEP_TIME);
-
-</code></pre>
-</div>
-
-<p>Some things like null handlers/property accessor configuration has been left out but you should have enough there to get a good idea of what is going on.  Because creating new OgnlContext objects for every expression evaluation can be needlessly expensive Tapestry uses the Apache commons-pool library to manage pooling of these instances.  It is recommended that you do the same where you can.  You will also notice in other portions of the source some new method calls made on</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>OgnlRuntime
-</code></pre>
-</div>
-<p>:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-OgnlRuntime.clearCache();
-Introspector.flushCaches();
-
-</code></pre>
-</div>
-
-<p>The OgnlRuntime class stores static</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>Map
-</code></pre>
-</div>
-<p>-like instances of reflection meta cache information for all objects evaluated in OGNL expressions.  The new</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>clearCache
-</code></pre>
-</div>
-<p>method clears these caches out as the memory footprint can get quite large after a while.  How often/when to call this will largely depend on how your framework works - just keep in mind that calling it too often will have a big impact on runtime performance of your app if you are doing normal application development sort of things with it.</p>
-
-<p><strong> HiveMindExpressionCompiler</strong></p>
-
-<p>Perhaps the most important class to examine is Tapestrys implementation of</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>OgnlExpressionCompiler
-</code></pre>
-</div>
-<p>.  This class still extends the default</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ExpressionCompiler
-</code></pre>
-</div>
-<p>provided by OGNL - but does a few more things that can’t be made generic enough to live in the default implementation.</p>
-
-<p>One of these important differences is how Javassist is used to compile the expressions and the ClassLoader/ClassResolver it uses.  Because these expressions are being compiled against what are already Javassist enhanced Tapestry component class instances this implementation needed to re-use existing hivemind Javassist services so that these enhanced classes could be correctly resolved while OGNL is evaluating them.</p>
-
-<p>If you don’t have a need to provide this kind of classloading functionality you will probably still need to modify at least how the javassist</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ClassPool
-</code></pre>
-</div>
-<p>is being managed in your own implementations.  The internal functionality of that library is such that the memory consumption of the pool is very large and will get unwieldy especially in development of web apps.  Tapestry has a special state that users are used to which is known as “disable caching” - more or less meaning that javassist enhancements happen for every request instead of only once.</p>
-
-<p>Another very important piece of logic that this class handles is the generation of “fail safe” getters/setters when expressions just can’t be compiled because of either internal errors or a specific syntax type used isn’t yet able to support javassist compilations.  This logic can sometimes get tricky in that in many instances OGNL expressions won’t be compilable because the full expression contains a null reference.  The basic idea is that the compiler keeps trying to compile these kinds of expressions until it either gets a fatal exception thrown or the full expression is able to be resolved.  For example, the following expression would throw a</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>UnsupportedCompilationException
-</code></pre>
-</div>
-<p>if the “user” object returned was null - resulting in no direct compilation being done at all:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>
-"user.firstName"
-
-</code></pre>
-</div>
-
-<p>That doesn’t mean that the user object might not be resolvable the next time this expression is invoked though,  so the next time the compiler tries it may succeed in which case the whole expression is enhanced and the new</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ExpressionAccessor
-</code></pre>
-</div>
-<p>instance is attached to the root</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>Node
-</code></pre>
-</div>
-<p>object by calling</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>SimpleNode.setAccessor(newInstance)
-</code></pre>
-</div>
-<p>.</p>
-
-<p>The fail safe logic is there for expressions that are likely to never be resolvable for one reason or another.  In these instances a</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>ExpressionAccessor
-</code></pre>
-</div>
-<p>class instance is still created - with the major difference being that i

<TRUNCATED>

[05/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/iterator-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/iterator-tag.html b/content/tag-developers/iterator-tag.html
new file mode 100644
index 0000000..3886a45
--- /dev/null
+++ b/content/tag-developers/iterator-tag.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/iterator-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="iterator">iterator</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>The id attribute is deprecated in Struts 2.1.x, and has been replaced by the var attribute.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>The begin, end and step attributes are only available from 2.1.7 on</p>
+
+<blockquote>
+
+</blockquote>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/iterator.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1description|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example1code|lang=xml|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2description|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example2code|lang=xml|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3description|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example3code|lang=xml|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example4description|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example4code|lang=xml|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example5description|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example5code|lang=xml|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example6description|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example6code|lang=xml|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example7description|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example7code|lang=xml|javadoc=true|url=org.apache.struts2.components.IteratorComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/jsp-tags.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/jsp-tags.html b/content/tag-developers/jsp-tags.html
new file mode 100644
index 0000000..e0ec3c2
--- /dev/null
+++ b/content/tag-developers/jsp-tags.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/jsp-tags.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="jsp-tags">JSP Tags</h1>
+
+<p>JSP tags are extensions of the generic tags provided by the framework. You can get started almost immediately by simply 
+knowing the generic structure in which the tags can be accessed: <code class="highlighter-rouge">&lt;s:tag&gt; ... &lt;/s:tag&gt;</code>, where tag is any of the tags 
+supported by the framework.</p>
+
+<h2 id="tag-library-definition-tld">Tag Library Definition (TLD)</h2>
+
+<p>The JSP TLD is included in the <code class="highlighter-rouge">struts-core.jar</code>. To use, just include the usual red-tape at the top of your JSP.</p>
+
+<pre><code class="language-jsp">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;
+&lt;html&gt;
+  &lt;body&gt;
+    &lt;p&gt;Now you can use the tags, like so:&lt;/p&gt;
+    &lt;s:iterator value="people"&gt;
+      &lt;s:property value="lastName"/&gt;, &lt;s:property value="firstName"/&gt;
+    &lt;/s:iterator&gt;
+    ...
+</code></pre>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/jsp.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/jsp.html b/content/tag-developers/jsp.html
new file mode 100644
index 0000000..89eddc7
--- /dev/null
+++ b/content/tag-developers/jsp.html
@@ -0,0 +1,280 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/jsp.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 class="no_toc" id="jsp">JSP</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#getting-started" id="markdown-toc-getting-started">Getting Started</a></li>
+  <li><a href="#servlet--jsp-scoped-objects" id="markdown-toc-servlet--jsp-scoped-objects">Servlet / JSP Scoped Objects</a>    <ul>
+      <li><a href="#application-scope-attribute" id="markdown-toc-application-scope-attribute">Application Scope Attribute</a></li>
+      <li><a href="#session-scope-attribute" id="markdown-toc-session-scope-attribute">Session Scope Attribute</a></li>
+      <li><a href="#request-scope-attribute" id="markdown-toc-request-scope-attribute">Request Scope Attribute</a></li>
+      <li><a href="#request-parameter" id="markdown-toc-request-parameter">Request Parameter</a></li>
+      <li><a href="#context-scope-parameter" id="markdown-toc-context-scope-parameter">Context Scope Parameter</a></li>
+    </ul>
+  </li>
+  <li><a href="#tag-support" id="markdown-toc-tag-support">Tag Support</a></li>
+  <li><a href="#exposing-the-valuestack" id="markdown-toc-exposing-the-valuestack">Exposing the ValueStack</a></li>
+</ul>
+
+<p>The default configuration (<code class="highlighter-rouge">struts-default.xml</code>) configures the <code class="highlighter-rouge">Dispatcher Result</code> as the default result, which works 
+well with JavaServer Pages. Any JSP 1.2+ container can work with Struts 2 JSP tags immediately.</p>
+
+<h2 id="getting-started">Getting Started</h2>
+
+<p>Because JSP support occurs through the <code class="highlighter-rouge">Dispatcher Result</code>, which is the default result type, you don’t need to specify 
+the type attribute when configuring <code class="highlighter-rouge">struts.xml</code>:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;action</span> <span class="na">name=</span><span class="s">"test"</span> <span class="na">class=</span><span class="s">"com.acme.TestAction"</span><span class="nt">&gt;</span>
+    <span class="nt">&lt;result</span> <span class="na">name=</span><span class="s">"success"</span><span class="nt">&gt;</span>test-success.jsp<span class="nt">&lt;/result&gt;</span>
+<span class="nt">&lt;/action&gt;</span>
+</code></pre>
+</div>
+
+<p>Then in <strong>test-success.jsp</strong>:</p>
+
+<pre><code class="language-jsp">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;title&gt;Hello&lt;/title&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+Hello, &lt;s:property value="name"/&gt;
+
+&lt;/body&gt;
+&lt;/html&gt;
+</code></pre>
+
+<p>Where <strong>name</strong> is a property on your action. That’s it!</p>
+
+<h2 id="servlet--jsp-scoped-objects">Servlet / JSP Scoped Objects</h2>
+
+<p>The following are ways to obtain Application scope attributes, Session scope attributes, Request scope attributes, 
+Request parameters and framework Context scope parameters:</p>
+
+<h3 id="application-scope-attribute">Application Scope Attribute</h3>
+
+<p>Assuming there’s an attribute with name <code class="highlighter-rouge">myApplicationAttribute</code> in the Application scope.</p>
+
+<pre><code class="language-jsp">&lt;s:property value="%{#application.myApplicationAttribute}" /&gt;
+</code></pre>
+
+<h3 id="session-scope-attribute">Session Scope Attribute</h3>
+
+<p>Assuming there’s an attribute with name <code class="highlighter-rouge">mySessionAttribute</code> in the Session scope.</p>
+
+<pre><code class="language-jsp">&lt;s:property value="%{#session.mySessionAttribute}" /&gt;
+</code></pre>
+
+<h3 id="request-scope-attribute">Request Scope Attribute</h3>
+
+<p>Assuming there’s an attribute with name <code class="highlighter-rouge">myRequestAttribute</code> in the Request scope.</p>
+
+<pre><code class="language-jsp">&lt;s:property value="%{#request.myRequestAttribute}" /&gt;
+</code></pre>
+
+<h3 id="request-parameter">Request Parameter</h3>
+
+<p>Assuming there’s a request parameter <code class="highlighter-rouge">myParameter</code> (e.g. [http://host/myApp/myAction.action?myParameter=one]).</p>
+
+<pre><code class="language-jsp">&lt;s:property value="%{#parameters.myParameter}" /&gt;
+</code></pre>
+
+<h3 id="context-scope-parameter">Context Scope Parameter</h3>
+
+<p>Assuming there’s a parameter with the name <code class="highlighter-rouge">myContextParam</code> in our context.</p>
+
+<pre><code class="language-jsp">&lt;s:property value="%{#myContextParam}" /&gt;
+</code></pre>
+
+<h2 id="tag-support">Tag Support</h2>
+
+<p>See the <a href="jsp-tags.html">JSP Tags</a> documentation for information on how to use the generic <a href="struts-tags.html">Struts Tags</a> 
+provided by the framework.</p>
+
+<h2 id="exposing-the-valuestack">Exposing the ValueStack</h2>
+
+<p>There are a couple of ways to obtain <a href="access-to-valuestack-from-jsps.html">Access to ValueStack from JSPs</a>.</p>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/merge-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/merge-tag.html b/content/tag-developers/merge-tag.html
new file mode 100644
index 0000000..f2e5539
--- /dev/null
+++ b/content/tag-developers/merge-tag.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/merge-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="merge">merge</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.MergeIterator</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/merge.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javacode|lang=java|javadoc=true|url=org.apache.struts2.components.MergeIterator</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.MergeIterator</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/ognl-basics.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/ognl-basics.html b/content/tag-developers/ognl-basics.html
new file mode 100644
index 0000000..75af42f
--- /dev/null
+++ b/content/tag-developers/ognl-basics.html
@@ -0,0 +1,373 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/ognl-basics.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 class="no_toc" id="ognl-basics">OGNL Basics</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#struts-specific-language-features" id="markdown-toc-struts-specific-language-features">Struts-specific language features</a>    <ul>
+      <li><a href="#accessing-static-properties" id="markdown-toc-accessing-static-properties">Accessing static properties</a></li>
+      <li><a href="#differences-from-the-webwork-1x-el" id="markdown-toc-differences-from-the-webwork-1x-el">Differences from the WebWork 1.x EL</a></li>
+      <li><a href="#struts-2-named-objects" id="markdown-toc-struts-2-named-objects">Struts 2 Named Objects</a></li>
+    </ul>
+  </li>
+</ul>
+
+<h2 id="struts-specific-language-features">Struts-specific language features</h2>
+
+<p>The biggest addition that Struts provides on top of OGNL is the support for the ValueStack. While OGNL operates under 
+the assumption there is only one “root”, Struts’s ValueStack concept requires there be many “roots”.</p>
+
+<p>For example, suppose we are using standard OGNL (not using Struts) and there are two objects in the OgnlContext map: 
+“foo” -&gt; foo and “bar” -&gt; bar and that the foo object is also configured to be the single <strong>root</strong> object. 
+The following code illustrates how OGNL deals with these three situations:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>#foo.blah // returns foo.getBlah()
+#bar.blah // returns bar.getBlah()
+blah      // returns foo.getBlah() because foo is the root
+</code></pre>
+</div>
+
+<p>What this means is that OGNL allows many objects in the context, but unless the object you are trying to access is the root, 
+it must be prepended with a namespaces such as @bar. Now let’s talk about how Struts is a little different…</p>
+
+<blockquote>
+  <p>In Struts, the entire ValueStack is the root object in the context. Rather than having your expressions get the object 
+you want from the stack and then get properties from that (ie: peek().blah), Struts has a special OGNL PropertyAccessor 
+that will automatically look at the all entries in the stack (from the top down) until it finds an object with the property 
+you are looking for.</p>
+</blockquote>
+
+<p>For example, suppose the stack contains two objects: Animal and Person. Both objects have a “name” property, Animal has 
+a “species” property, and Person has a “salary” property. Animal is on the top of the stack, and Person is below it. 
+The follow code fragments help you get an idea of what is going on here:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>species    // call to animal.getSpecies()
+salary     // call to person.getSalary()
+name       // call to animal.getName() because animal is on the top
+</code></pre>
+</div>
+
+<p>In the last example, there was a tie and so the animal’s name was returned. Usually this is the desired effect, but 
+sometimes you want the property of a lower-level object. To do this, XWork has added support for indexes on the ValueStack. 
+All you have to do is:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>[0].name   // call to animal.getName()
+[1].name   // call to person.getName()
+</code></pre>
+</div>
+
+<p>With expression like <code class="highlighter-rouge">[0] ... [3]</code> etc. Struts will cut the stack and still return back a CompoundRoot object. To get 
+the top of that particular stack cut, use <code class="highlighter-rouge">[0].top</code></p>
+
+<table>
+  <thead>
+    <tr>
+      <th>ognl expression</th>
+      <th>description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td><code class="highlighter-rouge">[0].top</code></td>
+      <td>would get the top of the stack cut starting from element 0 in the stack (similar to top in this case)</td>
+    </tr>
+    <tr>
+      <td><code class="highlighter-rouge">[1].top</code></td>
+      <td>would get the top of the stack cut starting from element 1 in the stack</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="accessing-static-properties">Accessing static properties</h3>
+
+<p>OGNL supports accessing static properties as well as static methods.</p>
+
+<p>By default, Struts 2 is configured to disallow this - to enable OGNL’s static member support you must set the
+<code class="highlighter-rouge">struts.ognl.allowStaticMethodAccess</code> constant to <code class="highlighter-rouge">true</code> via any of the <a href="../core-developers/constant-configuration.html">Constant Configuration</a> methods.</p>
+
+<p>OGNL’s static access looks like this:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>@some.package.ClassName@FOO_PROPERTY
+@some.package.ClassName@someMethod()
+</code></pre>
+</div>
+
+<p>However, Struts allows you to avoid having to specify the full package name and call static properties and methods of your 
+action classes using the “vs” prefix:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;at:var at:name="vs" /&gt;FOO_PROPERTY
+&lt;at:var at:name="vs" /&gt;someMethod()
+
+&lt;at:var at:name="vs1" /&gt;FOO_PROPERTY
+&lt;at:var at:name="vs1" /&gt;someMethod()
+
+&lt;at:var at:name="vs2" /&gt;BAR_PROPERTY
+&lt;at:var at:name="vs2" /&gt;someOtherMethod()
+</code></pre>
+</div>
+
+<p>“vs” stands for “value stack”. The important thing to note here is that if the class name you specify is just “vs”, 
+the class for the object on the top of the stack is used. If you specify a number after the “vs” string, an object’s 
+class deeper in the stack is used instead.</p>
+
+<h3 id="differences-from-the-webwork-1x-el">Differences from the WebWork 1.x EL</h3>
+
+<p>Besides the examples and descriptions given above, there are a few major changes in the EL since WebWork 1.x. The biggest 
+one is that properties are no longer accessed with a forward slash (/) but with a dot (.). Also, rather than using “..” 
+to traverse down the stack, we now use “[n]” where n is some positive number. Lastly, in WebWork 1.x one could access 
+special named objects (the request scope attributes to be exact) by using “@foo”, but now special variables are accessed 
+using “#foo”. However, it is important to note that “#foo” does NOT access the request attributes. Because XWork is not 
+built only for the web, there is no concept of “request attributes”, and thus “#foo” is merely a request to another 
+object in the OgnlContext other than the root.</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>Old Expression</th>
+      <th>New Expression</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>foo/blah</td>
+      <td>foo.blah</td>
+    </tr>
+    <tr>
+      <td>foo/someMethod()</td>
+      <td>foo.someMethod()</td>
+    </tr>
+    <tr>
+      <td>../bar/blah</td>
+      <td>[1].bar.blah</td>
+    </tr>
+    <tr>
+      <td>@baz</td>
+      <td>not directly supported, but #baz is similar</td>
+    </tr>
+    <tr>
+      <td>.</td>
+      <td>‘top’ or [0]</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="struts-2-named-objects">Struts 2 Named Objects</h3>
+
+<p>Struts 2 places request parameters and request, session, and application attributes on the OGNL stack. They may be accessed 
+as shown below.</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>name</th>
+      <th>value</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>#action[‘foo’] or #action.foo</td>
+      <td>current action getter (getFoo())</td>
+    </tr>
+    <tr>
+      <td>#parameters[‘foo’] or #parameters.foo</td>
+      <td>request parameter [‘foo’] (request.getParameter())</td>
+    </tr>
+    <tr>
+      <td>#request[‘foo’] or #request.foo</td>
+      <td>request attribute [‘foo’] (request.getAttribute())</td>
+    </tr>
+    <tr>
+      <td>#session[‘foo’] or #session.foo</td>
+      <td>session attribute ‘foo’</td>
+    </tr>
+    <tr>
+      <td>#application[‘foo’] or #application.foo</td>
+      <td>ServletContext attributes ‘foo’</td>
+    </tr>
+    <tr>
+      <td>#attr[‘foo’] or #attr.foo</td>
+      <td>Access to PageContext if available, otherwise searches request/session/application respectively</td>
+    </tr>
+  </tbody>
+</table>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[07/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/freemarker.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/freemarker.html b/content/tag-developers/freemarker.html
new file mode 100644
index 0000000..5dfcd47
--- /dev/null
+++ b/content/tag-developers/freemarker.html
@@ -0,0 +1,546 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/freemarker.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 class="no_toc" id="freemarker">FreeMarker</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#getting-started" id="markdown-toc-getting-started">Getting Started</a></li>
+  <li><a href="#servlet--jsp-scoped-objects" id="markdown-toc-servlet--jsp-scoped-objects">Servlet / JSP Scoped Objects</a>    <ul>
+      <li><a href="#application-scope-attribute" id="markdown-toc-application-scope-attribute">Application Scope Attribute</a></li>
+      <li><a href="#session-scope-attribute" id="markdown-toc-session-scope-attribute">Session Scope Attribute</a></li>
+      <li><a href="#request-scope-attribute" id="markdown-toc-request-scope-attribute">Request Scope Attribute</a></li>
+      <li><a href="#request-parameter" id="markdown-toc-request-parameter">Request Parameter</a></li>
+      <li><a href="#context-parameter" id="markdown-toc-context-parameter">Context parameter</a></li>
+    </ul>
+  </li>
+  <li><a href="#template-loading" id="markdown-toc-template-loading">Template Loading</a></li>
+  <li><a href="#variable-resolution" id="markdown-toc-variable-resolution">Variable Resolution</a></li>
+  <li><a href="#tag-support" id="markdown-toc-tag-support">Tag Support</a></li>
+  <li><a href="#tips-and-tricks" id="markdown-toc-tips-and-tricks">Tips and Tricks</a>    <ul>
+      <li><a href="#type-conversion-and-locales" id="markdown-toc-type-conversion-and-locales">Type Conversion and Locales</a></li>
+      <li><a href="#extending" id="markdown-toc-extending">Extending</a></li>
+      <li><a href="#objectwrapper-settings" id="markdown-toc-objectwrapper-settings">ObjectWrapper Settings</a></li>
+      <li><a href="#syntax-notes" id="markdown-toc-syntax-notes">Syntax Notes</a></li>
+      <li><a href="#cache" id="markdown-toc-cache">Cache</a></li>
+      <li><a href="#incompatible-improvements" id="markdown-toc-incompatible-improvements">Incompatible Improvements</a></li>
+    </ul>
+  </li>
+</ul>
+
+<p>FreeMarker is a Java-based template engine that is a great alternative to <a href="jsp.html">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>
+
+<p>For more information on FreeMarker itself, please visit the <a href="http://freemarker.org/">FreeMarker website</a>.</p>
+
+<blockquote>
+  <p>The framework utilizes FreeMarker because the engine includes strong error reporting, built-in internationalization 
+and powerful macro libraries.</p>
+</blockquote>
+
+<blockquote>
+  <p>Support is also included for <a href="velocity.html">Velocity</a> templates. For a comparison of Velocity vs FreeMarker 
+see <a href="http://freemarker.org/fmVsVel.html">here</a>.</p>
+</blockquote>
+
+<h2 id="getting-started">Getting Started</h2>
+
+<p>Getting started with FreeMarker is as simple as ensuring all the dependencies are included in your project’s classpath. 
+Typically, the only dependency is <code class="highlighter-rouge">freemarker.jar</code>. Other than that, <code class="highlighter-rouge">struts-default.xml</code> already configures 
+the <code class="highlighter-rouge">FreeMarker Result</code> needed to process your application’s templates.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;action</span> <span class="na">name=</span><span class="s">"test"</span> <span class="na">class=</span><span class="s">"com.acme.TestAction"</span><span class="nt">&gt;</span>
+    <span class="nt">&lt;result</span> <span class="na">name=</span><span class="s">"success"</span> <span class="na">type=</span><span class="s">"freemarker"</span><span class="nt">&gt;</span>test-success.ftl<span class="nt">&lt;/result&gt;</span>
+<span class="nt">&lt;/action&gt;</span>
+</code></pre>
+</div>
+
+<p>Then in <code class="highlighter-rouge">test-success.ftl</code>:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;html&gt;</span>
+<span class="nt">&lt;head&gt;</span>
+    <span class="nt">&lt;title&gt;</span>Hello<span class="nt">&lt;/title&gt;</span>
+<span class="nt">&lt;/head&gt;</span>
+<span class="nt">&lt;body&gt;</span>
+
+Hello, ${name}
+
+<span class="nt">&lt;/body&gt;</span>
+<span class="nt">&lt;/html&gt;</span>
+</code></pre>
+</div>
+
+<p>Where <code class="highlighter-rouge">name</code> is a property on your action. That’s it! Read the rest of this document for details on how templates 
+are loaded, variables are resolved, and tags can be used.</p>
+
+<h2 id="servlet--jsp-scoped-objects">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 id="application-scope-attribute">Application Scope Attribute</h3>
+
+<p>Assuming there’s an attribute with name <code class="highlighter-rouge">myApplicationAttribute</code> in the Application scope.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>#if Application.myApplicationAttribute?exists&gt;
+     ${Application.myApplicationAttribute}
+<span class="err">&lt;</span>/#if&gt;
+</code></pre>
+</div>
+
+<p>or</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.property value="%{#application.myApplicationAttribute}" /&gt;
+</code></pre>
+</div>
+
+<h3 id="session-scope-attribute">Session Scope Attribute</h3>
+
+<p>Assuming there’s an attribute with name <code class="highlighter-rouge">mySessionAttribute</code> in the Session scope.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>#if Session.mySessionAttribute?exists&gt;
+     ${Session.mySessionAttribute}
+<span class="err">&lt;</span>/#if&gt;
+</code></pre>
+</div>
+
+<p>or</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.property value="%{#session.mySessionAttribute}" /&gt;
+</code></pre>
+</div>
+
+<h3 id="request-scope-attribute">Request Scope Attribute</h3>
+
+<p>Assuming there’s an attribute with name <code class="highlighter-rouge">myRequestAttribute</code> in the Request scope.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>#if Request.myRequestAttribute?exists&gt;
+      ${Request.myRequestAttribute}
+<span class="err">&lt;</span>/#if&gt;
+</code></pre>
+</div>
+
+<p>or</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.property value="%{#request.myRequestAttribute}" /&gt;
+</code></pre>
+</div>
+
+<h3 id="request-parameter">Request Parameter</h3>
+
+<p>Assuming there’s a request parameter <code class="highlighter-rouge">myParameter</code> (eg. [http://host/myApp/myAction.action?myParameter=one]).</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>#if Parameters.myParameter?exists&gt;
+     ${Parameters.myParameter}
+<span class="err">&lt;</span>/#if&gt;
+</code></pre>
+</div>
+
+<p>or</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.property value="%{#parameters.myParameter}" /&gt;
+</code></pre>
+</div>
+
+<h3 id="context-parameter">Context parameter</h3>
+
+<p>Assuming there’s a parameter with the name <code class="highlighter-rouge">myContextParam</code> in framework context.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>~~~~~~~
+${stack.findValue('#myContextParam')}
+</code></pre>
+</div>
+
+<p>or</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.property value="%{#myContextParam}" /&gt;
+</code></pre>
+</div>
+
+<h2 id="template-loading">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 href="form-tags.html">Form Tags</a> included with the framework.</p>
+
+<p>In addition, you can specify a location (directory on your file system) through the <code class="highlighter-rouge">templatePath</code> or <code class="highlighter-rouge">TemplatePath</code>
+context variable (in the <code class="highlighter-rouge">web.xml</code>). If a variable is specified, the content of the directory it points to will be 
+searched first.</p>
+
+<blockquote>
+  <p>This variable is currently NOT relative to the root of your application.</p>
+</blockquote>
+
+<h2 id="variable-resolution">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 hash marker (<code class="highlighter-rouge">#</code>) like you would have to when using the JSP <code class="highlighter-rouge">s:property</code> tag. This is a nice 
+convenience, though be careful because there is a small chance it could trip you up.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>@s.url id="url" value="http://www.yahoo.com"/&gt;
+Click <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"${url}"</span><span class="nt">&gt;</span>here<span class="nt">&lt;/a&gt;</span>!
+</code></pre>
+</div>
+
+<p>The built-in variables that Struts-FreeMarker integration provides are:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>Name</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>stack</td>
+      <td>The value stack itself, useful for calls like <code class="highlighter-rouge">${stack.findString('ognl expr')}</code></td>
+    </tr>
+    <tr>
+      <td>action</td>
+      <td>The action most recently executed</td>
+    </tr>
+    <tr>
+      <td>response</td>
+      <td>The HttpServletResponse</td>
+    </tr>
+    <tr>
+      <td>res</td>
+      <td>Same as response</td>
+    </tr>
+    <tr>
+      <td>request</td>
+      <td>The HttpServletRequest</td>
+    </tr>
+    <tr>
+      <td>req</td>
+      <td>Same as request</td>
+    </tr>
+    <tr>
+      <td>session</td>
+      <td>The HttpSession</td>
+    </tr>
+    <tr>
+      <td>application</td>
+      <td>The ServletContext</td>
+    </tr>
+    <tr>
+      <td>base</td>
+      <td>The request’s context path</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="tag-support">Tag Support</h2>
+
+<p>FreeMarker includes complete tag support. See the <a href="freemarker-tags.html">FreeMarker Tags</a> documentation for information 
+on how to use the generic <a href="struts-tags.html">Struts Tags</a> provided by Struts. In addition to this, you can use any JSP tag, 
+like so:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="err">&lt;</span>#assign mytag=JspTaglibs["/WEB-INF/mytag.tld"]&gt;
+<span class="err">&lt;</span>@mytag.tagx attribute1="some ${value}"/&gt;
+</code></pre>
+</div>
+
+<p>Where <strong>mytag.tld</strong> is the JSP Tag Library Definition file for your tag library. Note: in order to use this support 
+in FreeMarker, you must enable the <code class="highlighter-rouge">JSPSupportServlet</code> in <code class="highlighter-rouge">web.xml</code>:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;servlet&gt;</span>
+    <span class="nt">&lt;servlet-name&gt;</span>JspSupportServlet<span class="nt">&lt;/servlet-name&gt;</span>
+    <span class="nt">&lt;servlet-class&gt;</span>org.apache.struts2.views.JspSupportServlet<span class="nt">&lt;/servlet-class&gt;</span>
+    <span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
+<span class="nt">&lt;/servlet&gt;</span>
+</code></pre>
+</div>
+
+<h2 id="tips-and-tricks">Tips and Tricks</h2>
+
+<p>There are some advanced features that may be useful when building Struts applications with FreeMarker.</p>
+
+<h3 id="type-conversion-and-locales">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 <code class="highlighter-rouge">struts.properties</code> but can be over-ridden using the <code class="highlighter-rouge">I18n Interceptor</code>. 
+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 <em>Type Conversion</em> support.</p>
+
+<p>If you want the framework to handle the formatting according to the <em>Type Conversion</em>  you have specified, you shouldn’t
+use the normal <code class="highlighter-rouge">${...}</code> syntax. Instead, you should use the <a href="property-tag.html">property</a> tag. The difference is that 
+the <code class="highlighter-rouge">property</code> tag is specifically designed to take an <a href="ognl.html">OGNL</a> expression, evaluate it, and then convert it 
+to a String using any <em>Type Conversion</em> rules you have specified. The normal <code class="highlighter-rouge">${...}</code> syntax will use a FreeMarker 
+expression language, evaluate it, and then convert it to a String using the built in formatting rules.</p>
+
+<blockquote>
+  <p>The difference in how type conversion is handled under Freemarker is subtle but important to understand.</p>
+</blockquote>
+
+<h3 id="extending">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 <code class="highlighter-rouge">org.apache.struts2.views.freemarker.FreemarkerManager</code>, 
+overriding methods as needed, and plugin the class through the <code class="highlighter-rouge">struts.xml</code>:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;constant name="struts.freemarker.manager.classname" value="com.yourcompany.YourFreeMarkerManager" /&gt;
+</code></pre>
+</div>
+
+<h3 id="objectwrapper-settings">ObjectWrapper Settings</h3>
+
+<p>Once you get familiar with FreeMarker, you will find certain <em>subtleties</em> with it that may become frustrating. 
+The most common thing you’ll likely run in to is the <code class="highlighter-rouge">BeansWrapper</code> provided by FreeMarker. If you don’t know what this 
+is, don’t worry. However, if you do, know this:</p>
+
+<p>The <code class="highlighter-rouge">StrutsBeanWrapper</code> extends the default FreeMarker <code class="highlighter-rouge">BeansWrapper</code> and provides almost no change in functionality,
+<strong>except</strong> for how it handles maps. Normally, FreeMarker has two modes of operation: either support for friendly
+map built-ins (<code class="highlighter-rouge">?keys</code>, <code class="highlighter-rouge">?values</code>, etc) but only support for String keys; OR no special built-in support (ie: <code class="highlighter-rouge">?keys</code>
+returns the methods on the map instead of the keys) but support for String and non-String keys alike. Struts
+provides an alternative implementation that gives us the best of both worlds.</p>
+
+<p>It is possible that this special behavior may be confusing or can cause problems. Therefore, you can set the
+<code class="highlighter-rouge">struts.freemarker.wrapper.altMap</code> property in <code class="highlighter-rouge">struts.xml</code> to false, allowing the normal BeansWrapper
+logic to take place instead.</p>
+
+<h3 id="syntax-notes">Syntax Notes</h3>
+
+<p>As of FreeMarker 2.3.4, an alternative syntax is supported. This alternative syntax is great if you find that your IDE 
+(especially IntelliJ IDEA) makes it difficult to work with the default syntax. You can read more about this syntax
+ <a href="http://freemarker.org/docs/dgui_misc_alternativesyntax.html">here</a>.</p>
+
+<h3 id="cache">Cache</h3>
+
+<p>You can enable FreeMarker cache mechanism by specifying below options in <code class="highlighter-rouge">struts.xml</code>:</p>
+
+<ul>
+  <li><code class="highlighter-rouge">&lt;constant name="struts.freemarker.mru.max.strong.size" value="250" /&gt;</code> - this option will be used 
+by <a href="http://freemarker.org/docs/api/freemarker/cache/MruCacheStorage.html">freemarker.cache.MruCacheStorage</a></li>
+  <li><code class="highlighter-rouge">&lt;constant name="struts.freemarker.templatesCache.updateDelay" value="1800" /&gt;</code> - default update cache interval (5 seconds)
+-<code class="highlighter-rouge">&lt;constant name="struts.freemarker.templatesCache" value="true" /&gt;</code> - *<strong>DEPRECATED</strong>* this option will use a internal 
+ConcurrentHashMap in FreemarkerTemplateEngine but not freemarker native cache</li>
+</ul>
+
+<p>Setting <code class="highlighter-rouge">devMode</code> to <code class="highlighter-rouge">true</code> will disable cache and updateDelay immediately, but you can explicit specify these constants 
+to enable cache even in <code class="highlighter-rouge">devMode</code>, see <a href="../core-developers/development-mode.html">devMode</a>.</p>
+
+<h3 id="incompatible-improvements">Incompatible Improvements</h3>
+
+<p>By default Struts is using FreeMarker in way to be backward compatible as much as possible but if you need to enable new 
+features you can do it via <code class="highlighter-rouge">freemarker.properties</code> by defining 
+<a href="http://freemarker.org/docs/pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">incompatible improvements</a>
+settings, ie.:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>incompatible_improvements=2.3.22
+</code></pre>
+</div>
+
+<p>You can also pass this setting via <code class="highlighter-rouge">ServletContext</code> setting <code class="highlighter-rouge">&lt;init-param/&gt;</code> (since Struts 2.5.13):</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;init-param&gt;</span>
+    <span class="nt">&lt;param-name&gt;</span>freemarker.incompatible_improvements<span class="nt">&lt;/param-name&gt;</span>
+    <span class="nt">&lt;param-value&gt;</span>2.3.22<span class="nt">&lt;/param-value&gt;</span>
+<span class="nt">&lt;/init-param&gt;</span>
+</code></pre>
+</div>
+
+<p>This can impact your freemarker powered pages and Struts tags as well, so please careful test this change.</p>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/generator-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/generator-tag.html b/content/tag-developers/generator-tag.html
new file mode 100644
index 0000000..f7afbc5
--- /dev/null
+++ b/content/tag-developers/generator-tag.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/generator-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="generator">generator</h1>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.views.jsp.iterator.IteratorGeneratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/generator.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.views.jsp.iterator.IteratorGeneratorTag</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/generic-tag-reference.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/generic-tag-reference.html b/content/tag-developers/generic-tag-reference.html
new file mode 100644
index 0000000..36e85d6
--- /dev/null
+++ b/content/tag-developers/generic-tag-reference.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/generic-tag-reference.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="generic-tag-reference">Generic Tag Reference</h1>
+
+<p>Struts Generic Tags control the execution flow as pages render.</p>
+
+<h2 id="control-tags">Control Tags</h2>
+
+<p>Controls tags provide the ability to manipulate collections and conditionally produce content.</p>
+
+<blockquote>
+  <p>Please make sure you have read the <a href="tag-syntax.html">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+</blockquote>
+
+<ul>
+  <li><a href="if-tag.html">if</a></li>
+  <li><a href="elseif-tag.html">elseif</a></li>
+  <li><a href="else-tag.html">else</a></li>
+  <li><a href="append-tag.html">append</a></li>
+  <li><a href="generator-tag.html">generator</a></li>
+  <li><a href="iterator-tag.html">iterator</a></li>
+  <li><a href="merge-tag.html">merge</a></li>
+  <li><a href="sort-tag.html">sort</a></li>
+  <li><a href="subset-tag.html">subset</a></li>
+</ul>
+
+<h2 id="data-tags">Data Tags</h2>
+
+<ul>
+  <li><a href="a-tag.html">a</a></li>
+  <li><a href="action-tag.html">action</a></li>
+  <li><a href="bean-tag.html">bean</a></li>
+  <li><a href="date-tag.html">date</a></li>
+  <li><a href="debug-tag.html">debug</a></li>
+  <li><a href="i18n-tag.html">i18n</a></li>
+  <li><a href="include-tag.html">include</a></li>
+  <li><a href="param-tag.html">param</a></li>
+  <li><a href="property-tag.html">property</a></li>
+  <li><a href="push-tag.html">push</a></li>
+  <li><a href="set-tag.html">set</a></li>
+  <li><a href="text-tag.html">text</a></li>
+  <li><a href="url-tag.html">url</a></li>
+</ul>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/generic-tags.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/generic-tags.html b/content/tag-developers/generic-tags.html
new file mode 100644
index 0000000..824ee12
--- /dev/null
+++ b/content/tag-developers/generic-tags.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/generic-tags.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="generic-tags">Generic Tags</h1>
+
+<p>Generic tags are used for controlling the execution flow when the pages render. These tags also allow for data extraction 
+from places other than your action or the value stack, such as <em>Localization</em> , JavaBeans, and including additional URLs 
+or action executions.</p>
+
+<ul>
+  <li>Control Tags provide control flow, such as <code class="highlighter-rouge">if</code>, <code class="highlighter-rouge">else</code>, and <code class="highlighter-rouge">iterator</code></li>
+  <li>Data Tags allow for data manipulation or creation, such as <code class="highlighter-rouge">bean</code>, <code class="highlighter-rouge">push</code>, and <code class="highlighter-rouge">i18n</code></li>
+</ul>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/i18n-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/i18n-tag.html b/content/tag-developers/i18n-tag.html
new file mode 100644
index 0000000..bfbafa9
--- /dev/null
+++ b/content/tag-developers/i18n-tag.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/i18n-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="i18n">i18n</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.I18n</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/i18n.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.I18n</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/if-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/if-tag.html b/content/tag-developers/if-tag.html
new file mode 100644
index 0000000..2b57a26
--- /dev/null
+++ b/content/tag-developers/if-tag.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/if-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="if">if</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<p>Perform basic condition flow. ‘If’ tag could be used by itself or can be followed by zero or more ‘Else if’ Tags followed by zero or one ‘Else’ Tag.</p>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/if.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=struts2/core/src/main/java/org/apache/struts2/components/If.java</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/include-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/include-tag.html b/content/tag-developers/include-tag.html
new file mode 100644
index 0000000..86077ec
--- /dev/null
+++ b/content/tag-developers/include-tag.html
@@ -0,0 +1,234 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/include-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="include">include</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Include</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>(!) How To access parameters</strong></p>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>Parameters are passed as request parameters, so use the ${param.ParamName} notation to access them. Do not use the <strong>property</strong> tag to access parameters in included files.</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/include.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Example</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=java|javadoc=true|url=org.apache.struts2.components.Include</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=exampledescription|lang=none|javadoc=true|url=org.apache.struts2.components.Include</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[04/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/ognl-expression-compilation.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/ognl-expression-compilation.html b/content/tag-developers/ognl-expression-compilation.html
new file mode 100644
index 0000000..1ef39b9
--- /dev/null
+++ b/content/tag-developers/ognl-expression-compilation.html
@@ -0,0 +1,519 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/ognl-expression-compilation.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="ognl-expression-compilation">OGNL Expression Compilation</h1>
+
+<p>This document is meant as a development/integration guide for anyone wanting to use the new OGNL 2.7 features for doing 
+byte code runtime enhancements on OGNL statements.  This is <em>not</em>  meant for general user reference as it covers what 
+are mostly internal API development concerns.</p>
+
+<p>## Basic Usage</p>
+
+<p>By default there isn’t much you have to do to use the new compilation abilities in OGNL.  Following is an example of compiling 
+a simple property expression and invoking it.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">SimpleObject</span> <span class="n">root</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SimpleObject</span><span class="o">();</span>
+<span class="n">OgnlContext</span> <span class="n">context</span> <span class="o">=</span>  <span class="o">(</span><span class="n">OgnlContext</span><span class="o">)</span> <span class="n">Ognl</span><span class="o">.</span><span class="na">createDefaultContext</span><span class="o">(</span><span class="kc">null</span><span class="o">);</span>
+
+<span class="n">Node</span> <span class="n">node</span> <span class="o">=</span>  <span class="o">(</span><span class="n">Node</span><span class="o">)</span> <span class="n">Ognl</span><span class="o">.</span><span class="na">compileExpression</span><span class="o">(</span><span class="n">context</span><span class="o">,</span> <span class="n">root</span><span class="o">,</span> <span class="s">"user.name"</span><span class="o">);</span>
+<span class="n">String</span> <span class="n">userName</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="na">getAccessor</span><span class="o">().</span><span class="na">get</span><span class="o">(</span><span class="n">context</span><span class="o">,</span> <span class="n">root</span><span class="o">);</span>
+</code></pre>
+</div>
+
+<p>You’ll notice that this example references the new <code class="highlighter-rouge">ognl.enhance.ExpressionAccessor</code> class.  This is the interface used 
+to create the enhanced expression versions of any given expression via javassist and should be used to set/get expression 
+values from the compiled versions of the code.  Although the old <code class="highlighter-rouge">Ognl.getValue(node, context, root)</code> method of getting/setting 
+values will correctly detect a compiled expression and use the accessor directly as well,  it’s not going to be as fast 
+as you doing it directly.</p>
+
+<p>## ognl.enhance.OgnlExpressionCompiler</p>
+
+<p>The core class involved in doing the management of these expression compilations by default is <code class="highlighter-rouge">ognl.enhance.ExpressionCompiler</code>, 
+which implements <code class="highlighter-rouge">ognl.enhance.OgnlExpressionCompiler</code>. Although you can in theory use this default implementation it 
+is not recommended for more robust integration points - such as being incorporated within a web framework. The majority 
+of examples here are going to be based around the strategy that Tapestry has used to integrate these new features.</p>
+
+<h3 id="tapestry-ognl-integration">Tapestry OGNL Integration</h3>
+
+<p>There are only small handful of classes/services involved in the Tapestry implementation of these features, so hopefully 
+using them as a reference will help anyone trying to get started with this:</p>
+
+<ul>
+  <li><a href="http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java?view=markup">org.apache.tapestry.services.impl.HiveMindExpressionCompiler</a>
+The Tapestry implementation of <code class="highlighter-rouge">ognl.enhance.OgnlExpressionCompiler</code> - which is a subclass 
+of the <code class="highlighter-rouge">ognl.enhance.ExpressionCompiler</code> default implementation.
+_ <a href="http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionEvaluatorImpl.java?view=markup">org.apache.tapestry.services.impl.ExpressionEvaluatorImpl</a>
+Main service point involved in compiling/evaluating OGNL expressions.  This is the core service that the rest of Tapestry 
+uses when dealing with OGNL expressions.</li>
+  <li><a href="http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionCacheImpl.java?view=markup">org.apache.tapestry.services.impl.ExpressionCacheImpl</a>
+Service responsible for caching OGNL statements where appropriate.</li>
+  <li><a href="http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/binding/ExpressionBinding.java?view=markup">org.apache.tapestry.binding.ExpressionBinding</a>
+Wrapper class which represents a single OGNL binding expression within Tapestry templates/annotations/html/etc. 
+Anything formally specified in an html attribute for components in Tapestry is represented by a specific type of <code class="highlighter-rouge">IBinding</code>,
+<code class="highlighter-rouge">ExpressionBinding</code> represents the type of bindings for OGNL expressions.</li>
+  <li><a href="http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java?view=markup">org.apache.tapestry.bean.BeanProviderPropertyAccessor</a>
+One of the custom <code class="highlighter-rouge">PropertyAccessor</code> classes Tapestry registers with OGNL. This will be a good reference for the new 
+source code generation methods you will need to implement for your <code class="highlighter-rouge">PropertyAccessor</code> classes if you want to compile 
+expressions.</li>
+</ul>
+
+<h3 id="expressionevaluator">ExpressionEvaluator</h3>
+
+<p>If you look at the <code class="highlighter-rouge">ExpressionEvaluator</code> source you’ll see a block of initialization where the <code class="highlighter-rouge">HiveMindExpressionCompiler</code>
+and <code class="highlighter-rouge">OgnlContext</code> pools are setup:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">OgnlRuntime</span><span class="o">.</span><span class="na">setCompiler</span><span class="o">(</span><span class="k">new</span> <span class="n">HiveMindExpressionCompiler</span><span class="o">(</span><span class="n">_classFactory</span><span class="o">));</span>
+
+<span class="n">_contextPool</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GenericObjectPool</span><span class="o">(</span><span class="k">new</span> <span class="n">PoolableOgnlContextFactory</span><span class="o">(</span><span class="n">_ognlResolver</span><span class="o">,</span> <span class="n">_typeConverter</span><span class="o">));</span>
+
+<span class="n">_contextPool</span><span class="o">.</span><span class="na">setMaxActive</span><span class="o">(-</span><span class="mi">1</span><span class="o">);</span>
+<span class="n">_contextPool</span><span class="o">.</span><span class="na">setMaxIdle</span><span class="o">(-</span><span class="mi">1</span><span class="o">);</span>
+<span class="n">_contextPool</span><span class="o">.</span><span class="na">setMinEvictableIdleTimeMillis</span><span class="o">(</span><span class="n">POOL_MIN_IDLE_TIME</span><span class="o">);</span>
+<span class="n">_contextPool</span><span class="o">.</span><span class="na">setTimeBetweenEvictionRunsMillis</span><span class="o">(</span><span class="n">POOL_SLEEP_TIME</span><span class="o">);</span>
+</code></pre>
+</div>
+
+<p>Some things like null handlers/property accessor configuration has been left out but you should have enough there to get 
+a good idea of what is going on.  Because creating new OgnlContext objects for every expression evaluation can be needlessly 
+expensive Tapestry uses the Apache commons-pool library to manage pooling of these instances.  It is recommended that 
+you do the same where you can. You will also notice in other portions of the source some new method calls made on 
+<code class="highlighter-rouge">OgnlRuntime</code>:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">OgnlRuntime</span><span class="o">.</span><span class="na">clearCache</span><span class="o">();</span>
+<span class="n">Introspector</span><span class="o">.</span><span class="na">flushCaches</span><span class="o">();</span>
+</code></pre>
+</div>
+
+<p>The OgnlRuntime class stores static <code class="highlighter-rouge">Map</code>-like instances of reflection meta cache information for all objects evaluated 
+in OGNL expressions.  The new <code class="highlighter-rouge">clearCache</code> method clears these caches out as the memory footprint can get quite large 
+after a while. How often/when to call this will largely depend on how your framework works - just keep in mind that 
+calling it too often will have a big impact on runtime performance of your app if you are doing normal application 
+development sort of things with it.</p>
+
+<h3 id="hivemindexpressioncompiler">HiveMindExpressionCompiler</h3>
+
+<p>Perhaps the most important class to examine is Tapestrys implementation of <code class="highlighter-rouge">OgnlExpressionCompiler</code>. This class still 
+extends the default <code class="highlighter-rouge">ExpressionCompiler</code> provided by OGNL - but does a few more things that can’t be made generic enough 
+to live in the default implementation.</p>
+
+<p>One of these important differences is how Javassist is used to compile the expressions and the ClassLoader/ClassResolver 
+it uses.  Because these expressions are being compiled against what are already Javassist enhanced Tapestry component 
+class instances this implementation needed to re-use existing hivemind Javassist services so that these enhanced classes 
+could be correctly resolved while OGNL is evaluating them.</p>
+
+<p>If you don’t have a need to provide this kind of classloading functionality you will probably still need to modify 
+at least how the javassist <code class="highlighter-rouge">ClassPool</code> is being managed in your own implementations. The internal functionality of that 
+library is such that the memory consumption of the pool is very large and will get unwieldy especially in development 
+of web apps.  Tapestry has a special state that users are used to which is known as “disable caching” - more or less 
+meaning that javassist enhancements happen for every request instead of only once.</p>
+
+<p>Another very important piece of logic that this class handles is the generation of “fail safe” getters/setters when 
+expressions just can’t be compiled because of either internal errors or a specific syntax type used isn’t yet able to support 
+javassist compilations.  This logic can sometimes get tricky in that in many instances OGNL expressions won’t be compilable 
+because the full expression contains a null reference.  The basic idea is that the compiler keeps trying to compile these 
+kinds of expressions until it either gets a fatal exception thrown or the full expression is able to be resolved. 
+For example, the following expression would throw a <code class="highlighter-rouge">UnsupportedCompilationException</code> if the “user” object returned 
+was null - resulting in no direct compilation being done at all:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>"user.firstName"
+</code></pre>
+</div>
+
+<p>That doesn’t mean that the user object might not be resolvable the next time this expression is invoked though, 
+so the next time the compiler tries it may succeed in which case the whole expression is enhanced and the new <code class="highlighter-rouge">ExpressionAccessor</code>
+instance is attached to the root <code class="highlighter-rouge">Node</code> object by calling <code class="highlighter-rouge">SimpleNode.setAccessor(newInstance)</code>.</p>
+
+<p>The fail safe logic is there for expressions that are likely to never be resolvable for one reason or another. In these 
+instances a <code class="highlighter-rouge">ExpressionAccessor</code> class instance is still created - with the major difference being that instead of pure 
+java object expressions being compiled the get/set methods on the instance just call back to the standard OGNL 
+getValue/setValue methods:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="n">Object</span> <span class="nf">get</span><span class="p">(</span><span class="n">OgnlContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">Object</span> <span class="n">root</span><span class="o">)</span>
+<span class="o">{</span>
+  <span class="k">return</span> <span class="n">_node</span><span class="o">.</span><span class="na">getValue</span><span class="o">(</span><span class="err">$</span><span class="mi">1</span><span class="o">,</span> <span class="err">$</span><span class="mi">2</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>The <code class="highlighter-rouge">$1, $2</code> references are Javassist constructs which allow you to specify the first and second argument passed in 
+to the calling method.</p>
+
+<h3 id="expressionbinding">ExpressionBinding</h3>
+
+<p>As stated previously, this class represents a single OGNL expression in Tapestry when used directly in html templates 
+- such as:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;div</span> <span class="na">jwcid=</span><span class="s">"@Input"</span> <span class="na">value=</span><span class="s">"ognl:user.firstName"</span> <span class="nt">/&gt;</span>
+</code></pre>
+</div>
+
+<p>What you will want to examine in this class is how it deals with incrementally attempting expression evaluations using 
+the local members <code class="highlighter-rouge">_writeFailed, _accessor</code>.  Looking through the source of this implementation will probably be the best 
+documentation available - but keep in mind that in many instances this object also has to deal with the possibility 
+that a write statement may never happen.</p>
+
+<h3 id="beanproviderpropertyaccessor--custom-propertyaccessor-implementations">BeanProviderPropertyAccessor / Custom PropertyAccessor implementations</h3>
+
+<p>Besides the <code class="highlighter-rouge">OgnlExpressionCompiler</code> logic this will probably be the second most impactual area people will have to deal 
+with in terms of having to write new code.  In this specific instance there are three new <code class="highlighter-rouge">PropertyAccessor</code> methods 
+you must implement in order to compile your expressions:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="n">Class</span> <span class="nf">getPropertyClass</span><span class="p">(</span><span class="n">OgnlContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">Object</span> <span class="n">target</span><span class="o">,</span> <span class="n">Object</span> <span class="n">name</span><span class="o">)</span>
+<span class="o">{</span>
+  <span class="n">IBeanProvider</span> <span class="n">provider</span> <span class="o">=</span> <span class="o">(</span><span class="n">IBeanProvider</span><span class="o">)</span><span class="n">target</span><span class="o">;</span>
+  <span class="n">String</span> <span class="n">beanName</span> <span class="o">=</span> <span class="o">((</span><span class="n">String</span><span class="o">)</span><span class="n">name</span><span class="o">).</span><span class="na">replaceAll</span><span class="o">(</span><span class="s">"\""</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>
+
+  <span class="k">if</span> <span class="o">(</span><span class="n">provider</span><span class="o">.</span><span class="na">canProvideBean</span><span class="o">(</span><span class="n">beanName</span><span class="o">))</span>
+    <span class="k">return</span> <span class="n">provider</span><span class="o">.</span><span class="na">getBean</span><span class="o">(</span><span class="n">beanName</span><span class="o">).</span><span class="na">getClass</span><span class="o">();</span>
+
+  <span class="k">return</span> <span class="kd">super</span><span class="o">.</span><span class="na">getPropertyClass</span><span class="o">(</span><span class="n">context</span><span class="o">,</span> <span class="n">target</span><span class="o">,</span> <span class="n">name</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="kd">public</span> <span class="n">String</span> <span class="nf">getSourceAccessor</span><span class="p">(</span><span class="n">OgnlContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">Object</span> <span class="n">target</span><span class="o">,</span> <span class="n">Object</span> <span class="n">name</span><span class="o">)</span>
+<span class="o">{</span>
+   <span class="n">IBeanProvider</span> <span class="n">provider</span> <span class="o">=</span> <span class="o">(</span><span class="n">IBeanProvider</span><span class="o">)</span><span class="n">target</span><span class="o">;</span>
+   <span class="n">String</span> <span class="n">beanName</span> <span class="o">=</span> <span class="o">((</span><span class="n">String</span><span class="o">)</span><span class="n">name</span><span class="o">).</span><span class="na">replaceAll</span><span class="o">(</span><span class="s">"\""</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>
+
+   <span class="k">if</span> <span class="o">(</span><span class="n">provider</span><span class="o">.</span><span class="na">canProvideBean</span><span class="o">(</span><span class="n">beanName</span><span class="o">))</span> <span class="o">{</span>
+
+       <span class="n">Class</span> <span class="n">type</span> <span class="o">=</span> <span class="n">OgnlRuntime</span><span class="o">.</span><span class="na">getCompiler</span><span class="o">().</span><span class="na">getInterfaceClass</span><span class="o">(</span><span class="n">provider</span><span class="o">.</span><span class="na">getBean</span><span class="o">(</span><span class="n">beanName</span><span class="o">).</span><span class="na">getClass</span><span class="o">());</span>
+
+       <span class="n">ExpressionCompiler</span><span class="o">.</span><span class="na">addCastString</span><span class="o">(</span><span class="n">context</span><span class="o">,</span> <span class="s">"(("</span> <span class="o">+</span> <span class="n">type</span><span class="o">.</span><span class="na">getName</span><span class="o">()</span> <span class="o">+</span> <span class="s">")"</span><span class="o">);</span>
+
+       <span class="n">context</span><span class="o">.</span><span class="na">setCurrentAccessor</span><span class="o">(</span><span class="n">IBeanProvider</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+       <span class="n">context</span><span class="o">.</span><span class="na">setCurrentType</span><span class="o">(</span><span class="n">type</span><span class="o">);</span>
+
+       <span class="k">return</span> <span class="s">".getBean("</span> <span class="o">+</span> <span class="n">name</span> <span class="o">+</span> <span class="s">"))"</span><span class="o">;</span>
+   <span class="o">}</span>
+
+   <span class="k">return</span> <span class="kd">super</span><span class="o">.</span><span class="na">getSourceAccessor</span><span class="o">(</span><span class="n">context</span><span class="o">,</span> <span class="n">target</span><span class="o">,</span> <span class="n">name</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="kd">public</span> <span class="n">String</span> <span class="nf">getSourceSetter</span><span class="p">(</span><span class="n">OgnlContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">Object</span> <span class="n">target</span><span class="o">,</span> <span class="n">Object</span> <span class="n">name</span><span class="o">)</span>
+<span class="o">{</span>
+  <span class="k">throw</span> <span class="k">new</span> <span class="n">UnsupportedCompilationException</span><span class="o">(</span><span class="s">"Can't set beans on IBeanProvider."</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>Although this example may not provide with all of the possible use cases you may need to learn to properly implement 
+these methods in your own <code class="highlighter-rouge">PropertyAccessor</code> implementations - the built in OGNL versions like <code class="highlighter-rouge">ObjectPropertyAccessor</code>, 
+<code class="highlighter-rouge">MapPropertyAccessor</code>, <code class="highlighter-rouge">ListPropertyAccessor</code>, etc should provide more than enough data to work from.</p>
+
+<p>The most important part of the above logic you will want to look at is in how the new <code class="highlighter-rouge">OgnlContext</code> methods for setting 
+object/accessor types are being set:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">context</span><span class="o">.</span><span class="na">setCurrentAccessor</span><span class="o">(</span><span class="n">IBeanProvider</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+<span class="n">context</span><span class="o">.</span><span class="na">setCurrentType</span><span class="o">(</span><span class="n">type</span><span class="o">);</span>
+</code></pre>
+</div>
+
+<p>This meta information is used by the <code class="highlighter-rouge">OgnlExpressionCompiler</code> to correctly cast your specific expression object types 
+during compilation. This process of casting/converting in to and out of native types is the most complicated part of this 
+new logic and also the source of the greatest number of bugs reported in the OGNL jira.</p>
+
+<p>In this property accessor example the goal is to turn general statements like <code class="highlighter-rouge">beans.emailValidator</code> in to their pure 
+source form - which would look something like this when all is said and done:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="o">((</span><span class="n">ValidatingBean</span><span class="o">)</span><span class="n">beanProvider</span><span class="o">.</span><span class="na">getBean</span><span class="o">(</span><span class="s">"emailValidator"</span><span class="o">))</span>
+</code></pre>
+</div>
+
+<p>There is also the ever important cast handling which you must do:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">Class</span> <span class="n">type</span> <span class="o">=</span> <span class="n">OgnlRuntime</span><span class="o">.</span><span class="na">getCompiler</span><span class="o">().</span><span class="na">getInterfaceClass</span><span class="o">(</span><span class="n">provider</span><span class="o">.</span><span class="na">getBean</span><span class="o">(</span><span class="n">beanName</span><span class="o">).</span><span class="na">getClass</span><span class="o">());</span>
+
+<span class="n">ExpressionCompiler</span><span class="o">.</span><span class="na">addCastString</span><span class="o">(</span><span class="n">context</span><span class="o">,</span> <span class="s">"(("</span> <span class="o">+</span> <span class="n">type</span><span class="o">.</span><span class="na">getName</span><span class="o">()</span> <span class="o">+</span> <span class="s">")"</span><span class="o">);</span>
+</code></pre>
+</div>
+
+<p>In this example the <code class="highlighter-rouge">PropertyAccessor</code> is trying to determine the class type and manually adding the cast string for 
+the specific type to the overall statement by invoking the utility method <code class="highlighter-rouge">addCastString(OgnlContext, String)</code> on 
+<code class="highlighter-rouge">ExpressionCompiler</code>. In many instances of expression compilation you might also be dealing with unknown method calls, 
+where the more preferred way to do this kind of logic would be something like this: (taken from the OGNL 
+<code class="highlighter-rouge">ObjectPropertyAccessor</code> implementation)</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">Method</span> <span class="n">m</span> <span class="o">=</span> <span class="o">...(</span><span class="n">various</span> <span class="n">reflection</span> <span class="n">gynamistics</span> <span class="n">used</span> <span class="n">to</span> <span class="n">find</span> <span class="n">a</span> <span class="n">java</span><span class="o">.</span><span class="na">reflect</span><span class="o">.</span><span class="na">Method</span> <span class="n">instance</span><span class="o">)</span>
+
+<span class="n">context</span><span class="o">.</span><span class="na">setCurrentType</span><span class="o">(</span><span class="n">m</span><span class="o">.</span><span class="na">getReturnType</span><span class="o">());</span>
+<span class="n">context</span><span class="o">.</span><span class="na">setCurrentAccessor</span><span class="o">(</span><span class="n">OgnlRuntime</span><span class="o">.</span><span class="na">getCompiler</span><span class="o">().</span><span class="na">getSuperOrInterfaceClass</span><span class="o">(</span><span class="n">m</span><span class="o">,</span> <span class="n">m</span><span class="o">.</span><span class="na">getDeclaringClass</span><span class="o">()));</span>
+</code></pre>
+</div>
+
+<p>When dealing with method calls it is very important that you do this specific kind of type setting on the <code class="highlighter-rouge">OgnlContext</code> 
+class so that the casting done on your statements (which happens outside of the <code class="highlighter-rouge">ObjectPropertyAccessor</code> in this instance) 
+can be done on the highest level interface defining that method.  This becomes important when you are dealing with expressions 
+that you would like to re-use against different object instances.  For example, suppose we had an ognl expression like 
+this (for Tapestry):</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>user.firstName
+</code></pre>
+</div>
+
+<p>and the object it was compiled against was an instance of something looking like this:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">abstract</span> <span class="n">LoginPage</span> <span class="kd">extends</span> <span class="n">BasePage</span> <span class="kd">implements</span> <span class="n">UserPermissions</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">abstract</span> <span class="n">User</span> <span class="n">getUser</span><span class="o">();</span>
+
+<span class="o">}</span>
+
+<span class="o">..</span>
+<span class="cm">/**
+ * Interface for any page/component that holds references to the current system
+ * User.
+ */</span>
+<span class="kd">public</span> <span class="kd">interface</span> <span class="nc">UserPermissions</span> <span class="o">{</span>
+   <span class="n">User</span> <span class="n">getUser</span><span class="o">();</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p><code class="highlighter-rouge">BasePage</code> is a Tapestry specific class which is unimportant in this example.  What is important to know is that if we 
+had done something like this in the previous context setting example:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">context</span><span class="o">.</span><span class="na">setCurrentType</span><span class="o">(</span><span class="n">m</span><span class="o">.</span><span class="na">getReturnType</span><span class="o">());</span>
+<span class="n">context</span><span class="o">.</span><span class="na">setCurrentAccessor</span><span class="o">(</span><span class="n">m</span><span class="o">.</span><span class="na">getDeclaringClass</span><span class="o">());</span>
+</code></pre>
+</div>
+
+<p>It would have resulted in a compiled expression of:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">void</span> <span class="nf">get</span><span class="p">(</span><span class="n">OgnlContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">Object</span> <span class="n">root</span><span class="o">)</span> <span class="o">{</span>
+  <span class="k">return</span> <span class="o">((</span><span class="n">LoginPage</span><span class="o">)</span><span class="n">root</span><span class="o">).</span><span class="na">getUser</span><span class="o">();</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>This is undesirable in situations where you would like to re-use OGNL expressions across many different class instances 
+(which is what Tapestry does via the <code class="highlighter-rouge">ExpressionCacheImpl</code> listed above).  The better/more re-usable compiled version 
+should really look like:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">void</span> <span class="nf">get</span><span class="p">(</span><span class="n">OgnlContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">Object</span> <span class="n">root</span><span class="o">)</span> <span class="o">{</span>
+  <span class="k">return</span> <span class="o">((</span><span class="n">UserPermissions</span><span class="o">)</span><span class="n">root</span><span class="o">).</span><span class="na">getUser</span><span class="o">();</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>These are the more delicate parts of the compiler API that the majority of people will need to worry about during any 
+integration efforts.</p>
+
+<p>## Known Issues / Limitations</p>
+
+<h3 id="compiler-errors">Compiler Errors</h3>
+
+<p>Despite the substantially large number of unit tests set up and thorough usage of many different 
+types of expressions Tapestry users are still currently running in to fatal/non caught runtime errors when some of their 
+OGNL expressions are compiled.  In some instances these errors are blockers and they must either wait for someone 
+to fix the bug (after being posted to <a href="http://jira.opensymphony.com/browse/OGNL">http://jira.opensymphony.com/browse/OGNL</a> 
+correctly) or re-work their expression to get around the error.  I (jesse) generally try to fix these reported errors
+within a day or two (or sooner) when I can and immediately deploy the fixes to the OGNL snapshot maven2 repository.<br />
+This doesn’t mean that the vast majority of expressions won’t compile fine, but it is something to keep in mind when 
+you decide how to integrate the compiler logic in to your own framework.</p>
+
+<h3 id="compile-vs-normal-expression-evaluation">Compile vs. normal expression evaluation</h3>
+
+<p>The current Tapestry implementation compiles OGNL expressions in both  development AND production modes.  This has 
+the undesirable side effect of causing needless multiple method invocations on objects when compiling as well as the general 
+overhead of performing compilations at all when people are just developing applications and not serving them in production 
+environments.  It is hoped that when OGNL becomes final this special development mode can go back to using normal OGNL 
+expression evaluation during development and save compilation for production environments,  but until then we’ve been 
+worried about giving people false positives when testing their applications.  Meaning - something may evaluate just fine 
+when using</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">Ognl</span><span class="o">.</span><span class="na">getValue</span><span class="o">(</span><span class="n">OgnlContext</span><span class="o">,</span> <span class="n">Object</span> <span class="n">root</span><span class="o">,</span> <span class="n">String</span> <span class="n">expression</span>
+</code></pre>
+</div>
+
+<p>but fail completely when they deploy their app to production and the compiler kicks in.  If you framework doesn’t handle 
+separate modes or have this kind of state set up it is something to keep in mind.  The number of JIRA issues reported 
+has gone way down since this all started but they do still trickle in which is enough to know that things aren’t yet 100% 
+reliable.  I’m sure the plethora of Struts/WebWork/etc users available should be enough to iron out any remaining issues 
+found but it’s something to keep in mind.</p>
+
+<h3 id="snapshot-repository">Snapshot Repository</h3>
+
+<p>The current maven2 location of the OGNL development/snapshot release are all made to <a href="http://opencomponentry.com/repository/m2-snapshot-repo/">http://opencomponentry.com/repository/m2-snapshot-repo/</a>, 
+while releases go out to ibiblio as per normal.  If someone has a better place for these release to be made please feel free to contact jesse ( jkuhnert at gmail.com) with accessor information / instructions.</p>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/ognl.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/ognl.html b/content/tag-developers/ognl.html
new file mode 100644
index 0000000..823d232
--- /dev/null
+++ b/content/tag-developers/ognl.html
@@ -0,0 +1,320 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/ognl.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 class="no_toc" id="ognl">OGNL</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#collections-maps-lists-sets" id="markdown-toc-collections-maps-lists-sets">Collections (Maps, Lists, Sets)</a></li>
+  <li><a href="#lambda-expressions" id="markdown-toc-lambda-expressions">Lambda Expressions</a></li>
+</ul>
+
+<p>OGNL is the Object Graph Navigation Language (see [http://commons.apache.org/proper/commons-ognl/] for the full 
+documentation of OGNL). Here, we will cover a few examples of OGNL features that co-exist with the framework. To review 
+basic concepts, refer to <a href="ognl-basics.html">OGNL Basics</a>.</p>
+
+<p>The framework uses a standard naming context to evaluate OGNL expressions. The top level object dealing with OGNL is 
+a Map (usually referred as a context map or context). OGNL has a notion of there being a root (or default) object within 
+the context. In expression, the properties of the root object can be referenced without any special “marker” notion. 
+References to other objects are marked with a pound sign (<code class="highlighter-rouge">#</code>).</p>
+
+<p>The framework sets the OGNL context to be our ActionContext, and the value stack to be the OGNL root object. 
+(The value stack is a set of several objects, but to OGNL it appears to be a single object.) Along with the value stack, 
+the framework places other objects in the ActionContext, including Maps representing the application, session, 
+and request contexts. These objects coexist in the ActionContext, alongside the value stack (our OGNL root).</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>                     |
+                     |--application
+                     |
+                     |--session
+       context map---|
+                     |--value stack(root)
+                     |
+                     |--action (the current action)
+                     |
+                     |--request
+                     |
+                     |--parameters
+                     |
+                     |--attr (searches page, request, session, then application scopes)
+                     |
+</code></pre>
+</div>
+
+<p>The Action instance is always pushed onto the value stack. Because the Action is on the stack, and the stack is 
+the OGNL root, references to Action properties can omit the <code class="highlighter-rouge">#</code> marker. But, to access other objects in the ActionContext, 
+we must use the <code class="highlighter-rouge">#</code> notation so OGNL knows not to look in the root object, but for some other object in the ActionContext.</p>
+
+<p><strong>Referencing an Action property</strong></p>
+
+<pre><code class="language-jsp">&lt;s:property value="postalCode"/&gt;
+</code></pre>
+
+<p>Other (non-root) objects in the ActionContext can be rendered use the <code class="highlighter-rouge">#</code> notation.</p>
+
+<pre><code class="language-jsp">&lt;s:property value="#session.mySessionPropKey"/&gt; or
+&lt;s:property value="#session['mySessionPropKey']"/&gt; or
+&lt;s:property value="#request['myRequestPropKey']"/&gt;
+</code></pre>
+
+<p>The ActionContext is also exposed to Action classes via a static method but you <strong>should not</strong> use this approach. 
+Safer is to use one of the <code class="highlighter-rouge">*Aware</code> interafces.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="n">ActionContext</span><span class="o">.</span><span class="na">getContext</span><span class="o">().</span><span class="na">getSession</span><span class="o">().</span><span class="na">put</span><span class="o">(</span><span class="s">"mySessionPropKey"</span><span class="o">,</span> <span class="n">mySessionObject</span><span class="o">);</span>
+</code></pre>
+</div>
+
+<p>You can also put expression for attributes that don’t support dynamic content, like below:</p>
+
+<pre><code class="language-jsp">&lt;c:set var="foo" value="bar" scope="request"/&gt;
+&lt;s:textfield name="username" label="%{#request.foo}" /&gt;
+</code></pre>
+
+<h2 id="collections-maps-lists-sets">Collections (Maps, Lists, Sets)</h2>
+
+<p>Dealing with Collections (Maps, Lists, and Sets) in the framework comes often, so below please there are a few examples 
+using the select tag. The <a href="http://commons.apache.org/proper/commons-ognl/language-guide.html#Collection_Construction">OGNL documentation</a>
+also includes some examples.</p>
+
+<p>Syntax for list: <code class="highlighter-rouge"><span class="p">{</span><span class="err">e1,e2,e3</span><span class="p">}</span></code>. This idiom creates a List containing the String “name1”, “name2” and “name3”. It also 
+selects “name2” as the default value.</p>
+
+<pre><code class="language-jsp">&lt;s:select label="label" name="name" list="{'name1','name2','name3'}" value="%{'name2'}" /&gt;
+</code></pre>
+
+<p>Syntax for map: <code class="highlighter-rouge">#{key1:value1,key2:value2}</code>. This idiom creates a map that maps the string “foo” to the string 
+“foovalue” and “bar” to the string “barvalue”:</p>
+
+<pre><code class="language-jsp">&lt;s:select label="label" name="name" list="#{'foo':'foovalue', 'bar':'barvalue'}" /&gt;
+</code></pre>
+
+<p>To determine if an element exists in a Collection, use the operations <code class="highlighter-rouge">in</code> and <code class="highlighter-rouge">not in</code>.</p>
+
+<pre><code class="language-jsp">&lt;s:if test="'foo' in {'foo','bar'}"&gt;
+   muhahaha
+&lt;/s:if&gt;
+&lt;s:else&gt;
+   boo
+&lt;/s:else&gt;
+
+&lt;s:if test="'foo' not in {'foo','bar'}"&gt;
+   muhahaha
+&lt;/s:if&gt;
+&lt;s:else&gt;
+   boo
+&lt;/s:else&gt;
+</code></pre>
+
+<p>To select a subset of a collection (called projection), use a wildcard within the collection.</p>
+
+<ul>
+  <li><code class="highlighter-rouge">?</code> - All elements matching the selection logic</li>
+  <li><code class="highlighter-rouge">^</code> - Only the first element matching the selection logic</li>
+  <li><code class="highlighter-rouge">$</code> - Only the last element matching the selection logic</li>
+</ul>
+
+<p>To obtain a subset of just male relatives from the object person:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>person.relatives.{? #this.gender == 'male'}
+</code></pre>
+</div>
+
+<h2 id="lambda-expressions">Lambda Expressions</h2>
+
+<p>OGNL supports basic lamba expression syntax enabling you to write simple functions.
+(Dedicated to all you math majors who didn’t think you would ever see this one again.)</p>
+
+<p>Fibonacci: if n==0 return 0; elseif n==1 return 1; else return fib(n-2)+fib(n-1);
+ fib(0) = 0
+ fib(1) = 1
+ fib(11) = 89</p>
+
+<p><strong>How the expression works</strong></p>
+
+<blockquote>
+  <p>The lambda expression is everything inside the square brackets. The <code class="highlighter-rouge">#this</code> variable holds the argument to the expression, 
+which in the following example is the number 11 (the code after the square-bracketed lamba expression, <code class="highlighter-rouge">#fib(11)</code>).</p>
+</blockquote>
+
+<pre><code class="language-jsp">&lt;s:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" /&gt;
+</code></pre>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/param-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/param-tag.html b/content/tag-developers/param-tag.html
new file mode 100644
index 0000000..45d18c8
--- /dev/null
+++ b/content/tag-developers/param-tag.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/param-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="param">param</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Param</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/param.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.Param</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=exampledescription|javadoc=true|url=org.apache.struts2.components.Param</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/property-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/property-tag.html b/content/tag-developers/property-tag.html
new file mode 100644
index 0000000..460e6a1
--- /dev/null
+++ b/content/tag-developers/property-tag.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/property-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="property">property</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Property</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/property.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.Property</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=exampledescription|lang=none|javadoc=true|url=org.apache.struts2.components.Property</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[02/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/tag-reference.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/tag-reference.html b/content/tag-developers/tag-reference.html
new file mode 100644
index 0000000..11815b9
--- /dev/null
+++ b/content/tag-developers/tag-reference.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/tag-reference.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="tag-reference">Tag Reference</h1>
+
+<p><a href="generic-tags.html">Generic Tags</a></p>
+
+<p><a href="ui-tags.html">UI Tags</a></p>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/tag-syntax.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/tag-syntax.html b/content/tag-developers/tag-syntax.html
new file mode 100644
index 0000000..462f86f
--- /dev/null
+++ b/content/tag-developers/tag-syntax.html
@@ -0,0 +1,448 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/tag-syntax.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="tag-syntax">Tag Syntax</h1>
+
+<p>The tags are designed to display dynamic data. To create a input field that displays the property “postalCode”, we’d pass the String “postalCode” to the textfield tag.</p>
+
+<p><strong>Creating a dynamic input field</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:textfield name="postalCode"/&gt;
+
+</code></pre>
+</div>
+
+<p>If there is a “postalCode” property on the value stack, its value will be set to the input field. When the field is submitted back to the framework, the value of the control will be set back to the “postalCode” property.</p>
+
+<p>Sometimes, we want to pass the dynamic data to a tag. For example, we might want to display a label with the input field, and we might want to obtain the label from the application’s messages resources. Accordingly, the framework will parse expressions found in the tag attributes, so that we can merge dynamic data into the tag attributes at runtime. The expression escape sequence is “%{ … }”.  Any text embedded in the escape sequence is evalulated as an expression.</p>
+
+<p><strong>Using an expression to set the label</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:textfield key="postalCode.label" name="postalCode"/&gt;
+
+</code></pre>
+</div>
+
+<p>The expression language (<a href="#PAGE_14198">OGNL</a>) lets us call methods and evaluate properties. The method</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>getText
+</code></pre>
+</div>
+<p>is provided by ActionSupport, which is the base class for most Actions. Since the Action is on the stack, we can call any of its methods from an expression, including</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>getText
+</code></pre>
+</div>
+<p>.</p>
+
+<p>####Non-String Attributes####</p>
+
+<p>The HTTP protocol is text-based, but some tags have non-String attribute types, like</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>bool
+</code></pre>
+</div>
+<p>or</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>int
+</code></pre>
+</div>
+<p>. To make using non-String attributes intuitative, the framework evaulates <strong>all</strong> non-String attributes as an expression. In this case, you do not need to use the escape notation. (But, if you do anyway , the framework will just strip it off.)</p>
+
+<p><strong>Evaluating booleans</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:select key="state.label" name="state" multiple="true"/&gt;
+
+</code></pre>
+</div>
+
+<p>Since the attribute</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>multiple
+</code></pre>
+</div>
+<p>maps to a boolean property, the framework does not interpret the value as a String. The value is evaluated as an expression and automtically converted to a boolean.</p>
+
+<p>Since it’s easy to forget which attributes are String and which are non-String, you can still use the escape notation.</p>
+
+<p><strong>Evaluating booleans (verbose)</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:select key="state.label" name="state" multiple="%{true}"/&gt;
+
+</code></pre>
+</div>
+
+<p><strong>Evaluating booleans (with property)</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:select key="state.label" name="state" multiple="allowMultiple"/&gt;
+
+</code></pre>
+</div>
+
+<p><strong>Evaluating booleans (verbose with property)</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:select key="state.label" name="state" multiple="%{allowMultiple}"/&gt;
+
+</code></pre>
+</div>
+
+<p>####value is an Object!####</p>
+
+<p>Most often, the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>attribute is set automatically, since</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>name
+</code></pre>
+</div>
+<p>attribute usually tells the framework which property to call to set the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>. But, if there is a reason to set the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>directly, be advised that</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p><strong>is an Object</strong><strong><em>NOT</em> **</strong>a String**.</p>
+
+<p>(!)  Since</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>is not a String, whatever is passed to</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value
+</code></pre>
+</div>
+<p>is evaluated as an expression - <strong>NOT</strong> a String literal.</p>
+
+<p><strong>Probably wrong!</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:textfield key="state.label" name="state" value="ca"/&gt;
+
+</code></pre>
+</div>
+
+<p>If a</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>textfield
+</code></pre>
+</div>
+<p>is passed the value attribute</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>"ca"
+</code></pre>
+</div>
+<p>, the framework will look for a property named</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>getCa
+</code></pre>
+</div>
+<p>. Generally, this is not what we mean. What we mean to do is pass a literal String. In the expression language, literals are placed within quotes</p>
+
+<p><strong>Passing a literal value the right way</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:textfield key="state.label" name="state" value="%{'ca'}" /&gt;
+
+</code></pre>
+</div>
+
+<p>Another approach would be to use the idiom</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value="'ca'"
+</code></pre>
+</div>
+<p>, but, in this case, using the expression notation is recommended.</p>
+
+<p>Boiled down, the tag attributes are evaluated using three rules.</p>
+
+<ol>
+  <li>
+    <p>All <em>String</em>  attribute types are <em>parsed</em>  for the “%{ … }” notation.</p>
+  </li>
+  <li>
+    <p>All <em>non-String</em>  attribute  types are <strong>not</strong> parsed, but evaluated directly as an expression</p>
+  </li>
+  <li>
+    <p>The exception to rule #2 is that if the <em>non-String</em>  attribute uses the escape notion “%{}”, the notation is ignored as redundant, and the content evaluated.</p>
+  </li>
+</ol>
+
+<p>Please remember about <em>altSyntax</em>  option that can change when value is evaluated as an expression - <em>Alt Syntax</em></p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>####Expression Language Notations####</p>
+
+<p>|&lt;p&gt;Username: ${user.username}&lt;/p&gt;| A JavaBean object in a standard context in Freemarker, Velocity, or JSTL EL (Not OGNL). |
+|—————————————–|——————————————————————————————|
+|<s:textfield name="username"></s:textfield>| A username property on the Value Stack. |
+|<s:url id="es" action="Hello">\</s:url></p>
+<s:param name="request_locale">\
+    es\
+  </s:param>
+<p>\
+&lt;/s:url&gt;\</p>
+<s:a href="%{es}">Espanol</s:a>
+<p>|  Another way to refer to a property placed on the Value Stack. |
+|&lt;s:property\
+  value=”#session.user.username” /&gt;| The username property of the User object in the Session context. |
+|&lt;s:select\
+  label=”FooBar” name=”foo”\
+  list=”#{‘username’:’trillian’,\
+    ‘username’:’zaphod’}” /&gt;|  A static Map, as in put(“username”,”trillian”). |</p>
+
+<p>####Disallowed property names####</p>
+
+<p>The following names of property are disallowed:</p>
+
+<ul>
+  <li>
+    <p>parameters</p>
+  </li>
+  <li>
+    <p>application</p>
+  </li>
+  <li>
+    <p>session</p>
+  </li>
+  <li>
+    <p>struts</p>
+  </li>
+  <li>
+    <p>request</p>
+  </li>
+  <li>
+    <p>servletRequest</p>
+  </li>
+  <li>
+    <p>servletResponse</p>
+  </li>
+</ul>
+
+<p>The below code will not work:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:iterator value="parameters"/&gt;
+
+</code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+public class MyAction {
+
+    private String[] parameters;
+
+    public String[] getParameters() {
+        return parameters;
+    }
+
+}
+
+</code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/template-loading.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/template-loading.html b/content/tag-developers/template-loading.html
new file mode 100644
index 0000000..147d73e
--- /dev/null
+++ b/content/tag-developers/template-loading.html
@@ -0,0 +1,337 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/template-loading.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="template-loading">Template Loading</h1>
+
+<p>Templates are loaded first by searching the application and then by searching the classpath. If a template needs to be overridden, an edited copy can be placed in the application, so that is found first.</p>
+
+<p><strong>(i) One for all</strong></p>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>FreeMarker is the default templating engine. The FreeMarker templates are used regardless of what format the view may use. Internally, the JSP, FTL, Velocity tags are all rendered using FreeMarker.</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<p><strong>Template and Themes</strong></p>
+
+<p>Templates are loaded based the template directory and theme name (see <a href="#PAGE_14016">Selecting Themes</a>). The template directory is defined by the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts.ui.templateDir
+</code></pre>
+</div>
+<p>property in <em>struts.properties</em>  (defaults to</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>template
+</code></pre>
+</div>
+<p>). If a tag is using the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>xhtml
+</code></pre>
+</div>
+<p>theme, the following two locations will be searched (in this order):</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>In the application</th>
+      <th>/template/xhtml/template.ftl</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>In the classpath</td>
+      <td>/template/xhtml/template.ftl</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>(!)  For performance reasons, you may want to prefer the first location, although the second one is more flexible. See <em>Performance Tuning</em>  for a discussion on this topic.</p>
+
+<p><strong>Overriding Templates</strong></p>
+
+<p>The default templates provided in the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts-core.jar
+</code></pre>
+</div>
+<p>should suit the needs of many applications. However, if a template needs to be modified, it’s easy to plug in a new version. Extract the template you need to change from the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts-core.jar
+</code></pre>
+</div>
+<p>, make the modifications, and save the updated copy to</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>/template/$theme/$template.ftl
+</code></pre>
+</div>
+<p>. If you are using the xhmtl theme and need to change how the select tags render, edit that template and save it to</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>/template/xhtml/select.ftl
+</code></pre>
+</div>
+<p>.</p>
+
+<p>(!)  It is easier and better to edit and override an existing template than provide a new one of your own.</p>
+
+<p><strong>Altering Template Loading Behaviour</strong></p>
+
+<p>It is possible to load template from other locations, like the file system or a URL. Loading templates from alternate locations can be useful not only for tags, but for custom results. For details, see the <a href="#PAGE_14078">FreeMarker</a> documentation and consult the section on extending the FreeMarkerManager.</p>
+
+<p><strong>Alternative Template Engines</strong></p>
+
+<p>The framework provides for template rendering engines other than FreeMarker. (Though, there is rarely a need to use another system!)</p>
+
+<p><strong>(!) Don’t try this at home!</strong></p>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>Alternative template engines are best left to advanced users with special needs!</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<p>The framework supports three template engines, which can be controlled by the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts.ui.templateSuffix
+</code></pre>
+</div>
+<p>in <em>struts.properties</em> .</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>ftl (default)</th>
+      <th><a href="#PAGE_14078">FreeMarker</a>-based template engine</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>vm</td>
+      <td><a href="#PAGE_13894">Velocity</a>-based template engine</td>
+    </tr>
+    <tr>
+      <td>jsp</td>
+      <td><a href="#PAGE_14141">JSP</a>-based template engine</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>The only set of templates and themes provided in the distribution is for FreeMarker. In order to use another template engine, you must provide your own template and theme for that engine.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>Don’t feel that you need to rewrite the templates to match your view format. If you need to customize the template, try copying and modifying the FreeMarker template first. Most changes should be obvious.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/text-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/text-tag.html b/content/tag-developers/text-tag.html
new file mode 100644
index 0000000..b4079dc
--- /dev/null
+++ b/content/tag-developers/text-tag.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/text-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="text">text</h1>
+
+<p>Please make sure you have read the <a href="#PAGE_13927">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Text</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>For more details on using resource bundles with Struts 2 read the <em>localization guide</em> .</p>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/text.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=exdescription|lang=none|javadoc=true|url=org.apache.struts2.components.Text</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.Text</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>Other example</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:text name="format.money"&gt;&lt;s:param name="value" value="myMoneyValue"/&gt;&lt;/s:text&gt;
+
+</code></pre>
+</div>
+
+<p>where the following is in a regular (possibly locale-specific) properties file:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+format.money={0,number,currency}
+
+</code></pre>
+</div>
+
+<p>For more about formatting text, see</p>
+
+<ol>
+  <li>
+    <p><a href="http://java.sun.com/j2se/1.4.2/docs/api/java/text/MessageFormat.html">http://java.sun.com/j2se/1.4.2/docs/api/java/text/MessageFormat.html</a></p>
+  </li>
+  <li>
+    <p><a href="http://java.sun.com/docs/books/tutorial/i18n/format/decimalFormat.html">http://java.sun.com/docs/books/tutorial/i18n/format/decimalFormat.html</a></p>
+  </li>
+</ol>
+
+<p><strong>If you wish to use i18n in your tag attributes</strong></p>
+
+<p>This will <strong>not</strong> work:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:textfield name="lastName" label="&lt;s:text name="person.lastName"/&gt;" ../&gt;
+
+</code></pre>
+</div>
+
+<p>Instead, you should use the getText() method that you inherit when your Action extends XWork’s ActionSupport:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;s:textfield name="lastName" label="getText('person.lastName')" ../&gt;
+
+</code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/themes-and-templates.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/themes-and-templates.html b/content/tag-developers/themes-and-templates.html
new file mode 100644
index 0000000..7e52b7f
--- /dev/null
+++ b/content/tag-developers/themes-and-templates.html
@@ -0,0 +1,262 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/themes-and-templates.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="themes-and-templates">Themes and Templates</h1>
+
+<p>The notions of “themes” and “templates” are at the core of the HTML <a href="struts-tags.html">Struts Tags</a> provided by the framework.</p>
+
+<h2 id="definitions">Definitions</h2>
+
+<table>
+  <thead>
+    <tr>
+      <th>tag</th>
+      <th>A small piece of code executed from within <a href="jsp.html">JSP</a>, <a href="freemarker.html">FreeMarker</a>, or <a href="velocity.html">Velocity</a>.</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>template</td>
+      <td>A bit of code, usually written in <a href="freemarker.html">FreeMarker</a>, that can be rendered by certain tags (HTML tags)</td>
+    </tr>
+    <tr>
+      <td>theme</td>
+      <td>A  collection of <em>templates</em>  packaged together to provide common functionality</td>
+    </tr>
+  </tbody>
+</table>
+
+<blockquote>
+  <p>See <a href="struts-tags.html">Struts Tags</a> for more about the HTML and other tags provided by the framework.</p>
+</blockquote>
+
+<h2 id="template-basics">Template Basics</h2>
+
+<table>
+  <thead>
+    <tr>
+      <th><a href="template-loading.html">Template Loading</a></th>
+      <th>How templates are loaded</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td><a href="selecting-template-directory.html">Selecting Template Directory</a></td>
+      <td>How the template directories are loaded</td>
+    </tr>
+    <tr>
+      <td><a href="selecting-themes.html">Selecting Themes</a></td>
+      <td>How you can pick a theme when writing your results</td>
+    </tr>
+    <tr>
+      <td><a href="extending-themes.html">Extending Themes</a></td>
+      <td>How to create your own themes based on existing themes</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="more-about-themes">More About Themes</h2>
+
+<table>
+  <thead>
+    <tr>
+      <th><a href="simple-theme.html">simple theme</a></th>
+      <th>A minimal theme with no “bells and whistles”</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td><a href="xhtml-theme.html">xhtml theme</a></td>
+      <td>The default theme that uses common HTML practices</td>
+    </tr>
+    <tr>
+      <td><a href="css-xhtml-theme.html">css_xhtml theme</a></td>
+      <td>The <a href="xhtml-theme.html">xhtml theme</a> re-implemented using strictly CSS for layout</td>
+    </tr>
+    <tr>
+      <td><a href="ajax-theme.html">ajax theme</a></td>
+      <td>A theme based on the <a href="xhtml-theme.html">xhtml theme</a> that provides advanced AJAX features</td>
+    </tr>
+  </tbody>
+</table>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/ui-tag-reference.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/ui-tag-reference.html b/content/tag-developers/ui-tag-reference.html
new file mode 100644
index 0000000..c000d78
--- /dev/null
+++ b/content/tag-developers/ui-tag-reference.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/ui-tag-reference.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="ui-tag-reference">UI Tag Reference</h1>
+
+<p>Struts UI Tags display data in rich and reusable HTML.</p>
+
+<h2 id="form-tags">Form Tags</h2>
+
+<ul>
+  <li><a href="checkbox-tag.html">checkbox</a></li>
+  <li><a href="checkboxlist-tag.html">checkboxlist</a></li>
+  <li><a href="combobox-tag.html">combobox</a></li>
+  <li><a href="datetextfield-tag.html">datetextfield</a></li>
+  <li><a href="doubleselect-tag.html">doubleselect</a></li>
+  <li><a href="head-tag.html">head</a></li>
+  <li><a href="file-tag.html">file</a></li>
+  <li><a href="form-tag.html">form</a></li>
+  <li><a href="hidden-tag.html">hidden</a></li>
+  <li><a href="inputtransferselect-tag.html">inputtransferselect</a></li>
+  <li><a href="label-tag.html">label</a></li>
+  <li><a href="optiontransferselect-tag.html">optiontransferselect</a></li>
+  <li><a href="optgroup-tag.html">optgroup</a></li>
+  <li><a href="password-tag.html">password</a></li>
+  <li><a href="radio-tag.html">radio</a></li>
+  <li><a href="reset-tag.html">reset</a></li>
+  <li><a href="select-tag.html">select</a></li>
+  <li><a href="submit-tag.html">submit</a></li>
+  <li><a href="textarea-tag.html">textarea</a></li>
+  <li><a href="textfield-tag.html">textfield</a></li>
+  <li><a href="token-tag.html">token</a></li>
+  <li><a href="updownselect-tag.html">updownselect</a></li>
+</ul>
+
+<h2 id="non-form-ui-tags">Non-Form UI Tags</h2>
+
+<ul>
+  <li><a href="actionerror-tag.html">actionerror</a></li>
+  <li><a href="actionmessage-tag.html">actionmessage</a></li>
+  <li><a href="component-tag.html">component</a></li>
+  <li><a href="div-tag.html">div</a></li>
+  <li><a href="fielderror-tag.html">fielderror</a></li>
+</ul>
+
+<h2 id="ajax-tags">Ajax Tags</h2>
+
+<ul>
+  <li><a href="a-tag.html">a</a></li>
+  <li><a href="autocompleter-tag.html">autocompleter</a></li>
+  <li><a href="bind-tag.html">bind</a></li>
+  <li><a href="datetimepicker-tag.html">datetimepicker</a></li>
+  <li><a href="div-tag.html">div</a></li>
+  <li><a href="head-tag.html">head</a></li>
+  <li><a href="submit-tag.html">submit</a></li>
+  <li><a href="tabbed-tag.html">tabbedPanel</a></li>
+  <li><a href="textarea-tag.html">textarea</a></li>
+  <li><a href="tree-tag.html">tree</a></li>
+  <li><a href="treenode-tag.html">treenode</a></li>
+</ul>
+
+<blockquote>
+  <p>For detailed descriptions of each tag, including usage examples, see the <a href="tag-reference.html">Tag Reference</a></p>
+</blockquote>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/ui-tags.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/ui-tags.html b/content/tag-developers/ui-tags.html
new file mode 100644
index 0000000..80de451
--- /dev/null
+++ b/content/tag-developers/ui-tags.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/ui-tags.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="ui-tags">UI Tags</h1>
+
+<p>Unlike <em>generic tags</em>, UI tags do not provide much control structure or logic. Rather, they are focused on using data, 
+either from your action/value stack or from the Data Tags, and displaying data in rich and reusable HTML. All UI tags 
+are driven by <em>templates</em>  and <em>themes</em> . While generic tags simply output some content directly from the tag (if there 
+is any content to output), the UI tags defer to a template, often grouped together as a theme, to do the actual rendering.</p>
+
+<p>Template support allows UI tags to build a rich set of reusable HTML components that can be customized to fit exact 
+requirements. For details, see <a href="themes-and-templates.html">Themes and Templates</a>.</p>
+
+<table>
+  <thead>
+    <tr>
+      <th><a href="themes-and-templates.html">Themes and Templates</a></th>
+      <th>A must-read explanation of how themes and templates are used when rendering UI tags.</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td><a href="form-tags.html">Form Tags</a></td>
+      <td>provide all form-related UI output, such as <em>form</em> , <em>textfield</em> , and <em>select</em> .</td>
+    </tr>
+    <tr>
+      <td>Non Form Tags</td>
+      <td>provide all non-form-related UI output, such as <em>a</em> , <em>div</em> , and <em>tabbedPanel</em> .</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="language-specific-tag-support">Language Specific Tag Support</h2>
+
+<p>The framework strives to support multiple development environments. The framework does not impose a single template language. 
+Almost any common language can be used, and there are hooks for new languages. By default, almost every single tag is 
+supported in JSP, Velocity, and FreeMarker. In each of these sections, you’ll find examples and techniques for applying 
+the generic tag reference toward your specific language or template choice.</p>
+
+<ul>
+  <li><a href="jsp-tags.html">JSP Tags</a></li>
+  <li><a href="velocity-tags.html">Velocity Tags</a></li>
+  <li><a href="freemarker-tags.html">FreeMarker Tags</a></li>
+</ul>
+
+<p>Please make sure you have read the <a href="tag-syntax.html">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<p>Within the form tags, there are two classes of tags: the form tag itself, and all other tags, which make up the individual 
+form elements. The behavior of the form tag is different than the elements enclosed within it.</p>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[09/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/ajax-theme.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/ajax-theme.html b/content/tag-developers/ajax-theme.html
new file mode 100644
index 0000000..714dfbc
--- /dev/null
+++ b/content/tag-developers/ajax-theme.html
@@ -0,0 +1,669 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/ajax-theme.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="ajax-theme">ajax theme</h1>
+
+<p>The ajax theme is deprecated!</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>The ajax theme extends the <a href="#PAGE_13834">xhtml theme</a> with AJAX features. The theme uses the popular DOJO AJAX/JavaScript toolkit. AJAX features include:</p>
+
+<ul>
+  <li>
+    <p><em>AJAX Client Side Validation</em></p>
+  </li>
+  <li>
+    <p>Remote <a href="#PAGE_14201">form</a> submission support (works with the <a href="#PAGE_14054">submit</a> tag as well)</p>
+  </li>
+  <li>
+    <p>An advanced <a href="#PAGE_13908">div</a> template that provides dynamic reloading of partial HTML</p>
+  </li>
+  <li>
+    <p>An advanced <a href="#PAGE_14027">a</a> template that provides the ability to load and evaluate JavaScript remotely</p>
+  </li>
+  <li>
+    <p>An AJAX-only <a href="#PAGE_14222">tabbedPanel</a> implementation</p>
+  </li>
+  <li>
+    <p>A rich pub-sub event model</p>
+  </li>
+  <li>
+    <p>Interactive autocomplete tag</p>
+  </li>
+</ul>
+
+<p>(ok)  See also: <em>Ajax tags</em></p>
+
+<p><strong>Browser Compatibility</strong></p>
+
+<p>AJAX (as a technology) uses a browser-side scripting component that varies between browers (and sometimes versions). To hide those differences from the developer, we utilize the dojo toolkit (<a href="http://www.dojotoolkit.org">http://www.dojotoolkit.org</a>). Several browsers are supported by dojo, and any UI’s created with the ajax theme should act the same way for supported browsers. The supported browsers are:</p>
+
+<ul>
+  <li>
+    <p>IE 5.5+</p>
+  </li>
+  <li>
+    <p>FF 1.0+</p>
+  </li>
+  <li>
+    <p>Latest Safari (on up-to-date OS versions)</p>
+  </li>
+  <li>
+    <p>Latest Opera</p>
+  </li>
+  <li>
+    <p>Latest Konqueror</p>
+  </li>
+</ul>
+
+<p><strong>Extending the AJAX Theme</strong></p>
+
+<p>The wrapping technique utilized by the ajax theme is much like <a href="#PAGE_13834">xhtml theme</a>, but the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlheader.ftl
+</code></pre>
+</div>
+<p>is a wee bit different.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;#if parameters.label?if_exists != ""&gt;
+	&lt;#include "/${parameters.templateDir}/xhtml/controlheader.ftl" /&gt;
+&lt;/#if&gt;
+&lt;#if parameters.form?exists &amp;&amp; parameters.form.validate?default(false) == true&gt;
+	&lt;#-- can't mutate the data model in freemarker --&gt;
+    &lt;#if parameters.onblur?exists&gt;
+        ${tag.addParameter('onblur', "validate(this);${parameters.onblur}")}
+    &lt;#else&gt;
+        ${tag.addParameter('onblur', "validate(this);")}
+    &lt;/#if&gt;
+&lt;/#if&gt;
+
+</code></pre>
+</div>
+
+<p>The header provides for <em>AJAX Client Side Validation</em>  by checking if the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>validate
+</code></pre>
+</div>
+<p>attribute is set to true. If it is, a validation request is made on each</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>onblur
+</code></pre>
+</div>
+<p>event for a HTML <a href="#PAGE_14248">Struts Tags</a>. Some people don’t like the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>onblur
+</code></pre>
+</div>
+<p>behavior; they would rather a more advanced timer (say, 200ms) be kicked off after every keystroke. You can override this template and provide that type of behavior if you would like.</p>
+
+<p><strong>Special Interest</strong></p>
+
+<p>Three ajax_xhtml templates of special interest are</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>head
+</code></pre>
+</div>
+<p>,</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>div
+</code></pre>
+</div>
+<p>, and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>a
+</code></pre>
+</div>
+<p>.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>Especially with the ajax theme, it is important to use the <a href="#PAGE_13997">head</a> tag. (See the <em>ajax head template</em>  for more information.) Without it, AJAX support may not be set up properly.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<ul>
+  <li>
+    <p><em>ajax head template</em></p>
+  </li>
+  <li>
+    <p><em>ajax div template</em></p>
+  </li>
+  <li>
+    <p><em>ajax a template</em></p>
+  </li>
+</ul>
+
+<p>(ok)  In addition to these templates, be familiar with the <em>ajax event system</em>  provided by the framework and Dojo.</p>
+
+<p><strong>ajax a template</strong></p>
+
+<p>The ajax theme is experimental. Feedback is appreciated.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>The ajax a template is used to make asynchronous calls to the server when the user clicks on the a href link.  It is useful when you need to communicate information back to the application from the UI, without requiring the entire page to be re-rendered.  An example would be removing an item from a list.</p>
+
+<p>The <em>preInvokeJS</em>  attribute is used to determine whether the URL specified should be called or not, and must contain Javascript that returns <em>true</em>  or <em>false</em> .  If you want to call a JavaScript function, use the format preInvokeJS=’yourMethodName(data,type)’. An example would be to show a confirm dialog to the user to double check whether they want to remove a user from a list.</p>
+
+<p><strong>Remember</strong>: the content returned by the <em>href</em>  attribute must be JavaScript. That JavaScript will then be evaluated within the webpage. If you only wish to publish an event to the topic specified, then simply return no result (or NONE) from your action and utilize the <em>notifyTopics</em>  attribute to specific the topic names.</p>
+
+<p>For an example of the interaction between the <a href="#PAGE_13908">div</a> tag and the <a href="#PAGE_14027">a</a> tag using the topic pub/sub model, see the examples in the <em>ajax div template</em> .</p>
+
+<p><strong>ajax div template</strong></p>
+
+<p>The Ajax theme is experimental. Feedback is appreciated.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>The ajax <a href="#PAGE_13908">div</a> template provides a much more interesting div rendering option that the other themes do. Rather than simply rendering a</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;div&gt;
+</code></pre>
+</div>
+<p>tag, this template relies on advanced AJAX features provided by the <a href="http://dojotoolkit.org">Dojo Toolkit</a>^[http://dojotoolkit.org]. While the <a href="#PAGE_13908">div</a> tag could be used outside of the <a href="#PAGE_14205">ajax theme</a>, it is usually not very useful. See the <a href="#PAGE_13908">div</a> tag for more information on what features are provided.</p>
+
+<p><strong>Features</strong></p>
+
+<p>The remote div has a few features, some of which can be combined with the <a href="#PAGE_14027">a</a> tag and the <em>ajax a template</em> . These uses are:</p>
+
+<ul>
+  <li>
+    <p>Retrieve remote data</p>
+  </li>
+  <li>
+    <p>Initialize the div with content before the remote data is retrieved</p>
+  </li>
+  <li>
+    <p>Display appropriate error and loading messages</p>
+  </li>
+  <li>
+    <p>Refresh data on a timed cycle</p>
+  </li>
+  <li>
+    <p>Listen for events and refresh data</p>
+  </li>
+  <li>
+    <p>JavaScript control support</p>
+  </li>
+</ul>
+
+<p><strong>Retrieve Remote Data</strong></p>
+
+<p>The simplest way to use the div tag is to provide an <em>href</em>  attribute. For example:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;saf:div theme="ajax" id="weather" href="http://www.weather.com/weather?zip=97239"/&gt;
+
+</code></pre>
+</div>
+
+<p>What this does after the HTML page is completely loaded, the specified URL will be retrieved asynchronously in the browser. The entire contents returned by that URL will be injected in to the div.</p>
+
+<p><strong>Initializing the Div</strong></p>
+
+<p>Because the remote data isn’t loaded immediately, it is sometimes useful to have some placeholder content that exists before the remote data is retrieved. The content is essentially just the body of the div element. For example:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;saf:div theme="ajax" id="weather" href="http://www.weather.com/weather?zip=97239"&gt;
+    Placeholder...
+&lt;/saf:div&gt;
+
+</code></pre>
+</div>
+
+<p>If you wish to load more complex initial data, you can use the <a href="#PAGE_14034">action</a> tag and the <em>executeResult</em>  attribute:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;saf:div theme="ajax" id="weather" href="http://www.weather.com/weather?zip=97239"&gt;
+    &lt;ww:action id="weather" name="weatherBean" executeResult="true"&gt;
+        &lt;ww:param name="zip" value="97239"/&gt;
+    &lt;/ww:action&gt;
+&lt;/saf:div&gt;
+
+</code></pre>
+</div>
+
+<p><strong>Loading and Error Messages</strong></p>
+
+<p>If you’d like to display special messages when the data is being retrieved or when the data cannot be retrieved, you can use the <em>errorText</em>  and <em>loadingText</em>  attributes:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;saf:div theme="ajax" id="weather" href="http://www.weather.com/weather?zip=97239"
+        loadingText="Loading weather information..."
+        errorText="Unable to contact weather server"&gt;
+    Placeholder...
+&lt;/saf:div&gt;
+
+</code></pre>
+</div>
+
+<p><strong>Refresh Timers</strong></p>
+
+<p>Another feature this div template provides is the ability to refresh data on a timed basis. Using the <em>updateFreq</em>  and the <em>delay</em> attributes, you can specify how often the timer goes off and when the timer starts (times in milliseconds). For example, the following will update every minute after a two second delay:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;saf:div theme="ajax" id="weather" href="http://www.weather.com/weather?zip=97239"
+        loadingText="Loading weather information..."
+        errorText="Unable to contact weather server"&gt;
+        delay="2000"
+        updateFreq="60000"
+    Placeholder...
+&lt;/saf:div&gt;
+
+</code></pre>
+</div>
+
+<p><strong>Listening for Events</strong></p>
+
+<p>The <a href="#PAGE_14027">a</a> tag (specifically the <em>ajax a template</em> ) and the div tag support an <em>ajax event system</em> , providing the ability to broadcast events to topics. You can specify the <strong>topics</strong> to listen to using a comma separated list in the <em>listenTopics</em>  attribute. What this means is that when a topic is published, usually through the <em>ajax a template</em> , the URL specified in the <em>href</em>  attribute will be re-requested.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;saf:div theme="ajax" id="weather" href="http://www.weather.com/weather?zip=97239"
+        loadingText="Loading weather information..."
+        errorText="Unable to contact weather server"
+        listenTopics="weather_topic,some_topic"&gt;
+    Placeholder...
+&lt;/saf:div&gt;
+&lt;saf:a id="link1"
+      theme="ajax"
+      href="refreshWeather.action"
+      notifyTopics="weather_topic,other_topic"
+      errorText="An Error ocurred"&gt;Refresh&lt;/saf:a&gt;
+
+</code></pre>
+</div>
+
+<p><strong>JavaScript Support</strong></p>
+
+<p>There are also javascript functions to refresh the content and stop/start the refreshing of the component. For the remote div with the component id “remotediv1”:</p>
+
+<p>To start refreshing use the javascript:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+remotediv1.startTimer();
+
+</code></pre>
+</div>
+
+<p>To stop refreshing use the javascript:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+remotediv1.stopTimer();
+
+</code></pre>
+</div>
+
+<p>To refresh the content use the javascript:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+remotediv1.refresh();
+
+</code></pre>
+</div>
+
+<p><strong>JavaScript Examples:</strong></p>
+
+<p>To further illustrate these concepts here is an example. Say you want to change the url of a div at runtime via javascript. Here is what you need to do:</p>
+
+<p>What you will need to do is add a JS function that listens to a JS event that publishes the id from the select box that was selected.  It will modify the URL for the div (adding the id so the correct data is obtained) and then bind() the AJAX div so it refreshes.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;saf:head theme="ajax" /&gt;
+
+&lt;script type="text/javascript"&gt;
+    function updateReports(id) {
+       var reportDiv= window['reportDivId'];
+       reportDiv.href = '/../reportListRemote.action?selectedId='+id;
+       reportDiv.refresh();
+    }
+    dojo.event.topic.getTopic("updateReportsListTopic").subscribe(null, "updateReports");
+&lt;/script&gt;
+
+&lt;form ... &gt;
+&lt;saf:select .... onchange="javascript: dojo.event.topic.publish("updateReportsListTopic", this.value); " /&gt;
+
+&lt;saf:div id="reportDivId" theme="ajax" href="/.../reportListRemote.action" &gt;
+  Loading reports...
+&lt;/saf:div&gt;
+&lt;/form&gt;
+
+</code></pre>
+</div>
+
+<p><strong>ajax event system</strong></p>
+
+<p>As you may have seen with the <em>ajax div template</em>  and <em>ajax a template</em> , the framework and Dojo provide a nice way to subscribe and notify of topics from within the browser. A benifit of using Dojo as the basis of many of these components is being able to loosely couple UI components.  There are two attributes of importance:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>listenTopics
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>notifyTopics
+</code></pre>
+</div>
+<p>.</p>
+
+<ul>
+  <li>If a component has a</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>notifyTopics
+</code></pre>
+</div>
+<p>attribute, then after the processing has been completed a message with be published to the topic names supplied as a value (comma delimited).</p>
+
+<ul>
+  <li>If a component has a</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>listenTopics
+</code></pre>
+</div>
+<p>attribute, then when a message is published to the topic names supplied as a value (comma delimited), the component will perform custom tag-specific logic ( i.e a DIV tag will re-fresh its content).</p>
+
+<p>As well as this, you can publish and subscribe to topic names with javascript code.  To publish to the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>topic_name
+</code></pre>
+</div>
+<p>topic:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+dojo.event.topic.publish("topic_name", "content");
+
+</code></pre>
+</div>
+
+<p>The topic_name attribute is required, the content attribute is not and most elements are triggered without having this attribute. See the <em>ajax div template</em>  for an example of this type of interaction.</p>
+
+<p>To subscribe to the <em>topic_name</em>  topic:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+function doSomethingWithEvent(data) {
+...
+}
+
+dojo.event.topic.getTopic("topic_name").subscribe(null, "doSomethingWithEvent");
+
+</code></pre>
+</div>
+
+<p>The</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>subscribe
+</code></pre>
+</div>
+<p>method takes 2 parameters, the first is the JavaScript object variable (or null if the function is not from an object) and the second is the name of the function to call when an event is recieved on the topic.</p>
+
+<p><strong>ajax head template</strong></p>
+
+<p>The ajax <a href="#PAGE_13997">head</a> template builds upon the <em>xhtml head template</em>  by providing additional JavaScript includes for the <a href="http://dojotoolkit.org">Dojo Toolkit</a>^[http://dojotoolkit.org], which is used by the <em>ajax a template</em> , <em>ajax div template</em>  , and the <em>ajax tabbedPanel template</em> . It is required to use this tag,</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;ww:head theme="ajax"/&gt;
+</code></pre>
+</div>
+<p>, in your HTML</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;head&gt;
+</code></pre>
+</div>
+<p>block if you wish to use AJAX feature. The contents of <strong>head.ftl</strong> are:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/plugins/dojo/src/main/resources/template/ajax/head.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<table>
+  <tbody>
+    <tr>
+      <td>If you are having trouble getting the AJAX theme to work, you should include the above JavaScript in your page manually, changing “isDebug: false” to “isDebug: true”.  This will log out debugging information directly to the screen.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>Note that Dojo is configured to use the same character encoding specified in <em>struts.properties</em> , typically UTF-8. For a simple example of how to use the <a href="#PAGE_13997">head</a> tag with the AJAX theme, simply do the following in your HTML:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=common-include|lang=xml|url=struts2/apps/showcase/src/main/webapp/ajax/commonInclude.jsp</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>The above sample is from Struts trunk; for 2.0.6 you should use <s:head debug="true"></s:head>.</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<p><strong>ajax tabbedPanel template</strong></p>
+
+<p>TODO: Describe the Ajax TabbedPanel template</p>
+
+<p><strong>ajax submit template</strong></p>
+
+<p>TODO: Describe the Ajax Submit template</p>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/append-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/append-tag.html b/content/tag-developers/append-tag.html
new file mode 100644
index 0000000..aaddd81
--- /dev/null
+++ b/content/tag-developers/append-tag.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/append-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="append">append</h1>
+
+<p>Please make sure you have read the <a href="tag-syntax.html">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<h2 id="description">Description</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.AppendIterator</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<h2 id="parameters">Parameters</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/append.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<h2 id="example">Example</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=code|lang=java|javadoc=true|url=org.apache.struts2.components.AppendIterator</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|javadoc=true|lang=xml|url=org.apache.struts2.components.AppendIterator</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/bean-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/bean-tag.html b/content/tag-developers/bean-tag.html
new file mode 100644
index 0000000..60145e2
--- /dev/null
+++ b/content/tag-developers/bean-tag.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/bean-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="bean">bean</h1>
+
+<p>Please make sure you have read the <a href="tag-syntax.html">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<h2 id="description">Description</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Bean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<h2 id="parameters">Parameters</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/bean.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<h2 id="examples">Examples</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=examples|javadoc=true|lang=xml|url=org.apache.struts2.components.Bean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=examplesdescription|javadoc=true|url=org.apache.struts2.components.Bean</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/cewolf-charts-using-velocity-templates.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/cewolf-charts-using-velocity-templates.html b/content/tag-developers/cewolf-charts-using-velocity-templates.html
new file mode 100644
index 0000000..1a6e1ae
--- /dev/null
+++ b/content/tag-developers/cewolf-charts-using-velocity-templates.html
@@ -0,0 +1,307 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/cewolf-charts-using-velocity-templates.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="cewolf-charts-using-velocity-templates">CeWolf charts using Velocity templates</h1>
+
+<p>#####Setup CeWolf#####</p>
+
+<p><strong>This currently only works with the most recent CVS version of WebWork but should be available in the upcoming 2.0 beta2</strong></p>
+
+<ol>
+  <li>
+    <p>Go to <a href="http://cewolf.sourceforge.net">http://cewolf.sourceforge.net</a> and grab a stable release of CeWolf (at the time of writing, the unstable builds do not work with WebWork).</p>
+  </li>
+  <li>
+    <p>Edit your webwork.properties file and add “de.laures.cewolf.taglib.tags” to the  property “webwork.velocity.tag.path”</p>
+  </li>
+</ol>
+
+<p>Lastly add the CeWolf servlet to web.xml:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;servlet&gt;
+    &lt;servlet-name&gt;CewolfServlet&lt;/servlet-name&gt;
+    &lt;servlet-class&gt;de.laures.cewolf.CewolfRenderer&lt;/servlet-class&gt;
+&lt;/servlet&gt;
+
+&lt;servlet-mapping&gt;
+    &lt;servlet-name&gt;CewolfServlet&lt;/servlet-name&gt;
+    &lt;url-pattern&gt;/cewolf/*&lt;/url-pattern&gt;
+&lt;/servlet-mapping&gt;
+
+</code></pre>
+</div>
+
+<p>#####Create a DatasetProducer#####</p>
+
+<p>This is the default DatasetProducer from the CeWolf tutorial.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+import org.jfree.data.DefaultCategoryDataset;
+
+import de.laures.cewolf.DatasetProduceException;
+import de.laures.cewolf.DatasetProducer;
+
+public class PageViewCountData implements DatasetProducer, Serializable {
+
+	// These values would normally not be hard coded but produced by
+	// some kind of data source like a database or a file
+	private final String[] categories =    {"mon", "tue", "wen", "thu", "fri", "sat", "sun"};
+	private final String[] seriesNames =    {"cewolfset.jsp", "tutorial.jsp", "testpage.jsp", "performancetest.jsp"};
+	private final Integer[] [] values = new Integer[OS:seriesNames.length] [OS:categories.length];
+
+	public Object produceDataset(Map params) throws DatasetProduceException {
+		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
+		for (int series = 0; series &lt; seriesNames.length; series ++) {
+			int lastY = (int)(Math.random() * 1000 + 1000);
+			for (int i = 0; i &lt; categories.length; i++) {
+				final int y = lastY + (int)(Math.random() * 200 - 100);
+				lastY = y;
+				dataset.addValue((double)y, seriesNames[OS:series], categories[i]);
+			}
+		}
+		return dataset;
+	}
+
+	public boolean hasExpired(Map params, Date since) {		
+		return (System.currentTimeMillis() - since.getTime())  &gt; 5000;
+	}
+
+	public String getProducerId() {
+		return "PageViewCountData DatasetProducer";
+	}
+}
+
+</code></pre>
+</div>
+
+<p>#####Create the Velocity template#####</p>
+
+<p>With the new WebWork refactorings, nested JSP tags with arbitrary parameters can be used, so we convert the CeWolf tutorial JSP script to Velocity.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;jsp:useBean id="pageViews" class="de.laures.cewolf.example.PageViewCountData"/&gt;
+&lt;cewolf:chart 
+    id="line" 
+    title="Page View Statistics" 
+    type="line" 
+    xaxislabel="Page" 
+    yaxislabel="Views"&gt;
+    &lt;cewolf:data&gt;
+        &lt;cewolf:producer id="pageViews"/&gt;
+    &lt;/cewolf:data&gt;
+&lt;/cewolf:chart&gt;
+
+&lt;cewolf:img chartid="line" renderer="cewolf" width="400" height="300"/&gt;
+
+</code></pre>
+</div>
+
+<p>In Velocity it looks like this:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+#set( $pageViews = $stack.findValue("new com.PageViewCountData()") )
+$req.session.setAttribute("pageViews", $pageViews ) 
+
+#bodytag( SimpleChart "id=line" "title=Page View Statistics" "type=line" "xaxislabel=Page" "yaxslabel=Views" )
+  #bodytag( Data )
+    #tag( Producer "id=pageViews" )
+  #end
+#end
+
+#tag( ChartImg "chartid=line" "renderer=cewolf" "width=400" "height=300" ) 
+
+</code></pre>
+</div>
+
+<p>As you may notice, CeWolf looks up it’s DatasetProducer in the request attributes - it has no knowledge of the Velocity context. That’s why we call $req.session.setAttribute(). The other attributes (such as the chartid) will be set by CeWolf, so we don’t need to care about them.</p>
+
+<p>#####Setup an action to disply the template#####</p>
+
+<p>Now you should be able to fire up an action in the usual way with this template as the result and a nice chart should appear.</p>
+
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/css-xhtml-theme.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/css-xhtml-theme.html b/content/tag-developers/css-xhtml-theme.html
new file mode 100644
index 0000000..f2dd8e8
--- /dev/null
+++ b/content/tag-developers/css-xhtml-theme.html
@@ -0,0 +1,329 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/css-xhtml-theme.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="cssxhtml-theme">css_xhtml theme</h1>
+
+<p>The css_xhtml theme provides all the basics that the <a href="#PAGE_14291">simple theme</a> provides and adds several features.</p>
+
+<ul>
+  <li>Standard two-column CSS-based layout, using</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;div&gt;
+</code></pre>
+</div>
+<p>for the HTML <a href="#PAGE_14248">Struts Tags</a> (<a href="#PAGE_14201">form</a>, <a href="#PAGE_13912">textfield</a>, <a href="#PAGE_14127">select</a>, etc)</p>
+
+<ul>
+  <li>
+    <p>Labels for each of the HTML <a href="#PAGE_14248">Struts Tags</a>, placed according to the CSS stylesheet</p>
+  </li>
+  <li>
+    <p><em>Validation</em>  and error reporting</p>
+  </li>
+  <li>
+    <p><em>Pure JavaScript Client Side Validation</em>  using 100% JavaScript on the browser</p>
+  </li>
+</ul>
+
+<p><strong>Wrapping the Simple Theme</strong></p>
+
+<p>The xhtml theme uses the “wrapping” technique described by <a href="#PAGE_13962">Extending Themes</a>. Let’s look at how the HTML tags are wrapped by a standard header and footer. For example, in the <a href="#PAGE_13912">textfield</a> template,</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>text.ftl
+</code></pre>
+</div>
+<p>, the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlheader.ftl
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlfooter.ftl
+</code></pre>
+</div>
+<p>templates are wrapped around the simple template.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/simple/text.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>CSS XHTML theme header</strong></p>
+
+<p>The header used by the HTML tags in the css_xhtml theme is complicated. Unlike the <a href="#PAGE_13834">xhtml theme</a>, the CSS theme does not use a</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>labelposition
+</code></pre>
+</div>
+<p>attribute. Instead, the label position is defined by CSS rules.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/controlheader.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>Note that the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>fieldErrors
+</code></pre>
+</div>
+<p>, usually caused by <em>Validation</em> , are displayed in a</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>div
+</code></pre>
+</div>
+<p>block before the element is displayed.</p>
+
+<p><strong>CSS XHTML theme footer</strong></p>
+
+<p>And the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>controlfooter.ftl
+</code></pre>
+</div>
+<p>contents:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/controlfooter.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Special Interest</strong></p>
+
+<p>Two css_xhtml templates of special interest are</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>head
+</code></pre>
+</div>
+<p>and</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>form
+</code></pre>
+</div>
+<p>.</p>
+
+<p><strong>Head template</strong></p>
+
+<p>The css_xhtml <a href="#PAGE_13997">head</a> template is similar to the xhtml head template. The difference is that CSS is used to provide the layout.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/head.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>The head includes a style sheet.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/styles.css</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Form template</strong></p>
+
+<p>The css_xhtml <a href="#PAGE_14201">form</a> template is almost exactly like the <em>xhtml form template</em> , including support for <em>Pure JavaScript Client Side Validation</em> . The difference is that instead of printing out an opening and closing</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;table&gt;
+</code></pre>
+</div>
+<p>element, there are no elements. Instead, the CSS rules for the individual HTML tags are assumed to handle all display logic. However, as noted, client-side validation is still supported.</p>
+
+<p><strong>css_xhtml form template</strong></p>
+
+<p>The css_xhtml <a href="#PAGE_14201">form</a> template is almost exactly like the <em>xhtml form template</em> , including support for <em>Pure JavaScript Client Side Validation</em> . The only difference is that instead of printing out an opening and closing</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;table&gt;
+</code></pre>
+</div>
+<p>element, there are no elements. Instead, the CSS rules for the individual HTML tags are assumed to handle all dislay logic. However, as noted, client side validation is still supported.</p>
+
+<p><strong>css_xhtml head template</strong></p>
+
+<p>The css_xhtml <a href="#PAGE_13997">head</a> template is very similar to the <em>xhtml head template</em> . The only difference is that CSS that is included is specifically designed to provide the layout for the <a href="#PAGE_14215">css_xhtml theme</a>. The contents of <strong>head.ftl</strong> are:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/head.ftl</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>The contents of <strong>styles.css</strong> are:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/css_xhtml/styles.css</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/date-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/date-tag.html b/content/tag-developers/date-tag.html
new file mode 100644
index 0000000..d78f24d
--- /dev/null
+++ b/content/tag-developers/date-tag.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/date-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="date">date</h1>
+
+<p><strong>Description</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Date</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Parameters</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/date.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p><strong>Examples</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.components.Date</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


[11/11] struts-site git commit: Updates production by Jenkins

Posted by gi...@apache.org.
Updates production by Jenkins


Project: http://git-wip-us.apache.org/repos/asf/struts-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts-site/commit/2b2ec9b3
Tree: http://git-wip-us.apache.org/repos/asf/struts-site/tree/2b2ec9b3
Diff: http://git-wip-us.apache.org/repos/asf/struts-site/diff/2b2ec9b3

Branch: refs/heads/asf-site
Commit: 2b2ec9b30517d5ab06eb50b11adfca0dbe40b694
Parents: 08f8753
Author: jenkins <bu...@apache.org>
Authored: Thu Sep 21 10:05:37 2017 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Sep 21 10:05:37 2017 +0000

----------------------------------------------------------------------
 content/tag-developers/a-tag.html               |  224 +
 .../access-to-valuestack-from-jsps.html         |  322 +
 content/tag-developers/action-tag.html          |  232 +
 .../ajax-and-javascript-recipes.html            | 1162 +++
 content/tag-developers/ajax-tags.html           |  263 +
 content/tag-developers/ajax-theme.html          |  669 ++
 content/tag-developers/append-tag.html          |  209 +
 content/tag-developers/bean-tag.html            |  209 +
 .../cewolf-charts-using-velocity-templates.html |  307 +
 content/tag-developers/css-xhtml-theme.html     |  329 +
 content/tag-developers/date-tag.html            |  203 +
 content/tag-developers/debug-tag.html           |  187 +
 content/tag-developers/else-tag.html            |  212 +
 content/tag-developers/elseif-tag.html          |  212 +
 content/tag-developers/extending-themes.html    |  335 +
 content/tag-developers/form-tags.html           |  481 +
 content/tag-developers/freemarker-tags.html     |  331 +
 content/tag-developers/freemarker.html          |  546 ++
 content/tag-developers/generator-tag.html       |  203 +
 .../tag-developers/generic-tag-reference.html   |  225 +
 content/tag-developers/generic-tags.html        |  194 +
 content/tag-developers/i18n-tag.html            |  212 +
 content/tag-developers/if-tag.html              |  210 +
 content/tag-developers/include-tag.html         |  234 +
 content/tag-developers/index.html               | 8447 ++----------------
 content/tag-developers/iterator-tag.html        |  279 +
 content/tag-developers/jsp-tags.html            |  203 +
 content/tag-developers/jsp.html                 |  280 +
 content/tag-developers/merge-tag.html           |  216 +
 content/tag-developers/ognl-basics.html         |  373 +
 .../ognl-expression-compilation.html            |  519 ++
 content/tag-developers/ognl.html                |  320 +
 content/tag-developers/param-tag.html           |  216 +
 content/tag-developers/property-tag.html        |  216 +
 content/tag-developers/push-tag.html            |  240 +
 .../selecting-template-directory.html           |  244 +
 content/tag-developers/selecting-themes.html    |  245 +
 content/tag-developers/set-tag.html             |  212 +
 content/tag-developers/simple-theme.html        |  224 +
 content/tag-developers/sort-tag.html            |  212 +
 content/tag-developers/struts-tags.html         |  232 +
 content/tag-developers/subset-tag.html          |  223 +
 content/tag-developers/tag-reference.html       |  190 +
 content/tag-developers/tag-syntax.html          |  448 +
 content/tag-developers/template-loading.html    |  337 +
 content/tag-developers/text-tag.html            |  263 +
 .../tag-developers/themes-and-templates.html    |  262 +
 content/tag-developers/ui-tag-reference.html    |  245 +
 content/tag-developers/ui-tags.html             |  230 +
 content/tag-developers/url-tag.html             |  255 +
 content/tag-developers/velocity-tags.html       |  220 +
 content/tag-developers/velocity.html            |  359 +
 content/tag-developers/xhtml-theme.html         |  400 +
 53 files changed, 16224 insertions(+), 7597 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/a-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/a-tag.html b/content/tag-developers/a-tag.html
new file mode 100644
index 0000000..12dfff1
--- /dev/null
+++ b/content/tag-developers/a-tag.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/a-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="a">a</h1>
+
+<p>Please make sure you have read the <a href="tag-syntax.html">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<h2 id="description">Description</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.Anchor</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<blockquote>
+  <p>While this tag can be used with the <a href="simple-theme.html">simple theme</a>, <a href="xhtml-theme.html">xhtml theme</a>, and others, 
+it is really designed to work best with the <a href="ajax-theme.html">ajax theme</a>. We recommend reading the 
+<em>ajax a template</em>  documentation for more details.</p>
+</blockquote>
+
+<h2 id="parameters">Parameters</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/a.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<h2 id="usage">Usage</h2>
+
+<p>To get started, use the <a href="head-tag.htlm">head</a> tag and the <a href="ajax-theme.html">ajax theme</a>. See <em>ajax head template</em><br />
+for more information. Then look at the usage details for the <em>ajax a template</em> .</p>
+
+<p>If you want to use additional parameters in your s:a the best practice is to use a s:url to create your url and then 
+leverage this url into your s:a tag. This is done by creating a s:url and specifying an id attribute. like “testUrlId” 
+in this example. Then in the s:a tag reference this id in the href attribute via <code class="highlighter-rouge">%{testUrlId}</code></p>
+
+<pre><code class="language-jsp">&lt;s:url var="testUrlId" namespace="/subscriber" action="customField" method="delete"&gt;
+    &lt;s:param name="customFieldDefinition.id" value="${id}"/&gt;
+&lt;/s:url&gt;
+&lt;s:a errorText="Sorry your request had an error." preInvokeJS="confirm('Are you sure you want to delete this item?')" href="%{testUrlId}"&gt;
+    &lt;img src="&lt;s:url value="/images/delete.gif"/&gt;" border="none"/&gt;
+&lt;/s:a&gt;
+
+&lt;img xsrc="&lt;s:url value="/images/delete.gif"/&gt;" border="none"/&gt;&lt;s:a&gt;&lt;img xsrc="&lt;s:url value="/images/delete.gif"/&gt;" border="none"/&gt;&lt;/s:a&gt;
+</code></pre>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/access-to-valuestack-from-jsps.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/access-to-valuestack-from-jsps.html b/content/tag-developers/access-to-valuestack-from-jsps.html
new file mode 100644
index 0000000..1c3664f
--- /dev/null
+++ b/content/tag-developers/access-to-valuestack-from-jsps.html
@@ -0,0 +1,322 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/access-to-valuestack-from-jsps.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="access-to-valuestack-from-jsps">Access to ValueStack from JSPs</h1>
+
+<p>To access the ValueStack from third-party JSP taglibs, expose property values to JSP using the <code class="highlighter-rouge">&lt;s:set/&gt;</code> tag.</p>
+
+<p><strong>Set a request scoped parameter ‘a’ to list of integers</strong></p>
+
+<pre><code class="language-jsp">&lt;s:set name="'a'" value="{ 1, 2, 3, 4 }" scope="request"/&gt;
+</code></pre>
+
+<p>After setting parameters, third-party JSP taglibs can access variables or use JSP 2.0 EL (Expression Language). 
+This is convenient as short hand EL expression syntax <code class="highlighter-rouge">${expression}</code> can be used in a text or inside of tag attributes:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>a[0] = ${a[0]}
+
+&lt;sample:tag value="${a[1]}"/&gt;
+</code></pre>
+</div>
+
+<p>In practice, several variables must be exposed to make effective use of third party taglibs like <a href="http://displaytag.sourceforge.net/11/">DisplayTag</a>. 
+Unfortunately, this approach leads to a lot of <code class="highlighter-rouge">&lt;s:set/&gt;</code> tags.</p>
+
+<blockquote>
+  <p>Unfortunately, it isn’t that simple. we tinkered with <code class="highlighter-rouge">JSPFactory.setDefault()</code> to wrap around <code class="highlighter-rouge">getPageContext()</code> 
+and create <code class="highlighter-rouge">ExpressionEvaluator</code> that would use OGNL. This strategy works in practice, but code generated by Jasper2 
+doesn’t call <code class="highlighter-rouge">JSPFactory.getPageContext().getExpressionEvaluator()</code> but goes directly to static method that is 
+hardwired to Jakarta Commons-EL implementation.</p>
+</blockquote>
+
+<blockquote>
+  <table>
+    <tbody>
+      <tr>
+        <td>Even if this approach did work, it wouldn’t be <em>clean</em> as <code class="highlighter-rouge">JSPFactory.setDefault()</code> should only be called by JSP implementation.</td>
+      </tr>
+    </tbody>
+  </table>
+</blockquote>
+
+<p>There is a simple, if not elegant, solution available in JSP 2.0 EL, for exposing ValueStack to OGNL. It is possible 
+to create custom functions that can be called from EL expressions. Functions have to be ‘public static’ and specified 
+in a TLD file.</p>
+
+<p>To use a function, import the TLD in a JSP file where you’ve want to use a function. For example, you could access 
+Action properties by evaluating OGNL expression by a function ‘vs’ (for valuestack) in EL.</p>
+
+<pre><code class="language-jsp">&lt;%@ taglib uri="/WEB-INF/tld/wwel.tld" prefix="x" %&gt;
+
+a[0] = ${x:vs('a[0]')}
+a[0] * 4 = ${x:vs('a[0] * 4')}
+
+Current action name: ${x:name()}
+Top of ValueStack: ${x:top()}
+</code></pre>
+
+<p>To use this code you’ve got to add <code class="highlighter-rouge">wwel.tld</code> and <code class="highlighter-rouge">Functions.java</code> to your webapp project.</p>
+
+<blockquote>
+  <p>If someone were interested, it would be helpful for a developer (like you!) to define a set of functions that we could 
+include in a future release of the framework.</p>
+</blockquote>
+
+<p><strong>wwel.tld</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0"?&gt;</span>
+<span class="nt">&lt;taglib</span> <span class="na">xmlns=</span><span class="s">"http://java.sun.com/xml/ns/j2ee"</span>
+	<span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span>
+	<span class="na">xsi:schemaLocation=</span><span class="s">"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"</span>
+	<span class="na">version=</span><span class="s">"2.0"</span><span class="nt">&gt;</span>
+
+<span class="nt">&lt;description&gt;</span>
+This taglib enables access to the ValueStack
+from JSP 2.0 Expression Language
+<span class="nt">&lt;/description&gt;</span>
+
+<span class="nt">&lt;tlib-version&gt;</span>1.0<span class="nt">&lt;/tlib-version&gt;</span>
+
+<span class="nt">&lt;short-name&gt;</span>wwel<span class="nt">&lt;/short-name&gt;</span>
+
+<span class="nt">&lt;function&gt;</span>
+	<span class="nt">&lt;name&gt;</span>vs<span class="nt">&lt;/name&gt;</span>
+	<span class="nt">&lt;function-class&gt;</span>com.nmote.wwel.Functions<span class="nt">&lt;/function-class&gt;</span>
+	<span class="nt">&lt;function-signature&gt;</span>
+		java.lang.Object findOnValueStack(java.lang.String)
+	<span class="nt">&lt;/function-signature&gt;</span>
+<span class="nt">&lt;/function&gt;</span>
+
+<span class="nt">&lt;function&gt;</span>
+	<span class="nt">&lt;name&gt;</span>name<span class="nt">&lt;/name&gt;</span>
+	<span class="nt">&lt;function-class&gt;</span>com.nmote.wwel.Functions<span class="nt">&lt;/function-class&gt;</span>
+	<span class="nt">&lt;function-signature&gt;</span>
+		java.lang.Object getActionName()
+	<span class="nt">&lt;/function-signature&gt;</span>
+<span class="nt">&lt;/function&gt;</span>
+
+<span class="nt">&lt;function&gt;</span>
+	<span class="nt">&lt;name&gt;</span>top<span class="nt">&lt;/name&gt;</span>
+	<span class="nt">&lt;function-class&gt;</span>com.nmote.wwel.Functions<span class="nt">&lt;/function-class&gt;</span>
+	<span class="nt">&lt;function-signature&gt;</span>
+		java.lang.Object getTopOfValueStack()
+	<span class="nt">&lt;/function-signature&gt;</span>
+<span class="nt">&lt;/function&gt;</span>
+
+<span class="nt">&lt;/taglib&gt;</span>
+</code></pre>
+</div>
+
+<p><strong>Functions.java</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="kn">package</span> <span class="n">com</span><span class="o">.</span><span class="na">nmote</span><span class="o">.</span><span class="na">wwel</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">com.opensymphony.xwork.ActionContext</span><span class="o">;</span>
+
+<span class="cm">/**
+ * Utility functions for accessing value stack and action context
+ * from JSP 2.0 EL taglibs.
+ */</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Functions</span> <span class="o">{</span>
+
+	<span class="kd">public</span> <span class="kd">static</span> <span class="n">Object</span> <span class="n">findOnValueStack</span><span class="o">(</span><span class="n">String</span> <span class="n">expr</span><span class="o">)</span> <span class="o">{</span>
+		<span class="n">ActionContext</span> <span class="n">a</span> <span class="o">=</span> <span class="n">ActionContext</span><span class="o">.</span><span class="na">getContext</span><span class="o">();</span>
+		<span class="n">Object</span> <span class="n">value</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="na">getValueStack</span><span class="o">().</span><span class="na">findValue</span><span class="o">(</span><span class="n">expr</span><span class="o">);</span>
+		<span class="k">return</span> <span class="n">value</span><span class="o">;</span>
+	<span class="o">}</span>
+
+	<span class="kd">public</span> <span class="kd">static</span> <span class="n">Object</span> <span class="n">getTopOfValueStack</span><span class="o">()</span> <span class="o">{</span>
+		<span class="n">ActionContext</span> <span class="n">a</span> <span class="o">=</span> <span class="n">ActionContext</span><span class="o">.</span><span class="na">getContext</span><span class="o">();</span>
+		<span class="n">Object</span> <span class="n">value</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="na">getValueStack</span><span class="o">().</span><span class="na">peek</span><span class="o">();</span>
+		<span class="k">return</span> <span class="n">value</span><span class="o">;</span>
+	<span class="o">}</span>
+
+	<span class="kd">public</span> <span class="kd">static</span> <span class="n">Object</span> <span class="n">getActionName</span><span class="o">()</span> <span class="o">{</span>
+		<span class="n">ActionContext</span> <span class="n">a</span> <span class="o">=</span> <span class="n">ActionContext</span><span class="o">.</span><span class="na">getContext</span><span class="o">();</span>
+		<span class="n">Object</span> <span class="n">value</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+		<span class="k">return</span> <span class="n">value</span><span class="o">;</span>
+	<span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-site/blob/2b2ec9b3/content/tag-developers/action-tag.html
----------------------------------------------------------------------
diff --git a/content/tag-developers/action-tag.html b/content/tag-developers/action-tag.html
new file mode 100644
index 0000000..8f69cbc
--- /dev/null
+++ b/content/tag-developers/action-tag.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Tag Developers Guide (WIP)</title>
+
+  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts" class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://apache.org/foundation/thanks.html">Thanks!</a></li>
+                <li><a href="http://apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/security/">Security Guide</a></li>
+                <li><a href="/core-developers/">Core Developers Guide</a></li>
+                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
+                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
+                <li><a href="/plugins/">Plugins</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/docs/tutorials.html">Tutorials - DEPRECATED</a></li>
+                <li><a href="/docs/faqs.html">FAQs - DEPRECATED</a></li>
+                <li><a href="/docs/guides.html">Guides - DEPRECATED</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a href="https://git-wip-us.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/tag-developers/action-tag.md" title="Edit this page on GitHub">Edit on GitHub</a>
+    <h1 id="action">action</h1>
+
+<p>Please make sure you have read the <a href="tag-syntax.html">Tag Syntax</a> document and understand how tag attribute syntax works.</p>
+
+<h2 id="description">Description</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javadoc|javadoc=true|url=org.apache.struts2.components.ActionComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<p>Parameters can be passed to the action using nested <a href="param-tag.html">param</a> tags.</p>
+
+<h2 id="placement-in-context">Placement in context</h2>
+
+<p>The action will not be published to the context until the whole tag is evaluated, meaning that inside the body of the tag, 
+the action cannot be accessed, For example:</p>
+
+<pre><code class="language-jsp">&lt;s:action var="myAction" name="MyAction" namespace="/"&gt;
+    Is "myAction" null inside the tag? &lt;s:property value="#myAction == null" /&gt;
+&lt;/s:action&gt;
+    Is "myAction" null outside the tag? &lt;s:property value="#myAction == null" /&gt;
+</code></pre>
+
+<p>Will print:</p>
+
+<p>Is “myAction” null inside the tag? true</p>
+
+<p>Is “myAction” null outside the tag? false</p>
+
+<h2 id="parameters">Parameters</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=tagattributes|javadoc=false|url=struts2-tags/action.html</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<h2 id="examples">Examples</h2>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=javacode|javadoc=true|lang=java|url=org.apache.struts2.components.ActionComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=strutsxml|javadoc=true|lang=xml|url=org.apache.struts2.components.ActionComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="err">snippet:id=example|javadoc=true|lang=xml|url=org.apache.struts2.components.ActionComponent</span><span class="p">}</span><span class="w">
+</span></code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>