struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From git-site-r...@apache.org
Subject [09/11] struts-site git commit: Updates production by Jenkins
Date Thu, 21 Sep 2017 10:05:47 GMT
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>


Mime
View raw message