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

Reply via email to