You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by jo...@apache.org on 2015/06/14 12:53:19 UTC
[07/16] struts-examples git commit: Unify artifact names and use "-"
instead of "_"
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/actionmessage.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/actionmessage.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/actionmessage.ftl
new file mode 100644
index 0000000..07174dd
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/actionmessage.ftl
@@ -0,0 +1,43 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#if (actionMessages?? && actionMessages?size > 0 && !parameters.isEmptyList)>
+ <ul<#rt/>
+<#if parameters.id?if_exists != "">
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#if parameters.cssClass??>
+ class="${parameters.cssClass?html}"<#rt/>
+<#else>
+ class="actionMessage"<#rt/>
+</#if>
+<#if parameters.cssStyle??>
+ style="${parameters.cssStyle?html}"<#rt/>
+</#if>
+>
+ <#list actionMessages as message>
+ <#if message?if_exists != "">
+ <li><span><#if parameters.escape>${message!?html}<#else>${message!}</#if></span></li>
+ </#if>
+ </#list>
+ </ul>
+</#if>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/checkbox.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/checkbox.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/checkbox.ftl
new file mode 100644
index 0000000..1ef6b03
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/checkbox.ftl
@@ -0,0 +1,50 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<input type="checkbox" name="${parameters.name?html}" value="${parameters.fieldValue?html}"<#rt/>
+<#if parameters.nameValue?? && parameters.nameValue>
+ checked="checked"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#if parameters.readonly?default(false)>
+ readonly="readonly"<#rt/>
+</#if>
+<#if parameters.tabindex??>
+ tabindex="${parameters.tabindex?html}"<#rt/>
+</#if>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" />
+<#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+/><input type="hidden" id="__checkbox_${parameters.id?html}" name="__checkbox_${parameters.name?html}" value="${parameters.fieldValue?html}"<#rt/>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+ />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/simple/checkboxlist.ftl
----------------------------------------------------------------------
diff --git a/themes-override/src/main/webapp/WEB-INF/template/simple/checkboxlist.ftl b/themes-override/src/main/webapp/WEB-INF/template/simple/checkboxlist.ftl
new file mode 100644
index 0000000..3ce8686
--- /dev/null
+++ b/themes-override/src/main/webapp/WEB-INF/template/simple/checkboxlist.ftl
@@ -0,0 +1,113 @@
+<#--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<#assign itemCount = 0/>
+<#if parameters.list??>
+<@s.iterator value="parameters.list">
+ <#assign itemCount = itemCount + 1/>
+ <#if parameters.listKey??>
+ <#assign itemKey = stack.findValue(parameters.listKey)/>
+ <#else>
+ <#assign itemKey = stack.findValue('top')/>
+ </#if>
+ <#if parameters.listValue??>
+ <#assign itemValue = stack.findString(parameters.listValue)?default("")/>
+ <#else>
+ <#assign itemValue = stack.findString('top')/>
+ </#if>
+ <#if parameters.listCssClass??>
+ <#if stack.findString(parameters.listCssClass)??>
+ <#assign itemCssClass= stack.findString(parameters.listCssClass)/>
+ <#else>
+ <#assign itemCssClass = ''/>
+ </#if>
+ </#if>
+ <#if parameters.listCssStyle??>
+ <#if stack.findString(parameters.listCssStyle)??>
+ <#assign itemCssStyle= stack.findString(parameters.listCssStyle)/>
+ <#else>
+ <#assign itemCssStyle = ''/>
+ </#if>
+ </#if>
+ <#if parameters.listTitle??>
+ <#if stack.findString(parameters.listTitle)??>
+ <#assign itemTitle= stack.findString(parameters.listTitle)/>
+ <#else>
+ <#assign itemTitle = ''/>
+ </#if>
+ </#if>
+ <#assign itemKeyStr=itemKey.toString() />
+<input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}"<#rt/>
+ <#if parameters.id??>
+ id="${parameters.id?html}-${itemCount}"<#rt/>
+ <#else>
+ id="${parameters.name?html}-${itemCount}"<#rt/>
+ </#if>
+ <#if tag.contains(parameters.nameValue, itemKey)>
+ checked="checked"<#rt/>
+ </#if>
+ <#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+ </#if>
+ <#if itemCssClass?if_exists != "">
+ class="${itemCssClass?html}"<#rt/>
+ <#else>
+ <#if parameters.cssClass??>
+ class="${parameters.cssClass?html}"<#rt/>
+ </#if>
+ </#if>
+ <#if itemCssStyle?if_exists != "">
+ style="${itemCssStyle?html}"<#rt/>
+ <#else>
+ <#if parameters.cssStyle??>
+ style="${parameters.cssStyle?html}"<#rt/>
+ </#if>
+ </#if>
+ <#if itemTitle?if_exists != "">
+ title="${itemTitle?html}"<#rt/>
+ <#else>
+ <#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+ </#if>
+ </#if>
+ <#include "/${parameters.templateDir}/${parameters.expandTheme}/css.ftl" />
+ <#include "/${parameters.templateDir}/${parameters.expandTheme}/scripting-events.ftl" />
+ <#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+ <#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+ />
+<label<#rt/>
+ <#if parameters.id??>
+ for="${parameters.id?html}-${itemCount}"<#rt/>
+ <#else>
+ for="${parameters.name?html}-${itemCount}"<#rt/>
+ </#if>
+ class="checkboxLabel">${itemValue?html}</label>
+</...@s.iterator>
+ <#else>
+
+</#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