You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by jo...@apache.org on 2015/06/14 12:53:19 UTC

[07/16] struts-examples git commit: Unify artifact names and use "-" instead of "_"

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/actionmessage.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/actionmessage.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/actionmessage.ftl
new file mode 100644
index 0000000..07174dd
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/actionmessage.ftl
@@ -0,0 +1,43 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if (actionMessages?? && actionMessages?size > 0 && !parameters.isEmptyList)>
+	<ul<#rt/>
+<#if parameters.id?if_exists != "">
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#if parameters.cssClass??>
+ class="${parameters.cssClass?html}"<#rt/>
+<#else>
+ class="actionMessage"<#rt/>
+</#if>
+<#if parameters.cssStyle??>
+ style="${parameters.cssStyle?html}"<#rt/>
+</#if>
+>
+		<#list actionMessages as message>
+            <#if message?if_exists != "">
+                <li><span><#if parameters.escape>${message!?html}<#else>${message!}</#if></span></li>
+            </#if>
+		</#list>
+	</ul>
+</#if>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/checkbox.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/checkbox.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/checkbox.ftl
new file mode 100644
index 0000000..1ef6b03
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/checkbox.ftl
@@ -0,0 +1,50 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<input type="checkbox" name="${parameters.name?html}" value="${parameters.fieldValue?html}"<#rt/>
+<#if parameters.nameValue?? && parameters.nameValue>
+ checked="checked"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#if parameters.readonly?default(false)>
+ readonly="readonly"<#rt/>
+</#if>
+<#if parameters.tabindex??>
+ tabindex="${parameters.tabindex?html}"<#rt/>
+</#if>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" />
+<#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+/><input type="hidden" id="__checkbox_${parameters.id?html}" name="__checkbox_${parameters.name?html}" value="${parameters.fieldValue?html}"<#rt/>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+ />

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/checkboxlist.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/checkboxlist.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/checkboxlist.ftl
new file mode 100644
index 0000000..3ce8686
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/checkboxlist.ftl
@@ -0,0 +1,113 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#assign itemCount = 0/>
+<#if parameters.list??>
+<@s.iterator value="parameters.list">
+    <#assign itemCount = itemCount + 1/>
+    <#if parameters.listKey??>
+        <#assign itemKey = stack.findValue(parameters.listKey)/>
+        <#else>
+            <#assign itemKey = stack.findValue('top')/>
+    </#if>
+    <#if parameters.listValue??>
+        <#assign itemValue = stack.findString(parameters.listValue)?default("")/>
+        <#else>
+            <#assign itemValue = stack.findString('top')/>
+    </#if>
+    <#if parameters.listCssClass??>
+        <#if stack.findString(parameters.listCssClass)??>
+          <#assign itemCssClass= stack.findString(parameters.listCssClass)/>
+        <#else>
+          <#assign itemCssClass = ''/>
+        </#if>
+    </#if>
+    <#if parameters.listCssStyle??>
+        <#if stack.findString(parameters.listCssStyle)??>
+          <#assign itemCssStyle= stack.findString(parameters.listCssStyle)/>
+        <#else>
+          <#assign itemCssStyle = ''/>
+        </#if>
+    </#if>
+    <#if parameters.listTitle??>
+        <#if stack.findString(parameters.listTitle)??>
+          <#assign itemTitle= stack.findString(parameters.listTitle)/>
+        <#else>
+          <#assign itemTitle = ''/>
+        </#if>
+    </#if>
+    <#assign itemKeyStr=itemKey.toString() />
+<input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}"<#rt/>
+    <#if parameters.id??>
+       id="${parameters.id?html}-${itemCount}"<#rt/>
+    <#else>
+       id="${parameters.name?html}-${itemCount}"<#rt/>
+    </#if>
+    <#if tag.contains(parameters.nameValue, itemKey)>
+       checked="checked"<#rt/>
+    </#if>
+    <#if parameters.disabled?default(false)>
+       disabled="disabled"<#rt/>
+    </#if>
+    <#if itemCssClass?if_exists != "">
+     class="${itemCssClass?html}"<#rt/>
+    <#else>
+        <#if parameters.cssClass??>
+     class="${parameters.cssClass?html}"<#rt/>
+        </#if>
+    </#if>
+    <#if itemCssStyle?if_exists != "">
+     style="${itemCssStyle?html}"<#rt/>
+    <#else>
+        <#if parameters.cssStyle??>
+     style="${parameters.cssStyle?html}"<#rt/>
+        </#if>
+    </#if>
+    <#if itemTitle?if_exists != "">
+     title="${itemTitle?html}"<#rt/>
+    <#else>
+        <#if parameters.title??>
+     title="${parameters.title?html}"<#rt/>
+        </#if>
+    </#if>
+    <#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" />
+    <#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+    <#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+    <#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+        />
+<label<#rt/> 
+    <#if parameters.id??>
+        for="${parameters.id?html}-${itemCount}"<#rt/>
+    <#else>
+        for="${parameters.name?html}-${itemCount}"<#rt/>
+    </#if>
+        class="checkboxLabel">${itemValue?html}</label>
+</...@s.iterator>
+    <#else>
+    &nbsp;
+</#if>
+<input type="hidden" id="__multiselect_${parameters.id?html}" name="__multiselect_${parameters.name?html}"
+       value=""<#rt/>
+<#if parameters.disabled?default(false)>
+       disabled="disabled"<#rt/>
+</#if>
+        />

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/combobox.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/combobox.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/combobox.ftl
new file mode 100644
index 0000000..760ad71
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/combobox.ftl
@@ -0,0 +1,103 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<script type="text/javascript">
+	function autoPopulate_${parameters.escapedId?html}(targetElement) {
+		<#if parameters.headerKey?? && parameters.headerValue??>
+		if (targetElement.options[targetElement.selectedIndex].value == '${parameters.headerKey?html}') {
+			return;
+		}
+		</#if>
+		<#if parameters.emptyOption?default(false)>
+		if (targetElement.options[targetElement.selectedIndex].value == '') {
+		    return;
+		}
+		</#if>
+		targetElement.form.elements['${parameters.name?html}'].value=targetElement.options[targetElement.selectedIndex].value;
+	}
+</script>
+<#include "/${parameters.templateDir}/simple/text.ftl" />
+<br />
+<#if parameters.list??>
+<select onChange="autoPopulate_${parameters.escapedId?html}(this);"<#rt/>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" />
+    <#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+    </#if>
+>
+	<#if (parameters.headerKey?? && parameters.headerValue??)>
+		<option value="${parameters.headerKey?html}">${parameters.headerValue?html}</option>
+	</#if>
+	<#if parameters.emptyOption?default(false)>
+	    <option value=""></option>
+	</#if>
+    <@s.iterator value="parameters.list">
+    <#if parameters.listKey??>
+    	<#assign tmpListKey = stack.findString(parameters.listKey) />
+    <#else>
+    	<#assign tmpListKey = stack.findString('top') />
+    </#if>
+    <#if parameters.listValue??>
+    	<#assign tmpListValue = stack.findString(parameters.listValue) />
+    <#else>
+    	<#assign tmpListValue = stack.findString('top') />
+    </#if>
+    <#if parameters.listCssClass??>
+        <#if stack.findString(parameters.listCssClass)??>
+          <#assign itemCssClass= stack.findString(parameters.listCssClass)/>
+        <#else>
+          <#assign itemCssClass = ''/>
+        </#if>
+    </#if>
+    <#if parameters.listCssStyle??>
+        <#if stack.findString(parameters.listCssStyle)??>
+          <#assign itemCssStyle= stack.findString(parameters.listCssStyle)/>
+        <#else>
+          <#assign itemCssStyle = ''/>
+        </#if>
+    </#if>
+    <#if parameters.listTitle??>
+        <#if stack.findString(parameters.listTitle)??>
+          <#assign itemTitle= stack.findString(parameters.listTitle)/>
+        <#else>
+          <#assign itemTitle = ''/>
+        </#if>
+    </#if>
+    <option value="${tmpListKey?html}"<#rt/>
+        <#if (parameters.nameValue == tmpListKey)>
+ selected="selected"<#rt/>
+        </#if>
+        <#if itemCssClass?if_exists != "">
+ class="${itemCssClass?html}"<#rt/>
+        </#if>
+        <#if itemCssStyle?if_exists != "">
+ style="${itemCssStyle?html}"<#rt/>
+        </#if>
+        <#if itemTitle?if_exists != "">
+ title="${itemTitle?html}"<#rt/>
+        </#if>
+    ><#t/>
+            ${tmpListValue?html}<#t/>
+    </option><#lt/>
+    </...@s.iterator>
+</select>
+</#if>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/common-attributes.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/common-attributes.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/common-attributes.ftl
new file mode 100644
index 0000000..6056654
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/common-attributes.ftl
@@ -0,0 +1,25 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if parameters.accesskey??>
+ accesskey="${parameters.accesskey?html}" 
+</#if>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/controlfooter.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/controlfooter.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/controlfooter.ftl
new file mode 100644
index 0000000..32bba27
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/controlfooter.ftl
@@ -0,0 +1,22 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/controlheader.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/controlheader.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/controlheader.ftl
new file mode 100644
index 0000000..32bba27
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/controlheader.ftl
@@ -0,0 +1,22 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/css.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/css.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/css.ftl
new file mode 100644
index 0000000..6623c1d
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/css.ftl
@@ -0,0 +1,35 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/>
+<#if parameters.cssClass?? && !(hasFieldErrors && parameters.cssErrorClass??)>
+ class="${parameters.cssClass?html}"<#rt/>
+<#elseif parameters.cssClass?? && (hasFieldErrors && parameters.cssErrorClass??)>
+ class="${parameters.cssClass?html} ${parameters.cssErrorClass?html}"<#rt/>
+<#elseif !(parameters.cssClass??) && (hasFieldErrors && parameters.cssErrorClass??)>
+ class="${parameters.cssErrorClass?html}"<#rt/>
+</#if>
+<#if parameters.cssStyle?? && !(hasFieldErrors && (parameters.cssErrorStyle?? || parameters.cssErrorClass??))>
+ style="${parameters.cssStyle?html}"<#rt/>
+<#elseif hasFieldErrors && parameters.cssErrorStyle??>
+ style="${parameters.cssErrorStyle?html}"<#rt/>
+</#if>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/debug.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/debug.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/debug.ftl
new file mode 100644
index 0000000..8b2db3d
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/debug.ftl
@@ -0,0 +1,82 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<script type="text/javascript">
+<!--
+    function toggleDebug(debugId) {
+        var debugDiv = document.getElementById(debugId);
+        if (debugDiv) {
+            var display = debugDiv.style.display;
+            if (display == 'none') {
+                debugDiv.style.display = 'block';
+            } else if (display == 'block') {
+                debugDiv.style.display = 'none';
+            }
+        }
+    }
+-->
+</script>
+<p />
+
+<a href="#" onclick="toggleDebug('<#if parameters.id?if_exists != "">${parameters.id?html}<#else>debug</#if>');return false;">[Debug]</a>
+<div style="display:none" id="<#if parameters.id?if_exists != "">${parameters.id?html}<#else>debug</#if>">
+<h2>Struts ValueStack Debug</h2>
+<p />
+
+<h3>Value Stack Contents</h3>
+<table border="0" cellpadding="2" cellspacing="0" bgcolor="#DDDDDD">
+    <tr><th>Object</th><th>Property Name</th><th>Property Value</th></tr>
+
+    <#assign index=1>
+    <#list parameters.stackValues as stackObject>
+    <tr>
+        <td rowspan="${stackObject.value.size()}">${stackObject.key}</td>
+
+        <#assign renderRow=false>
+        <#list stackObject.value.keySet() as propertyName>
+            <#if renderRow==true></tr><tr><#else> <#assign renderRow=false> </#if>
+            <td bgcolor="<#if (index % 2) == 0>#BBBBBB<#else>#CCCCCC</#if>">${propertyName}</td>
+            <td bgcolor="<#if (index % 2) == 0>#BBBBBB<#else>#CCCCCC</#if>"><#if stackObject.value.get(propertyName)??>${stackObject.value.get(propertyName).toString()?html}<#else>null</#if></td>
+    </tr>
+            <#assign index= index + 1>
+        </#list>
+    </#list>
+</table>
+<p />
+
+<h3>Stack Context</h3>
+<i>These items are available using the #key notation</i>
+<table border="0" cellpadding="2" cellspacing="0" bgcolor="#DDDDDD">
+    <tr>
+        <th>Key</th><th>Value</th>
+    </tr>
+
+    <#assign index=1>
+    <#list stack.context.keySet() as contextKey>
+    <tr bgcolor="<#if (index % 2) == 0>#BBBBBB<#else>#CCCCCC</#if>">
+        <td>${contextKey}</td>
+        <td><#if stack.context.get(contextKey)??>${struts.toStringSafe(stack.context.get(contextKey))?html}<#else>null</#if></td>
+    </tr>
+        <#assign index= index + 1>
+    </#list>
+</table>
+</div>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/div-close.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/div-close.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/div-close.ftl
new file mode 100644
index 0000000..1957b64
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/div-close.ftl
@@ -0,0 +1,23 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/div.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/div.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/div.ftl
new file mode 100644
index 0000000..5c9365a
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/div.ftl
@@ -0,0 +1,32 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<div<#rt/>
+<#if parameters.id??> id="${parameters.id?html}"<#rt/></#if>
+<#if parameters.name??> name="${parameters.name?html}"<#rt/></#if>
+<#if parameters.cssClass??> class="${parameters.cssClass?html}"<#rt/></#if>
+<#if parameters.cssStyle??> style="${parameters.cssStyle?html}"<#rt/></#if>
+<#if parameters.title??> title="${parameters.title?html}"<#rt/></#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/doubleselect.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/doubleselect.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/doubleselect.ftl
new file mode 100644
index 0000000..8880377
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/doubleselect.ftl
@@ -0,0 +1,198 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#include "/${parameters.templateDir}/simple/select.ftl" />
+<#assign startCount = 0/>
+<#if parameters.headerKey?? && parameters.headerValue??>
+    <#assign startCount = startCount + 1/>
+</#if>
+<#if parameters.emptyOption??>
+    <#assign startCount = startCount + 1/>
+</#if>
+
+<br/>
+<select<#rt/>
+        name="${parameters.doubleName?default("")?html}"<#rt/>
+<#if parameters.disabled?default(false)>
+        disabled="disabled"<#rt/>
+</#if>
+<#if parameters.doubleTabindex??>
+        tabindex="${parameters.doubleTabindex?html}"<#rt/>
+</#if>
+<#if parameters.doubleId??>
+        id="${parameters.doubleId?html}"<#rt/>
+</#if>
+<#if parameters.doubleCss??>
+        class="${parameters.doubleCss?html}"<#rt/>
+</#if>
+<#if parameters.doubleStyle??>
+        style="${parameters.doubleStyle?html}"<#rt/>
+</#if>
+<#if parameters.title??>
+        title="${parameters.title?html}"<#rt/>
+</#if>
+<#if parameters.multiple?default(false)>
+        multiple="multiple"<#rt/>
+</#if>
+<#if parameters.get("doubleSize")??>
+        size="${parameters.get("doubleSize")?html}"<#rt/>
+</#if>
+<#if parameters.doubleMultiple?default(false)>
+        multiple="multiple"<#rt/>
+</#if>
+<#if parameters.doubleDisabled?default(false)>
+        disabled="disabled"<#rt/>
+</#if>
+        >
+</select>
+<#if parameters.doubleMultiple?default(false)>
+<input type="hidden" id="__multiselect_${parameters.doubleId?html}"
+       name="__multiselect_${parameters.doubleName?default("")?html}" value=""<#rt/>
+    <#if parameters.doubleDisabled?default(false)>
+       disabled="disabled"<#rt/>
+    </#if>
+        />
+</#if>
+<script type="text/javascript">
+    <#assign itemCount = startCount/>
+    var ${parameters.id}Group = new Array(${parameters.listSize} + ${startCount});
+    for (i = 0; i < (${parameters.listSize} + ${startCount}); i++)
+        ${parameters.id}Group[i] = new Array();
+
+    <@s.iterator value="parameters.list">
+        <#if parameters.listKey??>
+            <#assign itemKey = stack.findValue(parameters.listKey)/>
+            <#else>
+                <#assign itemKey = stack.findValue('top')/>
+        </#if>
+        <#if parameters.listValue??>
+            <#assign itemValue = stack.findString(parameters.listValue)/>
+            <#else>
+                <#assign itemValue = stack.findString('top')/>
+        </#if>
+        <#assign doubleItemCount = 0/>
+        <#if parameters.doubleHeaderKey?? && parameters.doubleHeaderValue??>
+        ${parameters.id}Group[${itemCount}][${doubleItemCount}] = new Option("${doubleHeaderValue?js_string}", "${doubleHeaderKey?js_string}");
+            <#assign doubleItemCount = doubleItemCount + 1/>
+        </#if>
+        <#if parameters.doubleEmptyOption??>
+        ${parameters.id}Group[${itemCount}][${doubleItemCount}] = new Option("", "");
+            <#assign doubleItemCount = doubleItemCount + 1/>
+        </#if>
+    <@s.iterator value="${parameters.doubleList}">
+        <#if parameters.doubleListKey??>
+            <#assign doubleItemKey = stack.findValue(parameters.doubleListKey)/>
+            <#else>
+                <#assign doubleItemKey = stack.findValue('top')/>
+        </#if>
+        <#assign doubleItemKeyStr = doubleItemKey.toString() />
+        <#if parameters.doubleListValue??>
+            <#assign doubleItemValue = stack.findString(parameters.doubleListValue)/>
+            <#else>
+                <#assign doubleItemValue = stack.findString('top')/>
+        </#if>
+        <#if parameters.doubleListCssClass??>
+            <#if stack.findString(parameters.doubleListCssClass)??>
+              <#assign itemDoubleCssClass= stack.findString(parameters.doubleListCssClass)/>
+            <#else>
+              <#assign itemDoubleCssClass = ''/>
+            </#if>
+        </#if>
+        <#if parameters.doubleListCssStyle??>
+            <#if stack.findString(parameters.doubleListCssStyle)??>
+              <#assign itemDoubleCssStyle= stack.findString(parameters.doubleListCssStyle)/>
+            <#else>
+              <#assign itemDoubleCssStyle = ''/>
+            </#if>
+        </#if>
+        <#if parameters.doubleListTitle??>
+            <#if stack.findString(parameters.doubleListTitle)??>
+              <#assign itemDoubleTitle= stack.findString(parameters.doubleListTitle)/>
+            <#else>
+              <#assign itemDoubleTitle = ''/>
+            </#if>
+        </#if>
+    ${parameters.id}Group[${itemCount}][${doubleItemCount}] = new Option("${doubleItemValue?js_string}", "${doubleItemKeyStr?js_string}");
+        <#if itemDoubleCssClass?if_exists != "">
+    ${parameters.id}Group[${itemCount}][${doubleItemCount}].setAttribute("class","${itemDoubleCssClass?html}");
+        </#if>
+        <#if itemDoubleCssStyle?if_exists != "">
+        ${parameters.id}Group[${itemCount}][${doubleItemCount}].setAttribute("style","${itemDoubleCssStyle?html}");
+        </#if>
+        <#if itemDoubleTitle?if_exists != "">
+        ${parameters.id}Group[${itemCount}][${doubleItemCount}].setAttribute("title","${itemDoubleTitle?html}");
+        </#if>
+
+        <#assign doubleItemCount = doubleItemCount + 1/>
+    </...@s.iterator>
+        <#assign itemCount = itemCount + 1/>
+    </...@s.iterator>
+
+    var ${parameters.id}Temp = document.${parameters.formName}.${parameters.doubleId};
+    <#assign itemCount = startCount/>
+    <#assign redirectTo = 0/>
+    <@s.iterator value="parameters.list">
+        <#if parameters.listKey??>
+            <#assign itemKey = stack.findValue(parameters.listKey)/>
+            <#else>
+                <#assign itemKey = stack.findValue('top')/>
+        </#if>
+        <#if tag.contains(parameters.nameValue, itemKey)>
+            <#assign redirectTo = itemCount/>
+        </#if>
+        <#assign itemCount = itemCount + 1/>
+    </...@s.iterator>
+    ${parameters.id}Redirect(${redirectTo});
+    function ${parameters.id}Redirect(x) {
+        var selected = false;
+        for (m = ${parameters.id}Temp.options.length - 1; m >= 0; m--) {
+            ${parameters.id}Temp.remove(m);
+        }
+
+        for (i = 0; i < ${parameters.id}Group[x].length; i++) {
+            ${parameters.id}Temp.options[i] = new Option(${parameters.id}Group[x][i].text, ${parameters.id}Group[x][i].value);
+        <#if parameters.doubleNameValue?exists>
+            <#if parameters.doubleMultiple?exists>
+                for (j = 0; j < ${parameters.doubleNameValue}.
+                length;
+                j++
+            )
+                {
+                    if (${parameters.id}Temp.options[i].value == ${parameters.doubleNameValue?js_string}[j]) {
+                        ${parameters.id}Temp.options[i].selected = true;
+                        selected = true;
+                    }
+                }
+                <#else>
+                    if (${parameters.id}Temp.options[i].value == '${parameters.doubleNameValue?js_string}') {
+                        ${parameters.id}Temp.options[i].selected = true;
+                        selected = true;
+                    }
+            </#if>
+        </#if>
+        }
+
+        if ((${parameters.id}Temp.options.length > 0) && (! selected)) {
+            ${parameters.id}Temp.options[0].selected = true;
+        }
+    }
+</script>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/dynamic-attributes.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/dynamic-attributes.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/dynamic-attributes.ftl
new file mode 100644
index 0000000..485c20c
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/dynamic-attributes.ftl
@@ -0,0 +1,34 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if (parameters.dynamicAttributes?? && parameters.dynamicAttributes?size > 0)><#rt/>
+<#assign aKeys = parameters.dynamicAttributes.keySet()><#rt/>
+<#list aKeys as aKey><#rt/>
+  <#assign keyValue = parameters.dynamicAttributes[aKey]/>
+  <#if keyValue?is_string>
+      <#assign value = struts.translateVariables(keyValue)!keyValue/>
+  <#else>
+      <#assign value = keyValue?string/>
+  </#if>
+ ${aKey}="${value?html}"<#rt/>
+</#list><#rt/>
+</#if><#rt/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/empty.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/empty.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/empty.ftl
new file mode 100644
index 0000000..32bba27
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/empty.ftl
@@ -0,0 +1,22 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/fielderror.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/fielderror.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/fielderror.ftl
new file mode 100644
index 0000000..a37ff1f
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/fielderror.ftl
@@ -0,0 +1,82 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if fieldErrors??><#t/>
+    <#assign eKeys = fieldErrors.keySet()><#t/>
+    <#assign eKeysSize = eKeys.size()><#t/>
+    <#assign doneStartUlTag=false><#t/>
+    <#assign doneEndUlTag=false><#t/>
+    <#assign haveMatchedErrorField=false><#t/>
+    <#if (fieldErrorFieldNames?size > 0) ><#t/>
+        <#list fieldErrorFieldNames as fieldErrorFieldName><#t/>
+            <#list eKeys as eKey><#t/>
+                <#if (eKey = fieldErrorFieldName)><#t/>
+                    <#assign haveMatchedErrorField=true><#t/>
+                    <#assign eValue = fieldErrors[fieldErrorFieldName]><#t/>
+                    <#if (haveMatchedErrorField && (!doneStartUlTag))><#t/>
+                    <ul<#rt/>
+                        <#if parameters.id?if_exists != "">
+                                id="${parameters.id?html}"<#rt/>
+                        </#if>
+                        <#if parameters.cssClass??>
+                                class="${parameters.cssClass?html}"<#rt/>
+                            <#else>
+                                class="errorMessage"<#rt/>
+                        </#if>
+                        <#if parameters.cssStyle??>
+                                style="${parameters.cssStyle?html}"<#rt/>
+                        </#if>
+                            >
+                        <#assign doneStartUlTag=true><#t/>
+                    </#if><#t/>
+                    <#list eValue as eEachValue><#t/>
+                        <li><span><#if parameters.escape>${eEachValue!?html}<#else>${eEachValue!}</#if></span></li>
+                    </#list><#t/>
+                </#if><#t/>
+            </#list><#t/>
+        </#list><#t/>
+        <#if (haveMatchedErrorField && (!doneEndUlTag))><#t/>
+        </ul>
+            <#assign doneEndUlTag=true><#t/>
+        </#if><#t/>
+        <#else><#t/>
+        <#if (eKeysSize > 0)><#t/>
+        <ul<#rt/>
+            <#if parameters.cssClass??>
+                    class="${parameters.cssClass?html}"<#rt/>
+                <#else>
+                    class="errorMessage"<#rt/>
+            </#if>
+            <#if parameters.cssStyle??>
+                    style="${parameters.cssStyle?html}"<#rt/>
+            </#if>
+                >
+            <#list eKeys as eKey><#t/>
+                <#assign eValue = fieldErrors[eKey]><#t/>
+                <#list eValue as eEachValue><#t/>
+                    <li><span><#if parameters.escape>${eEachValue!?html}<#else>${eEachValue!}</#if></span></li>
+                </#list><#t/>
+            </#list><#t/>
+        </ul>
+        </#if><#t/>
+    </#if><#t/>
+</#if><#t/>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/file.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/file.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/file.ftl
new file mode 100644
index 0000000..c7b7a83
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/file.ftl
@@ -0,0 +1,48 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<input type="file"<#rt/>
+ name="${parameters.name?default("")?html}"<#rt/>
+<#if parameters.get("size")??>
+ size="${parameters.get("size")?html}"<#rt/>
+</#if>
+ value=""<#rt/>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#if parameters.accept??>
+ accept="${parameters.accept?html}"<#rt/>
+</#if>
+<#if parameters.tabindex??>
+ tabindex="${parameters.tabindex?html}"<#rt/>
+</#if>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" />
+<#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/form-close.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/form-close.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/form-close.ftl
new file mode 100644
index 0000000..360eef9
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/form-close.ftl
@@ -0,0 +1,113 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+</form>
+
+<#if (parameters.customOnsubmitEnabled?if_exists)>
+<script type="text/javascript">
+<#-- 
+  Enable auto-select of optiontransferselect tag's entries upon containing form's 
+  submission.
+-->
+<#if (parameters.optiontransferselectIds?if_exists?size > 0)>
+	var containingForm = document.getElementById("${parameters.id}");
+	<#assign selectObjIds = parameters.optiontransferselectIds.keySet() />
+	<#list selectObjIds as selectObjectId>
+		StrutsUtils.addEventListener(containingForm, "submit", 
+			function(evt) {
+				var selectObj = document.getElementById("${selectObjectId}");
+				<#if parameters.optiontransferselectIds.get(selectObjectId)??>
+					<#assign selectTagHeaderKey = parameters.optiontransferselectIds.get(selectObjectId)/>
+					selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
+				<#else>
+					selectAllOptionsExceptSome(selectObj, "key", "");
+				</#if>
+			}, true);
+	</#list>
+</#if>
+<#if (parameters.inputtransferselectIds?if_exists?size > 0)>
+	var containingForm = document.getElementById("${parameters.id}");
+	<#assign selectObjIds = parameters.inputtransferselectIds.keySet() />
+	<#list selectObjIds as selectObjectId>
+		StrutsUtils.addEventListener(containingForm, "submit",
+			function(evt) {
+				var selectObj = document.getElementById("${selectObjectId}");
+				<#if parameters.inputtransferselectIds.get(selectObjectId)??>
+					<#assign selectTagHeaderKey = parameters.inputtransferselectIds.get(selectObjectId)/>
+					selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
+				<#else>
+					selectAllOptionsExceptSome(selectObj, "key", "");
+				</#if>
+			}, true);
+	</#list>
+</#if>
+<#if (parameters.optiontransferselectDoubleIds?if_exists?size > 0)>
+	var containingForm = document.getElementById("${parameters.id}");
+	<#assign selectDoubleObjIds = parameters.optiontransferselectDoubleIds.keySet() />
+	<#list selectDoubleObjIds as selectObjId>
+		StrutsUtils.addEventListener(containingForm, "submit", 
+			function(evt) {
+				var selectObj = document.getElementById("${selectObjId}");
+				<#if parameters.optiontransferselectDoubleIds.get(selectObjId)??>
+					<#assign selectTagHeaderKey = parameters.optiontransferselectDoubleIds.get(selectObjId)/>
+					selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
+				<#else>
+					selectAllOptionsExceptSome(selectObj, "key", "");
+				</#if>
+			}, true);
+	</#list>
+</#if>
+
+
+<#--
+	Enable auto-select of all elements of updownselect tag upon its containing form
+	submission
+-->
+<#if (parameters.updownselectIds?if_exists?size > 0)>
+	var containingForm = document.getElementById("${parameters.id}");
+	<#assign tmpIds = parameters.updownselectIds.keySet() />
+	<#list tmpIds as tmpId>
+		StrutsUtils.addEventListener(containingForm, "submit", 
+			function(evt) {
+				var updownselectObj = document.getElementById("${tmpId}");
+				<#if parameters.updownselectIds.get(tmpId)??>
+					<#assign tmpHeaderKey = parameters.updownselectIds.get(tmpId) />
+					selectAllOptionsExceptSome(updownselectObj, "key", "${tmpHeaderKey}");
+				<#else>
+					selectAllOptionsExceptSome(updownselectObj, "key", "");
+				</#if>
+			}, true);
+	</#list>
+</#if>
+</script>
+</#if>
+
+
+<#-- 
+ Code that will add javascript needed for tooltips
+--><#t/>
+<#if (parameters.hasTooltip?default(false))><#t/>
+	<#lt/><!-- javascript that is needed for tooltips -->
+	<#lt/><script type="text/javascript" src='<@s.url value="/struts/domTT.js" includeParams="none" encode="false" />'></script>
+	<#lt/><link rel="stylesheet" type="text/css" href="<@s.url value="/struts/domTT.css" includeParams="none" encode="false" />"/>
+	
+</#if><#t/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/form-common.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/form-common.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/form-common.ftl
new file mode 100644
index 0000000..9b46381
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/form-common.ftl
@@ -0,0 +1,67 @@
+<#--
+/*
+ * $Id: form.ftl 590812 2007-10-31 20:32:54Z apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if (parameters.validate?default(false) == false)><#rt/>
+    <#if parameters.onsubmit??><#rt/>
+        ${tag.addParameter('onsubmit', "${parameters.onsubmit}") }
+    </#if>
+</#if>
+<form<#rt/>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#if parameters.name??>
+ name="${parameters.name?html}"<#rt/>
+</#if>
+<#if parameters.onsubmit??>
+ onsubmit="${parameters.onsubmit?html}"<#rt/>
+</#if>
+<#if parameters.onreset??>
+ onreset="${parameters.onreset?html}"<#rt/>
+</#if>
+<#if parameters.action??>
+ action="${parameters.action?html}"<#rt/>
+</#if>
+<#if parameters.target??>
+ target="${parameters.target?html}"<#rt/>
+</#if>
+<#if parameters.method??>
+ method="${parameters.method?html}"<#rt/>
+<#else>
+ method="post"<#rt/>
+</#if>
+<#if parameters.enctype??>
+ enctype="${parameters.enctype?html}"<#rt/>
+</#if>
+<#if parameters.cssClass??>
+ class="${parameters.cssClass?html}"<#rt/>
+</#if>
+<#if parameters.cssStyle??>
+ style="${parameters.cssStyle?html}"<#rt/>
+</#if>
+<#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#if parameters.acceptcharset??>
+ accept-charset="${parameters.acceptcharset?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/form.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/form.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/form.ftl
new file mode 100644
index 0000000..f02eea9
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/form.ftl
@@ -0,0 +1,27 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/form-common.ftl" />
+<#if parameters.onreset??>
+ onreset="${parameters.onreset?html}"<#rt/>
+</#if>
+>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/head.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/head.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/head.ftl
new file mode 100644
index 0000000..03c3940
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/head.ftl
@@ -0,0 +1,23 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<script src="${base}/struts/utils.js" type="text/javascript"></script>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/hidden.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/hidden.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/hidden.ftl
new file mode 100644
index 0000000..4f91237
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/hidden.ftl
@@ -0,0 +1,41 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<input type="hidden"<#rt/>
+ name="${parameters.name?default("")?html}"<#rt/>
+<#if parameters.nameValue??>
+ value="<@s.property value="parameters.nameValue"/>"<#rt/>
+</#if>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#if parameters.cssClass??>
+ class="${parameters.cssClass?html}"<#rt/>
+</#if>
+<#if parameters.cssStyle??>
+ style="${parameters.cssStyle?html}"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/inputtransferselect.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/inputtransferselect.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/inputtransferselect.ftl
new file mode 100644
index 0000000..610eeb2
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/inputtransferselect.ftl
@@ -0,0 +1,124 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if !stack.findValue("#inputtransferselect_js_included")??><#t/>
+	<script type="text/javascript" src="<@s.url value="/struts/inputtransferselect.js" encode='false' includeParams='none'/>"></script>
+	<#assign temporaryVariable = stack.setValue("#inputtransferselect_js_included", "true") /><#t/>
+</#if><#t/>
+<table border="0">
+<tr>
+<td>
+<#if parameters.leftTitle??><#t/>
+	<label for="leftTitle">${parameters.leftTitle}</label><br />
+</#if><#t/>
+
+
+<input type="text"<#rt/>
+ name="${parameters.name?default("")?html}_input"<#rt/>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#if parameters.readonly?default(false)>
+ readonly="readonly"<#rt/>
+</#if>
+<#if parameters.tabindex??>
+ tabindex="${parameters.tabindex?html}"<#rt/>
+</#if>
+<#if parameters.id??>
+ id="${parameters.id?html}_input"<#rt/>
+</#if>
+<#if parameters.cssClass??>
+ class="${parameters.cssClass?html}"<#rt/>
+</#if>
+<#if parameters.cssStyle??>
+ style="${parameters.cssStyle?html}"<#rt/>
+</#if>
+<#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+/>
+
+
+</td>
+<td valign="middle" align="center">
+	<#assign addLabel=parameters.addLabel?default("->")?html /><#t/>
+	<input type="button"
+		<#if parameters.buttonCssClass??><#t/>
+		 class="${parameters.buttonCssClass?html}"
+		</#if><#t/>
+		<#if parameters.buttonCssStyle??>
+		 style="${parameters.buttonCssStyle?html}"
+		</#if><#t/>
+		 value="${addLabel}" onclick="addOption(document.getElementById('${parameters.id?html}_input'), document.getElementById('${parameters.id?html}'))" /><br /><br />
+	<#t/>
+	<#assign removeLabel=parameters.removeLabel?default("<-")?html /><#t/>
+	<input type="button"
+  		<#if parameters.buttonCssClass??><#t/>
+		 class="${parameters.buttonCssClass?html}"
+		</#if><#t/>
+		<#if parameters.buttonCssStyle??>
+		 style="${parameters.buttonCssStyle?html}"
+		</#if><#t/>
+		 value="${removeLabel}" onclick="removeOptions(document.getElementById('${parameters.id?html}'))" /><br /><br />
+	<#t/>
+	<#assign removeAllLabel=parameters.removeAllLabel?default("<<--")?html /><#t/>
+	<input type="button"
+	    		<#if parameters.buttonCssClass??><#t/>
+		 class="${parameters.buttonCssClass?html}"
+		</#if><#t/>
+		<#if parameters.buttonCssStyle??>
+		 style="${parameters.buttonCssStyle?html}"
+		</#if><#t/>
+		 value="${removeAllLabel}" onclick="removeAllOptions(document.getElementById('${parameters.id?html}'))" /><br /><br />
+</td>
+<td>
+<#if parameters.rightTitle??><#t/>
+	<label for="rightTitle">${parameters.rightTitle}</label><br />
+</#if><#t/>
+<#include "/${parameters.templateDir}/simple/select.ftl" />
+<#if parameters.allowUpDown?default(true)>
+<input type="button" 
+<#if parameters.headerKey??>
+	onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');"
+<#else>
+	onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '');"
+</#if>
+<#if parameters.downLabel??>
+	value="${parameters.downLabel?html}"
+</#if>
+/>
+<input type="button" 
+<#if parameters.headerKey??>
+	onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');"
+<#else>
+	onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '');"
+</#if>
+<#if parameters.upLabel??>
+	value="${parameters.upLabel?html}"
+</#if>
+/>
+</#if>
+</td>
+</tr>
+</table>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/label.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/label.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/label.ftl
new file mode 100644
index 0000000..53524d4
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/label.ftl
@@ -0,0 +1,45 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<label<#rt/>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#if parameters.cssClass??>
+ class="${parameters.cssClass?html}"<#rt/>
+</#if>
+<#if parameters.cssStyle??>
+ style="${parameters.cssStyle?html}"<#rt/>
+</#if>
+<#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#if parameters.for??>
+ for="${parameters.for?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+><#rt/>
+<#if parameters.nameValue??>
+<@s.property value="parameters.nameValue"/><#t/>
+</#if>
+</label>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/optgroup.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/optgroup.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/optgroup.ftl
new file mode 100644
index 0000000..6d503b7
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/optgroup.ftl
@@ -0,0 +1,51 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if parameters.optGroupInternalListUiBeanList??>
+<#assign optGroupInternalListUiBeans=parameters.optGroupInternalListUiBeanList />
+<#list optGroupInternalListUiBeans as optGroupInternalListUiBean>
+<optgroup 
+	<#if optGroupInternalListUiBean.parameters.label??>
+	label="${optGroupInternalListUiBean.parameters.label}"
+	</#if>
+	<#if optGroupInternalListUiBean.parameters.disabled?default(false)>
+	disabled="disabled"
+	</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+>
+
+<#list optGroupInternalListUiBean.parameters.list as optGroupBean>
+<#assign trash=stack.push(optGroupBean) />
+	<#assign tmpKey=stack.findValue(optGroupInternalListUiBean.parameters.listKey) />
+	<#assign tmpValue=stack.findValue(optGroupInternalListUiBean.parameters.listValue) />
+	<#assign tmpKeyStr = tmpKey.toString() />
+	<option value="${tmpKeyStr?html}"
+	<#if tag.contains(parameters.nameValue, tmpKeyStr) == true>
+	selected="selected"
+	</#if>
+	>${tmpValue?html}
+	</option>
+<#assign trash=stack.pop() />
+</#list>
+</optgroup>
+</#list>
+</#if>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/optiontransferselect.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/optiontransferselect.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/optiontransferselect.ftl
new file mode 100644
index 0000000..62136f7
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/optiontransferselect.ftl
@@ -0,0 +1,301 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if !stack.findValue("#optiontransferselect_js_included")??><#t/>
+	<script type="text/javascript" src="<@s.url value="/struts/optiontransferselect.js" encode='false' includeParams='none'/>"></script>
+	<#assign temporaryVariable = stack.setValue("#optiontransferselect_js_included", "true") /><#t/>
+</#if><#t/>
+<table border="0">
+<tr>
+<td>
+<#if parameters.leftTitle??><#t/>
+	<label for="leftTitle">${parameters.leftTitle}</label><br />
+</#if><#t/>
+<#include "/${parameters.templateDir}/simple/select.ftl" />
+<#if parameters.allowUpDownOnLeft?default(true)>
+<input type="button"
+	onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', <#if parameters.headerKey??>'${parameters.headerKey}'<#else>''</#if>);<#if parameters.upDownOnLeftOnclick?has_content>${parameters.upDownOnLeftOnclick};</#if>"
+<#if parameters.leftDownLabel??>
+	value="${parameters.leftDownLabel?html}"
+</#if>
+/>
+<input type="button"
+	onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', <#if parameters.headerKey??>'${parameters.headerKey}'<#else>''</#if>);<#if parameters.upDownOnLeftOnclick?has_content>${parameters.upDownOnLeftOnclick};</#if>"
+<#if parameters.leftUpLabel??>
+	value="${parameters.leftUpLabel?html}"
+</#if>
+/>
+</#if>
+
+</td>
+<td valign="middle" align="center">
+	<#if parameters.allowAddToLeft?default(true)><#t/>
+		<#assign addToLeftLabel = parameters.addToLeftLabel?default("<-")?html/><#t/>
+		<#if parameters.doubleHeaderKey??><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${addToLeftLabel}" onclick="moveSelectedOptions(document.getElementById('${parameters.doubleId?html}'), document.getElementById('${parameters.id?html}'), false, '${parameters.doubleHeaderKey}', '');<#if parameters.addToLeftOnclick?has_content>${parameters.addToLeftOnclick};</#if>" /><br /><br />
+		<#else><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${addToLeftLabel}" onclick="moveSelectedOptions(document.getElementById('${parameters.doubleId?html}'), document.getElementById('${parameters.id?html}'), false, '');<#if parameters.addToLeftOnclick?has_content>${parameters.addToLeftOnclick};</#if>" /><br /><br />
+		</#if><#t/>
+	</#if><#t/>
+	<#if parameters.allowAddToRight?default(true)><#t/>
+		<#assign addToRightLabel=parameters.addToRightLabel?default("->")?html /><#t/>
+		<#if parameters.headerKey??><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${addToRightLabel}" onclick="moveSelectedOptions(document.getElementById('${parameters.id?html}'), document.getElementById('${parameters.doubleId?html}'), false, '${parameters.headerKey}', '');<#if parameters.addToRightOnclick?has_content>${parameters.addToRightOnclick};</#if>" /><br /><br />
+		<#else><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${addToRightLabel}" onclick="moveSelectedOptions(document.getElementById('${parameters.id?html}'), document.getElementById('${parameters.doubleId?html}'), false, '');<#if parameters.addToRightOnclick?has_content>${parameters.addToRightOnclick};</#if>" /><br /><br />
+		</#if><#t/>
+	</#if><#t/>
+	<#if parameters.allowAddAllToLeft?default(true)><#t/>
+		<#assign addAllToLeftLabel=parameters.addAllToLeftLabel?default("<<--")?html /><#t/>
+		<#if parameters.doubleHeaderKey??><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle}"
+			</#if><#t/>
+			 value="${addAllToLeftLabel}" onclick="moveAllOptions(document.getElementById('${parameters.doubleId?html}'), document.getElementById('${parameters.id?html}'), false, '${parameters.doubleHeaderKey}', '');<#if parameters.addAllToLeftOnclick?has_content>${parameters.addAllToLeftOnclick};</#if>" /><br /><br />
+		<#else><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${addAllToLeftLabel}" onclick="moveAllOptions(document.getElementById('${parameters.doubleId?html}'), document.getElementById('${parameters.id?html}'), false, '');<#if parameters.addAllToLeftOnclick?has_content>${parameters.addAllToLeftOnclick};</#if>" /><br /><br />
+		</#if><#t/>
+	</#if><#t/>
+	<#if parameters.allowAddAllToRight?default(true)><#t/>
+		<#assign addAllToRightLabel=parameters.addAllToRightLabel?default("-->>")?html /><#t/>
+		<#if parameters.headerKey??><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${addAllToRightLabel}" onclick="moveAllOptions(document.getElementById('${parameters.id?html}'), document.getElementById('${parameters.doubleId?html}'), false, '${parameters.headerKey}', '');<#if parameters.addAllToRightOnclick?has_content>${parameters.addAllToRightOnclick};</#if>" /><br /><br />
+		<#else><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${addAllToRightLabel}" onclick="moveAllOptions(document.getElementById('${parameters.id?html}'), document.getElementById('${parameters.doubleId?html}'), false, '');<#if parameters.addAllToRightOnclick?has_content>${parameters.addAllToRightOnclick};</#if>" /><br /><br />
+		</#if><#t/>
+	</#if><#t/>
+	<#if parameters.allowSelectAll?default(true)><#t/>
+		<#assign selectAllLabel=parameters.selectAllLabel?default("<*>")?html /><#t/>
+		<#if parameters.headerKey?? && parameters.doubleHeaderKey??><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${selectAllLabel}" onclick="selectAllOptionsExceptSome(document.getElementById('${parameters.id?html}'), 'key', '${parameters.headerKey}');selectAllOptionsExceptSome(document.getElementById('${parameters.doubleId?html}'), 'key', '${parameters.doubleHeaderKey}');<#if parameters.selectAllOnclick?has_content>${parameters.selectAllOnclick};</#if>" /><br /><br />
+		<#elseif parameters.headerKey??><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${selectAllLabel}" onclick="selectAllOptionsExceptSome(document.getElementById('${parameters.id?html}'), 'key', '${parameters.headerKey}');selectAllOptions(document.getElementById('${parameters.doubleId?html}'));<#if parameters.selectAllOnclick?has_content>${parameters.selectAllOnclick};</#if>" /><br /><br />
+		<#elseif parameters.doubleHeaderKey??><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${selectAllLabel}" onclick="selectAllOptions(document.getElementById('${parameters.id?html}'));selectAllOptionsExceptSome(document.getElementById('${parameters.doubleId?html}'), 'key', '${parameters.doubleHeaderKey}');<#if parameters.selectAllOnclick?has_content>${parameters.selectAllOnclick};</#if>" /><br /><br />
+		<#else><#t/>
+			<input type="button"
+			<#if parameters.buttonCssClass??><#t/>
+			 class="${parameters.buttonCssClass?html}"
+			</#if><#t/>
+			<#if parameters.buttonCssStyle??><#t/>
+			 style="${parameters.buttonCssStyle?html}"
+			</#if><#t/>
+			 value="${selectAllLabel}" onclick="selectAllOptions(document.getElementById('${parameters.id?html}'));selectAllOptions(document.getElementById('${parameters.doubleId?html}'));<#if parameters.selectAllOnclick?has_content>${parameters.selectAllOnclick};</#if>" /><br /><br />
+		</#if><#t/>
+	</#if><#t/>
+</td>
+<td>
+<#if parameters.rightTitle??><#t/>
+	<label for="rightTitle">${parameters.rightTitle}</label><br />
+</#if><#t/>
+<select
+	name="${parameters.doubleName?default("")?html}"
+	<#if parameters.get("doubleSize")??><#t/>
+	size="${parameters.get("doubleSize")?html}"
+	</#if><#t/>
+	<#if parameters.doubleDisabled?default(false)><#t/>
+	disabled="disabled"
+	</#if><#t/>
+	<#if parameters.doubleMultiple?default(false)><#t/>
+	multiple="multiple"
+	</#if><#t/>
+	<#if parameters.doubleTabindex??><#t/>
+	tabindex="${parameters.tabindex?html}"
+	</#if><#t/>
+	<#if parameters.doubleId??><#t/>
+	id="${parameters.doubleId?html}"
+	</#if><#t/>
+	<#if parameters.doubleCss??><#t/>
+	class="${parameters.doubleCss?html}"
+	</#if><#t/>
+	<#if parameters.doubleStyle??><#t/>
+	style="${parameters.doubleStyle?html}"
+	</#if><#t/>
+    <#if parameters.doubleOnclick??><#t/>
+    onclick="${parameters.doubleOnclick?html}"
+    </#if><#t/>
+    <#if parameters.doubleOndblclick??><#t/>
+    ondblclick="${parameters.doubleOndblclick?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnmousedown??><#t/>
+    onmousedown="${parameters.doubleOnmousedown?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnmouseup??><#t/>
+    onmouseup="${parameters.doubleOnmouseup?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnmousemove??><#t/>
+    onmousemove="${parameters.doubleOnmousemove?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnmouseover??><#t/>
+    onmouseover="${parameters.doubleOnmouseover?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnmouseout??><#t/>
+    onmouseout="${parameters.doubleOnmouseout?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnfocus??><#t/>
+    onfocus="${parameters.doubleOnfocus?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnblur??><#t/>
+    onblur="${parameters.doubleOnblur?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnkeypress??><#t/>
+    onkeypress="${parameters.doubleOnkeypress?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnKeydown??><#t/>
+    onkeydown="${parameters.doubleOnkeydown?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnkeyup??><#t/>
+    onkeyup="${parameters.doubleOnkeyup?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnselect??><#t/>
+    onselect="${parameters.doubleOnselect?html}"
+    </#if><#t/>
+    <#if parameters.doubleOnchange??><#t/>
+    onchange="${parameters.doubleOnchange?html}"
+    </#if><#t/>
+    <#if parameters.doubleAccesskey??><#t/>
+    accesskey="${parameters.doubleAccesskey?html}"
+    </#if>
+>
+	<#if parameters.doubleHeaderKey?? && parameters.doubleHeaderValue??><#t/>
+    <option value="${parameters.doubleHeaderKey?html}">${parameters.doubleHeaderValue?html}</option>
+	</#if><#t/>
+	<#if parameters.doubleEmptyOption?default(false)><#t/>
+    <option value=""></option>
+	</#if><#t/>
+	<@s.iterator value="parameters.doubleList"><#t/>
+        <#if parameters.doubleListKey??><#t/>
+            <#assign doubleItemKey = stack.findValue(parameters.doubleListKey) /><#t/>
+        <#else><#t/>
+            <#assign doubleItemKey = stack.findValue('top') /><#t/>
+        </#if><#t/>
+        <#assign doubleItemKeyStr = doubleItemKey.toString() /><#t/>
+        <#if parameters.doubleListValue??><#t/>
+            <#assign doubleItemValue = stack.findString(parameters.doubleListValue)!"" /><#t/>
+        <#else><#t/>
+            <#assign doubleItemValue = stack.findString('top') /><#t/>
+        </#if><#t/>
+    	<option value="${doubleItemKeyStr?html}"<#rt/>
+        <#if tag.contains(parameters.doubleNameValue, doubleItemKey)><#t/>
+ 		selected="selected"<#rt/>
+        </#if><#t/>
+    	>${doubleItemValue?html}</option><#lt/>
+	</...@s.iterator><#t/>
+</select>
+<#if parameters.doubleMultiple?default(false)>
+<input type="hidden" id="__multiselect_${parameters.doubleId?html}" name="__multiselect_${parameters.doubleName?default("")?html}" value=""<#rt/>
+<#if parameters.doubleDisabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+ />
+</#if>
+<#if parameters.allowUpDownOnRight?default(true)>
+<input type="button"
+	onclick="moveOptionDown(document.getElementById('${parameters.doubleId}'), 'key', <#if parameters.doubleHeaderKey??>'${parameters.doubleHeaderKey}'<#else>''</#if>);<#if parameters.upDownOnRightOnclick?has_content>${parameters.upDownOnRightOnclick};</#if>"
+<#if parameters.rightDownLabel??>
+	value="${parameters.rightDownLabel?html}"
+</#if>
+/>
+<input type="button"
+	onclick="moveOptionUp(document.getElementById('${parameters.doubleId}'), 'key', <#if parameters.doubleHeaderKey??>'${parameters.doubleHeaderKey}'<#else>''</#if>);<#if parameters.upDownOnRightOnclick?has_content>${parameters.upDownOnRightOnclick};</#if>"
+<#if parameters.rightUpLabel??>
+	value="${parameters.rightUpLabel?html}"
+</#if>
+/>
+</#if>
+</td>
+</tr>
+</table>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/password.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/password.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/password.ftl
new file mode 100644
index 0000000..b036b92
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/password.ftl
@@ -0,0 +1,53 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<input type="password"<#rt/>
+ name="${parameters.name?default("")?html}"<#rt/>
+<#if parameters.get("size")??>
+ size="${parameters.get("size")?html}"<#rt/>
+</#if>
+<#if parameters.maxlength??>
+ maxlength="${parameters.maxlength?html}"<#rt/>
+</#if>
+<#if parameters.nameValue?? && parameters.showPassword?default(false)>
+ value="<@s.property value="parameters.nameValue"/>"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#if parameters.readonly?default(false)>
+ readonly="readonly"<#rt/>
+</#if>
+<#if parameters.tabindex??>
+ tabindex="${parameters.tabindex?html}"<#rt/>
+</#if>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" />
+<#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/radiomap.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/radiomap.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/radiomap.ftl
new file mode 100644
index 0000000..34cf1b1
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/radiomap.ftl
@@ -0,0 +1,94 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<@s.iterator value="parameters.list">
+    <#if parameters.listKey??>
+        <#assign itemKey = stack.findValue(parameters.listKey)/>
+    <#else>
+        <#assign itemKey = stack.findValue('top')/>
+    </#if>
+    <#assign itemKeyStr = itemKey.toString() />
+    <#if parameters.listValue??>
+        <#assign itemValue = stack.findString(parameters.listValue)/>
+    <#else>
+        <#assign itemValue = stack.findString('top')/>
+    </#if>
+    <#if parameters.listCssClass??>
+        <#if stack.findString(parameters.listCssClass)??>
+          <#assign itemCssClass= stack.findString(parameters.listCssClass)/>
+        <#else>
+          <#assign itemCssClass = ''/>
+        </#if>
+    </#if>
+    <#if parameters.listCssStyle??>
+        <#if stack.findString(parameters.listCssStyle)??>
+          <#assign itemCssStyle= stack.findString(parameters.listCssStyle)/>
+        <#else>
+          <#assign itemCssStyle = ''/>
+        </#if>
+    </#if>
+    <#if parameters.listTitle??>
+        <#if stack.findString(parameters.listTitle)??>
+          <#assign itemTitle= stack.findString(parameters.listTitle)/>
+        <#else>
+          <#assign itemTitle = ''/>
+        </#if>
+    </#if>
+<input type="radio"<#rt/>
+<#if parameters.name??>
+ name="${parameters.name?html}"<#rt/>
+</#if>
+ id="${parameters.id?html}${itemKeyStr?html}"<#rt/>
+<#if tag.contains(parameters.nameValue?default(''), itemKeyStr)>
+ checked="checked"<#rt/>
+</#if>
+<#if itemKey??>
+ value="${itemKeyStr?html}"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#if parameters.tabindex??>
+ tabindex="${parameters.tabindex?html}"<#rt/>
+</#if>
+<#if itemCssClass?if_exists != "">
+ class="${itemCssClass?html}"<#rt/>
+</#if>
+<#if itemCssStyle?if_exists != "">
+ style="${itemCssStyle?html}"<#rt/>
+</#if>
+<#if itemTitle?if_exists != "">
+ title="${itemTitle?html}"<#rt/>
+<#else>
+    <#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+    </#if>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+/><#rt/>
+<label for="${parameters.id?html}${itemKeyStr?html}"<#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl"/>><#rt/>
+    ${itemValue}<#t/>
+</label>
+</...@s.iterator>
\ No newline at end of file