You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/07/10 09:41:21 UTC
[1/3] WW-3764 WW-1832 Adds small demo app to demonstrate possible
usage of struts.ui.templateDir
Repository: struts-examples
Updated Branches:
refs/heads/develop c73eae6a2 -> 111b1a7c3
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close-validate.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close-validate.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close-validate.ftl
new file mode 100644
index 0000000..f129156
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close-validate.ftl
@@ -0,0 +1,158 @@
+<#--
+/*
+ * $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.
+ */
+-->
+<#--
+START SNIPPET: supported-validators
+Only the following validators are supported:
+* required validator
+* requiredstring validator
+* stringlength validator
+* regex validator
+* email validator
+* url validator
+* int validator
+* double validator
+END SNIPPET: supported-validators
+-->
+<#if ((parameters.validate!false == true) && (parameters.performValidation!false == true))>
+<script type="text/javascript">
+ function validateForm_${parameters.id?replace('[^a-zA-Z0-9_]', '_', 'r')}() {
+ <#--
+ In case of multiselect fields return only the first value.
+ -->
+ var getFieldValue = function(field) {
+ var type = field.type ? field.type : field[0].type;
+ if (type == 'select-one' || type == 'select-multiple') {
+ return (field.selectedIndex == -1 ? "" : field.options[field.selectedIndex].value);
+ } else if (type == 'checkbox' || type == 'radio') {
+ if (!field.length) {
+ field = [field];
+ }
+ for (var i = 0; i < field.length; i++) {
+ if (field[i].checked) {
+ return field[i].value;
+ }
+ }
+ return "";
+ }
+ return field.value;
+ }
+ form = document.getElementById("${parameters.id}");
+ clearErrorMessages(form);
+ clearErrorLabels(form);
+
+ var errors = false;
+ var continueValidation = true;
+ <#list parameters.tagNames as tagName>
+ <#list tag.getValidators("${tagName}") as aValidator>
+ // field name: ${aValidator.fieldName}
+ // validator name: ${aValidator.validatorType}
+ if (form.elements['${aValidator.fieldName}']) {
+ field = form.elements['${aValidator.fieldName}'];
+ <#if aValidator.validatorType = "field-visitor">
+ <#assign validator = aValidator.fieldValidator >
+ //visitor validator switched to: ${validator.validatorType}
+ <#else>
+ <#assign validator = aValidator >
+ </#if>
+
+ var error = "${validator.getMessage(action)?js_string}";
+ var fieldValue = getFieldValue(field);
+
+ <#if validator.validatorType = "required">
+ if (fieldValue == "") {
+ addError(field, error);
+ errors = true;
+ <#if validator.shortCircuit>continueValidation = false;</#if>
+ }
+ <#elseif validator.validatorType = "requiredstring">
+ if (continueValidation && fieldValue != null && (fieldValue == "" || fieldValue.replace(/^\s+|\s+$/g,"").length == 0)) {
+ addError(field, error);
+ errors = true;
+ <#if validator.shortCircuit>continueValidation = false;</#if>
+ }
+ <#elseif validator.validatorType = "stringlength">
+ if (continueValidation && fieldValue != null) {
+ var value = fieldValue;
+ <#if validator.trim>
+ //trim field value
+ while (value.substring(0,1) == ' ')
+ value = value.substring(1, value.length);
+ while (value.substring(value.length-1, value.length) == ' ')
+ value = value.substring(0, value.length-1);
+ </#if>
+ if ((${validator.minLength?c} > -1 && value.length < ${validator.minLength?c}) ||
+ (${validator.maxLength?c} > -1 && value.length > ${validator.maxLength?c})) {
+ addError(field, error);
+ errors = true;
+ <#if validator.shortCircuit>continueValidation = false;</#if>
+ }
+ }
+ <#elseif validator.validatorType = "regex">
+ if (continueValidation && fieldValue != null && !fieldValue.match("${validator.regex?js_string}")) {
+ addError(field, error);
+ errors = true;
+ <#if validator.shortCircuit>continueValidation = false;</#if>
+ }
+ <#elseif validator.validatorType = "email">
+ if (continueValidation && fieldValue != null && fieldValue.length > 0 && fieldValue.match("${validator.regex?js_string}")==null) {
+ addError(field, error);
+ errors = true;
+ <#if validator.shortCircuit>continueValidation = false;</#if>
+ }
+ <#elseif validator.validatorType = "url">
+ if (continueValidation && fieldValue != null && fieldValue.length > 0 && fieldValue.match("/${validator.urlRegex?js_string}/i")==null) {
+ addError(field, error);
+ errors = true;
+ <#if validator.shortCircuit>continueValidation = false;</#if>
+ }
+ <#elseif validator.validatorType = "int" || validator.validatorType = "short">
+ if (continueValidation && fieldValue != null) {
+ if (<#if validator.min??>parseInt(fieldValue) <
+ ${validator.min?c}<#else>false</#if> ||
+ <#if validator.max??>parseInt(fieldValue) >
+ ${validator.max?c}<#else>false</#if>) {
+ addError(field, error);
+ errors = true;
+ <#if validator.shortCircuit>continueValidation = false;</#if>
+ }
+ }
+ <#elseif validator.validatorType = "double">
+ if (continueValidation && fieldValue != null) {
+ var value = parseFloat(fieldValue);
+ if (<#if validator.minInclusive??>value < ${validator.minInclusive?c}<#else>false</#if> ||
+ <#if validator.maxInclusive??>value > ${validator.maxInclusive?c}<#else>false</#if> ||
+ <#if validator.minExclusive??>value <= ${validator.minExclusive?c}<#else>false</#if> ||
+ <#if validator.maxExclusive??>value >= ${validator.maxExclusive?c}<#else>false</#if>) {
+ addError(field, error);
+ errors = true;
+ }
+ }
+ </#if>
+ }
+ </#list>
+ </#list>
+
+ return !errors;
+ }
+</script>
+</#if>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close.ftl
new file mode 100644
index 0000000..d783454
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/control-close.ftl" />
+<#include "/${parameters.templateDir}/simple/form-close.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/form-close-validate.ftl" />
+<#if parameters.focusElement?if_exists != "">
+<script type="text/javascript">
+ StrutsUtils.addOnLoad(function() {
+ var element = document.getElementById("${parameters.focusElement?html}");
+ if(element) {
+ element.focus();
+ }
+ });
+</script>
+</#if>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-validate.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-validate.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-validate.ftl
new file mode 100644
index 0000000..6597f4e
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-validate.ftl
@@ -0,0 +1,31 @@
+<#--
+/*
+ * $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.validate?default(false) == true>
+ <script type="text/javascript" src="${base}/struts/xhtml/validation.js"></script>
+ <script type="text/javascript" src="${base}/struts/utils.js"></script>
+ <#if parameters.onsubmit??>
+ ${tag.addParameter('onsubmit', "${parameters.onsubmit}; return validateForm_${parameters.id?replace('[^a-zA-Z0-9_]', '_', 'r')}();")}
+ <#else>
+ ${tag.addParameter('onsubmit', "return validateForm_${parameters.id?replace('[^a-zA-Z0-9_]', '_', 'r')}();")}
+ </#if>
+</#if>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/form.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/form.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/form.ftl
new file mode 100644
index 0000000..5a686dd
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/form.ftl
@@ -0,0 +1,33 @@
+<#--
+/*
+ * $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-validate.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/form-common.ftl" />
+<#if (parameters.validate?default(false))>
+ onreset="${parameters.onreset?default('clearErrorMessages(this);clearErrorLabels(this);')}"
+<#else>
+ <#if parameters.onreset??>
+ onreset="${parameters.onreset?html}"
+ </#if>
+</#if>
+>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/control.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/head.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/head.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/head.ftl
new file mode 100644
index 0000000..e8a8fb8
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/head.ftl
@@ -0,0 +1,24 @@
+<#--
+/*
+ * $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.
+ */
+-->
+<link rel="stylesheet" href="<@s.url value='/struts/xhtml/styles.css' includeParams='none' encode='false' />" type="text/css"/>
+<#include "/${parameters.templateDir}/simple/head.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/hidden.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/hidden.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/hidden.ftl
new file mode 100644
index 0000000..92881ab
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/hidden.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.
+ */
+-->
+<tr style="display:none;">
+ <td colspan="2">
+ <#include "/${parameters.templateDir}/simple/hidden.ftl" />
+ </td>
+</tr>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/inputtransferselect.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/inputtransferselect.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/inputtransferselect.ftl
new file mode 100644
index 0000000..f25a6ab
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/inputtransferselect.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/inputtransferselect.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /><#nt/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/label.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/label.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/label.ftl
new file mode 100644
index 0000000..8faf8d6
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/label.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/label.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/optiontransferselect.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/optiontransferselect.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/optiontransferselect.ftl
new file mode 100644
index 0000000..e1cd440
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/optiontransferselect.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/optiontransferselect.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /><#nt/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/password.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/password.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/password.ftl
new file mode 100644
index 0000000..202da51
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/password.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/password.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/radiomap.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/radiomap.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/radiomap.ftl
new file mode 100644
index 0000000..008de45
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/radiomap.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/radiomap.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /><#nt/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/reset.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/reset.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/reset.ftl
new file mode 100644
index 0000000..8e6e2b5
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/reset.ftl
@@ -0,0 +1,31 @@
+<#--
+/*
+ * $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.
+ */
+-->
+<tr>
+ <td colspan="2"><div <#rt/>
+<#if parameters.align??>
+ align="${parameters.align?html}"<#t/>
+</#if>
+><#t/>
+<#include "/${parameters.templateDir}/simple/reset.ftl" />
+</div><#t/>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/select.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/select.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/select.ftl
new file mode 100644
index 0000000..9d07046
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/select.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/select.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/styles.css
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/styles.css b/themes_override/src/main/webapp/WEB-INF/template/xhtml/styles.css
new file mode 100644
index 0000000..dd54904
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/styles.css
@@ -0,0 +1,29 @@
+/*
+ * $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.
+ */
+
+.wwFormTable {}
+.label {font-style:italic; }
+.errorLabel {font-style:italic; color:red; }
+.errorMessage {font-weight:bold; color:red; }
+.checkboxLabel {}
+.checkboxErrorLabel {color:red; }
+.required {color:red;}
+.tdLabel {text-align:right; vertical-align:top; }
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit-close.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit-close.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit-close.ftl
new file mode 100644
index 0000000..faa551c
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit-close.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.
+ */
+-->
+<#include "/${parameters.templateDir}/simple/submit-close.ftl" />
+</div><#t/>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit.ftl
new file mode 100644
index 0000000..7b82921
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit.ftl
@@ -0,0 +1,29 @@
+<#--
+/*
+ * $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.
+ */
+-->
+<tr>
+ <td colspan="2"><div <#rt/>
+<#if parameters.align??>
+ align="${parameters.align?html}"<#t/>
+</#if>
+><#t/>
+<#include "/${parameters.templateDir}/simple/submit.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/text.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/text.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/text.ftl
new file mode 100644
index 0000000..53f1647
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/text.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/text.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/textarea.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/textarea.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/textarea.ftl
new file mode 100644
index 0000000..46f77d9
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/textarea.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/textarea.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/theme.properties
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/theme.properties b/themes_override/src/main/webapp/WEB-INF/template/xhtml/theme.properties
new file mode 100644
index 0000000..84dc155
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/theme.properties
@@ -0,0 +1,21 @@
+#
+# $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.
+#
+parent = simple
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/tooltip.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/tooltip.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/tooltip.ftl
new file mode 100644
index 0000000..74938a8
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/tooltip.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.
+ */
+-->
+<#if parameters.tooltip??><#t/>
+ <img
+ <#if parameters.tooltipIconPath??><#t/>
+ src='<@s.url value="${parameters.tooltipIconPath}" includeParams="none" encode="false" />'
+ <#else><#t/>
+ src='<@s.url value="/struts/tooltip.gif" includeParams="none" encode="false" />'
+ </#if><#t/>
+ <#if parameters.jsTooltipEnabled?default('false') == 'true'>
+ onmouseover="domTT_activate(this, event, 'content', '${parameters.tooltip}'<#t/>
+ <#if parameters.tooltipDelay??><#t/>
+ <#t/>,'delay', '${parameters.tooltipDelay}'<#t/>
+ </#if><#t/>
+ <#t/>,'styleClass', '${parameters.tooltipCssClass?default("StrutsTTClassic")}'<#t/>
+ <#t/>)" />
+ <#else>
+ title="${parameters.tooltip?html}"
+ alt="${parameters.tooltip?html}" />
+ </#if>
+</#if><#t/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/updownselect.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/updownselect.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/updownselect.ftl
new file mode 100644
index 0000000..bd575f7
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/updownselect.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/updownselect.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /><#nt/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/validation.js
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/validation.js b/themes_override/src/main/webapp/WEB-INF/template/xhtml/validation.js
new file mode 100644
index 0000000..e63751b
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/validation.js
@@ -0,0 +1,139 @@
+/*
+ * $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.
+ */
+
+function clearErrorMessagesXHTML(form) {
+
+ // get field table
+ var table, i, r;
+ for (i = 0; i < form.childNodes.length; i++) {
+ if (form.childNodes[i].tagName !== undefined && form.childNodes[i].tagName.toLowerCase() === 'table') {
+ table = form.childNodes[i];
+ break;
+ }
+ }
+
+ if (table === null) {
+ return;
+ }
+
+ // clear out any rows with an "errorFor" attribute
+ var rows = table.rows;
+ if (rows === null){
+ return;
+ }
+
+ var rowsToDelete = [];
+ for(i = 0; i < rows.length; i++) {
+ r = rows[i];
+ // allow blank errorFor values on dojo markup
+ if (r.getAttribute("errorFor") !== null) {
+ rowsToDelete.push(r);
+ }
+ }
+
+ // now delete the rows
+ for (i = 0; i < rowsToDelete.length; i++) {
+ r = rowsToDelete[i];
+ table.deleteRow(r.rowIndex);
+ //table.removeChild(rowsToDelete[i]);
+ }
+}
+
+function clearErrorMessages(form) {
+ clearErrorMessagesXHTML(form);
+}
+
+function clearErrorLabelsXHTML(form) {
+ // set all labels back to the normal class
+ var i, elements = form.elements;
+ for (i = 0; i < elements.length; i++) {
+
+ var parentEl = elements[i];
+ // search for the parent table row, abort if the form is reached
+ // the form may contain "non-wrapped" inputs inserted by Dojo
+ while (parentEl.nodeName.toUpperCase() !== "TR" && parentEl.nodeName.toUpperCase() !== "FORM") {
+ parentEl = parentEl.parentNode;
+ }
+ if (parentEl.nodeName.toUpperCase() === "FORM") {
+ parentEl = null;
+ }
+
+ //if labelposition is 'top' the label is on the row above
+ if(parentEl && parentEl.cells) {
+ var labelRow = parentEl.cells.length > 1 ? parentEl : StrutsUtils.previousElement(parentEl, "tr");
+ if (labelRow) {
+ var cells = labelRow.cells;
+ if (cells && cells.length >= 1) {
+ var label = cells[0].getElementsByTagName("label")[0];
+ if (label) {
+ label.setAttribute("class", "label");
+ label.setAttribute("className", "label"); //ie hack cause ie does not support setAttribute
+ }
+ }
+ }
+ }
+ }
+
+}
+
+function clearErrorLabels(form) {
+ clearErrorLabelsXHTML(form);
+}
+
+function addErrorXHTML(e, errorText) {
+ try {
+ var row = (e.type ? e : e[0]);
+ while(row.nodeName.toUpperCase() !== "TR") {
+ row = row.parentNode;
+ }
+ var table = row.parentNode;
+ var error = document.createTextNode(errorText);
+ var tr = document.createElement("tr");
+ var td = document.createElement("td");
+ var span = document.createElement("span");
+ td.align = "center";
+ td.valign = "top";
+ td.colSpan = 2;
+ span.setAttribute("class", "errorMessage");
+ span.setAttribute("className", "errorMessage"); //ie hack cause ie does not support setAttribute
+ span.appendChild(error);
+ td.appendChild(span);
+ tr.appendChild(td);
+ tr.setAttribute("errorFor", e.id);
+ table.insertBefore(tr, row);
+
+ // update the label too
+ //if labelposition is 'top' the label is on the row above
+ var labelRow = row.cells.length > 1 ? row : StrutsUtils.previousElement(tr, "tr");
+ var label = labelRow.cells[0].getElementsByTagName("label")[0];
+ if (label) {
+ label.setAttribute("class", "errorLabel");
+ label.setAttribute("className", "errorLabel"); //ie hack cause ie does not support setAttribute
+ }
+ } catch (err) {
+ alert(err);
+ }
+}
+
+function addError(e, errorText) {
+ addErrorXHTML(e, errorText);
+}
+
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/web.xml b/themes_override/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..a5fcf75
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+<display-name>Themes Struts 2</display-name>
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ </welcome-file-list>
+
+
+ <filter>
+ <filter-name>struts2</filter-name>
+ <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>struts2</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+</web-app>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/edit.jsp b/themes_override/src/main/webapp/edit.jsp
new file mode 100644
index 0000000..bb1ef76
--- /dev/null
+++ b/themes_override/src/main/webapp/edit.jsp
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<s:head />
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Struts 2 Form Tags - Edit Person</title>
+
+</head>
+<body>
+<h1>Update Information</h1>
+
+<p>Use the form below to edit your information.</p>
+
+<s:form action="save" method="post">
+<s:textfield key="personBean.firstName" />
+<s:textfield key="personBean.lastName" />
+<s:select key="personBean.sport" list="sports" />
+<s:radio key="personBean.gender" list="genders" />
+<s:select key="personBean.residency" list="states" listKey="stateAbbr" listValue="stateName" />
+<s:checkbox key="personBean.over21" />
+<s:checkboxlist key="personBean.carModels" list="carModelsAvailable" />
+<s:submit key="submit" />
+</s:form>
+
+</body>
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/index.jsp b/themes_override/src/main/webapp/index.jsp
new file mode 100644
index 0000000..88209d8
--- /dev/null
+++ b/themes_override/src/main/webapp/index.jsp
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Struts 2 Form Tags - Welcome</title>
+</head>
+<body>
+<h1>Welcome To Struts 2!</h1>
+
+<p><a href='<s:url action="edit" />' >Edit your information</a></p>
+
+</body>
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/thankyou.jsp b/themes_override/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..7c268ef
--- /dev/null
+++ b/themes_override/src/main/webapp/thankyou.jsp
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Update Successful</title>
+</head>
+<body>
+
+<h1>Updated Information</h1>
+
+
+<p>Your information: <s:property value="personBean" /> </p>
+
+<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
[2/3] WW-3764 WW-1832 Adds small demo app to demonstrate possible
usage of struts.ui.templateDir
Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/reset.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/reset.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/reset.ftl
new file mode 100644
index 0000000..0ddba57
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/reset.ftl
@@ -0,0 +1,76 @@
+<#--
+/*
+ * $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.type?? && parameters.type=="button">
+<button type="reset"<#rt/>
+<#if parameters.name??>
+ name="${parameters.name?html}"<#rt/>
+</#if>
+<#if parameters.nameValue??>
+ value="<@s.property value="parameters.nameValue"/>"<#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}/scripting-events.ftl"/>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" />
+><#if parameters.src??>
+<img<#rt/>
+<#if parameters.label??>
+ alt="${parameters.label?html}"<#rt/>
+</#if>
+<#if parameters.src??>
+ src="${parameters.src?html}"<#rt/>
+</#if>
+/><#else><#if parameters.label??><@s.property value="parameters.label"/><#rt/></#if></#if></button>
+<#else>
+<input type="reset"<#rt/>
+<#if parameters.name??>
+ name="${parameters.name?html}"<#rt/>
+</#if>
+<#if parameters.nameValue??>
+ value="<@s.property value="parameters.nameValue"/>"<#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.disabled?default(false)>
+ disabled="disabled"<#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" />
+/>
+</#if>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/scripting-events.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/scripting-events.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/scripting-events.ftl
new file mode 100644
index 0000000..c998e61
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/scripting-events.ftl
@@ -0,0 +1,64 @@
+<#--
+/*
+ * $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.onclick??>
+ onclick="${parameters.onclick?html}"<#rt/>
+</#if>
+<#if parameters.ondblclick??>
+ ondblclick="${parameters.ondblclick?html}"<#rt/>
+</#if>
+<#if parameters.onmousedown??>
+ onmousedown="${parameters.onmousedown?html}"<#rt/>
+</#if>
+<#if parameters.onmouseup??>
+ onmouseup="${parameters.onmouseup?html}"<#rt/>
+</#if>
+<#if parameters.onmouseover??>
+ onmouseover="${parameters.onmouseover?html}"<#rt/>
+</#if>
+<#if parameters.onmousemove??>
+ onmousemove="${parameters.onmousemove?html}"<#rt/>
+</#if>
+<#if parameters.onmouseout??>
+ onmouseout="${parameters.onmouseout?html}"<#rt/>
+</#if>
+<#if parameters.onfocus??>
+ onfocus="${parameters.onfocus?html}"<#rt/>
+</#if>
+<#if parameters.onblur??>
+ onblur="${parameters.onblur?html}"<#rt/>
+</#if>
+<#if parameters.onkeypress??>
+ onkeypress="${parameters.onkeypress?html}"<#rt/>
+</#if>
+<#if parameters.onkeydown??>
+ onkeydown="${parameters.onkeydown?html}"<#rt/>
+</#if>
+<#if parameters.onkeyup??>
+ onkeyup="${parameters.onkeyup?html}"<#rt/>
+</#if>
+<#if parameters.onselect??>
+ onselect="${parameters.onselect?html}"<#rt/>
+</#if>
+<#if parameters.onchange??>
+ onchange="${parameters.onchange?html}"<#rt/>
+</#if>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/select.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/select.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/select.ftl
new file mode 100644
index 0000000..74277e6
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/select.ftl
@@ -0,0 +1,140 @@
+<#--
+/*
+ * $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.
+ */
+-->
+<#setting number_format="#.#####">
+<select<#rt/>
+ name="${parameters.name?default("")?html}"<#rt/>
+<#if parameters.get("size")??>
+ size="${parameters.get("size")?html}"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#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>
+<#if parameters.multiple?default(false)>
+ multiple="multiple"<#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" />
+>
+<#if parameters.headerKey?? && parameters.headerValue??>
+ <option value="${parameters.headerKey?html}"
+ <#if tag.contains(parameters.nameValue, parameters.headerKey) == true>
+ selected="selected"
+ </#if>
+ >${parameters.headerValue?html}</option>
+</#if>
+<#if parameters.emptyOption?default(false)>
+ <option value=""></option>
+</#if>
+<@s.iterator value="parameters.list">
+ <#if parameters.listKey??>
+ <#if stack.findValue(parameters.listKey)??>
+ <#assign itemKey = stack.findValue(parameters.listKey)/>
+ <#assign itemKeyStr = stack.findString(parameters.listKey)/>
+ <#else>
+ <#assign itemKey = ''/>
+ <#assign itemKeyStr = ''/>
+ </#if>
+ <#else>
+ <#assign itemKey = stack.findValue('top')/>
+ <#assign itemKeyStr = stack.findString('top')>
+ </#if>
+ <#if parameters.listValue??>
+ <#if stack.findString(parameters.listValue)??>
+ <#assign itemValue = stack.findString(parameters.listValue)/>
+ <#else>
+ <#assign itemValue = ''/>
+ </#if>
+ <#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>
+ <option value="${itemKeyStr?html}"<#rt/>
+ <#if tag.contains(parameters.nameValue, itemKey) == true>
+ 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>
+ >${itemValue?html}</option><#lt/>
+</...@s.iterator>
+
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/optgroup.ftl" />
+
+</select>
+
+<#if parameters.multiple?default(false)>
+ <#if (parameters.id?? && parameters.name??)>
+ <input type="hidden" id="__multiselect_${parameters.id?html}" name="__multiselect_${parameters.name?html}" value=""<#rt/>
+ </#if>
+ <#if (parameters.id?? && !parameters.name??)>
+ <input type="hidden" id="__multiselect_${parameters.id?html}" name="__multiselect_${parameters.id?html}" value=""<#rt/>
+ </#if>
+ <#if ( !parameters.id?? && parameters.name??)>
+ <input type="hidden" id="__multiselect_${parameters.id?html}" name="__multiselect_${parameters.id?html}" value=""<#rt/>
+ </#if>
+ <#if ( !parameters.id?? && !parameters.name??)>
+ <input type="hidden" id="" name="" value="" <#rt/>
+ </#if>
+
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+ />
+</#if>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/submit-close.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/submit-close.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/submit-close.ftl
new file mode 100644
index 0000000..2bb7347
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/submit-close.ftl
@@ -0,0 +1,6 @@
+<#if parameters.type?? && parameters.type=="button">
+<#if (parameters.body)?default("")?length gt 0>${parameters.body}<#elseif parameters.label??><@s.property value="parameters.label"/><#rt/></#if>
+</button>
+<#else>
+${parameters.body}<#rt/>
+</#if>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/submit.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/submit.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/submit.ftl
new file mode 100644
index 0000000..95315ef
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/submit.ftl
@@ -0,0 +1,93 @@
+<#--
+/*
+ * $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.type?? && parameters.type=="button">
+<button type="submit"<#rt/>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#if parameters.name??>
+ name="${parameters.name?html}"<#rt/>
+</#if>
+<#if parameters.nameValue??>
+ value="<@s.property value="parameters.nameValue"/>"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#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.tabindex??>
+ tabindex="${parameters.tabindex?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" />
+>
+<#else>
+<#if parameters.type?? && parameters.type=="image">
+<input type="image"<#rt/>
+<#if parameters.label??>
+ alt="${parameters.label?html}"<#rt/>
+</#if>
+<#if parameters.src??>
+ src="${parameters.src?html}"<#rt/>
+</#if>
+<#else>
+<input type="submit"<#rt/>
+</#if>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#if parameters.name??>
+ name="${parameters.name?html}"<#rt/>
+</#if>
+<#if parameters.nameValue??>
+ value="<@s.property value="parameters.nameValue"/>"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#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.tabindex??>
+ tabindex="${parameters.tabindex?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" />
+/>
+</#if>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/table.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/table.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/table.ftl
new file mode 100644
index 0000000..d7efb06
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/table.ftl
@@ -0,0 +1,76 @@
+<#--
+/*
+ * $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 webTable = tag/>
+<#assign tableModel = webTable.model/>
+
+<#if tableModel??>
+<p align="center">
+<table bgcolor="white" border="0" cellpadding="1" cellspacing="0" >
+ <tr>
+ <td>
+ <table border="0" cellpadding="2" cellspacing="1">
+ <tr bgcolor="yellow">
+<#list webTable.columns as curColumn>
+<#if curColumn.visible>
+ <th>
+<#if webTable.sortable>
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>${curColumn.displayName}</td>
+ <td>
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td align="bottom">
+<#if false>
+ <img src="images/sorted_asc.gif" border="0" align="bottom" />
+<#else>
+ <a href="<@s.url><@s.param name="${webTable.sortColumnLinkName}" value="${curColumn.offset}"/><@s.param name="${webTable.sortOrderLinkName}" value="ASC"/></...@s.url>"><img src="images/unsorted_asc.gif" border="0" align="bottom"/></a>
+</#if>
+ </td>
+ </tr>
+ <tr>
+ <td align="top"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+<#else>
+ ${curColumn.displayName}
+</#if>
+ </th>
+</#if>
+</#list>
+ </tr>
+<#list webTable.rowIterator as curRow>
+ <tr>
+<#list curRow as curColumn>
+ <td>${curColumn}</td>
+</#list>
+ </tr>
+</#list>
+ </table>
+ </td>
+ </tr>
+</table>
+</#if>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/text.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/text.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/text.ftl
new file mode 100644
index 0000000..1caf3aa
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/text.ftl
@@ -0,0 +1,54 @@
+<#--
+/*
+ * $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<#rt/>
+ type="${parameters.type?default("text")?html}"<#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??>
+ value="${parameters.nameValue?html}"<#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/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/textarea.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/textarea.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/textarea.ftl
new file mode 100644
index 0000000..6cf1e9b
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/textarea.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.
+ */
+-->
+<textarea<#rt/>
+ name="${parameters.name?default("")?html}"<#rt/>
+ cols="${parameters.cols?default("")?html}"<#rt/>
+ rows="${parameters.rows?default("")?html}"<#rt/>
+<#if parameters.wrap??>
+ wrap="${parameters.wrap?html}"<#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" />
+><#rt/>
+<#if parameters.nameValue??>
+<@s.property value="parameters.nameValue"/><#t/>
+</#if>
+</textarea>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/token.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/token.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/token.ftl
new file mode 100644
index 0000000..cabfa9c
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/token.ftl
@@ -0,0 +1,24 @@
+<#--
+/*
+ * $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" name="${parameters.tokenNameField?default("")}" value="${parameters.name?default("")?html}" />
+<input type="hidden" name="${parameters.name?default("")}" value="${parameters.token?default("")?html}" />
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/updownselect.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/updownselect.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/updownselect.ftl
new file mode 100644
index 0000000..30128ef
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/updownselect.ftl
@@ -0,0 +1,57 @@
+<#--
+/*
+ * $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>
+<tr><td>
+<#include "/${templateDir}/simple/select.ftl" /><#t/>
+</td></tr>
+<tr><td>
+<#if parameters.allowMoveUp?default(true)><#t/>
+ <#assign defMoveUpLabel="${parameters.moveUpLabel?default('^')}" /><#t/>
+ <#if parameters.headerKey??><#t/>
+ <input type="button" value="${defMoveUpLabel}" onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />
+ <#else><#t/>
+ <input type="button" value="${defMoveUpLabel}" onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '');" />
+ </#if><#t/>
+</#if><#t/>
+<#if parameters.allowMoveDown?default(true)><#t/>
+ <#assign defMoveDownLabel="${parameters.moveDownLabel?default('v')}" /><#t/>
+ <#if parameters.headerKey??><#t/>
+ <input type="button" value="${defMoveDownLabel}" onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />
+ <#else><#t/>
+ <input type="button" value="${defMoveDownLabel}" onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '');" />
+ </#if><#t/>
+</#if><#t/>
+<#if parameters.allowSelectAll?default(true)><#t/>
+ <#assign defSelectAllLabel="${parameters.selectAllLabel?default('*')}" /><#t/>
+ <#if parameters.headerKey??><#t/>
+ <input type="button" value="${defSelectAllLabel}" onclick="selectAllOptionsExceptSome(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />
+ <#else><#t/>
+ <input type="button" value="${defSelectAllLabel}" onclick="selectAllOptions(document.getElementById('${parameters.id}'), 'key', '');" />
+ </#if><#t/>
+</#if><#t/>
+</td></tr>
+</table>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkbox.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkbox.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkbox.ftl
new file mode 100644
index 0000000..4504b3f
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkbox.ftl
@@ -0,0 +1,129 @@
+<#--
+/*
+ * $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 = fieldErrors?? && fieldErrors[parameters.name]??/>
+<#if hasFieldErrors>
+<#list fieldErrors[parameters.name] as error>
+<tr<#rt/>
+<#if parameters.id??>
+ errorFor="${parameters.id}"<#rt/>
+</#if>
+>
+ <td align="left" valign="top" colspan="2"><#rt/>
+ <span class="errorMessage">${error?html}</span><#t/>
+ </td><#lt/>
+</tr>
+</#list>
+</#if>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+</#if>
+<#if labelpos?default("") == 'top'>
+<tr>
+ <td colspan="2">
+<#if parameters.label??> <label<#t/>
+<#if parameters.id??>
+ for="${parameters.id?html}"<#rt/>
+</#if>
+<#if hasFieldErrors>
+ class="checkboxErrorLabel"<#rt/>
+<#else>
+ class="checkboxLabel"<#rt/>
+</#if>
+>
+<#if parameters.required?default(false) && parameters.requiredPosition?default("right") != 'right'>
+ <span class="required">*</span><#t/>
+</#if>
+${parameters.label?html}<#t/>
+<#if parameters.required?default(false) && parameters.requiredPosition?default("right") == 'right'>
+ <span class="required">*</span><#t/>
+</#if>
+:<#t/>
+<#if parameters.tooltip??>
+ <#include "/${parameters.templateDir}/${parameters.expandTheme}/tooltip.ftl" />
+</#if>
+</label><#t/>
+</#if>
+ </td>
+</tr>
+<tr>
+ <td colspan="2">
+ <#include "/${parameters.templateDir}/simple/checkbox.ftl" />
+<#else>
+<tr>
+ <td valign="top" align="right">
+<#if labelpos?default("") == 'left'>
+<#if parameters.label??> <label<#t/>
+<#if parameters.id??>
+ for="${parameters.id?html}"<#rt/>
+</#if>
+<#if hasFieldErrors>
+ class="checkboxErrorLabel"<#rt/>
+<#else>
+ class="checkboxLabel"<#rt/>
+</#if>
+>
+<#if parameters.required?default(false) && parameters.requiredPosition?default("right") != 'right'>
+ <span class="required">*</span><#t/>
+</#if>
+${parameters.label?html}<#t/>
+<#if parameters.required?default(false) && parameters.requiredPosition?default("right") == 'right'>
+ <span class="required">*</span><#t/>
+</#if>
+:<#t/>
+<#if parameters.tooltip??>
+ <#include "/${parameters.templateDir}/${parameters.expandTheme}/tooltip.ftl" />
+</#if>
+</label><#t/>
+</#if>
+</#if>
+<#if labelpos?default("") == 'right'>
+ <#if parameters.required?default(false)>
+ <span class="required">*</span><#t/>
+ </#if>
+ <#if parameters.tooltip??>
+ <#include "/${parameters.templateDir}/${parameters.expandTheme}/tooltip.ftl" />
+ </#if>
+</#if>
+ </td>
+ <td valign="top" align="left">
+
+<#if labelpos?default("") != 'top'>
+ <#include "/${parameters.templateDir}/simple/checkbox.ftl" />
+</#if>
+<#if labelpos?default("") != 'top' && labelpos?default("") != 'left'>
+<#if parameters.label??> <label<#t/>
+<#if parameters.id??>
+ for="${parameters.id?html}"<#rt/>
+</#if>
+<#if hasFieldErrors>
+ class="checkboxErrorLabel"<#rt/>
+<#else>
+ class="checkboxLabel"<#rt/>
+</#if>
+>${parameters.label?html}</label><#rt/>
+</#if>
+</#if>
+</#if>
+ <#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /><#nt/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkboxlist.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkboxlist.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkboxlist.ftl
new file mode 100644
index 0000000..8cc0dd8
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkboxlist.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/checkboxlist.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /><#nt/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/combobox.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/combobox.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/combobox.ftl
new file mode 100644
index 0000000..a1a85f1
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/combobox.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/combobox.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /><#nt/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/control-close.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/control-close.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/control-close.ftl
new file mode 100644
index 0000000..a89de7e
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/control-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.
+ */
+-->
+</table>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/control.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/control.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/control.ftl
new file mode 100644
index 0000000..2761ac3
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/control.ftl
@@ -0,0 +1,26 @@
+<#--
+/*
+ * $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.
+ */
+-->
+<table class="${parameters.cssClass?default('wwFormTable')?html}"<#rt/>
+<#if parameters.cssStyle??> style="${parameters.cssStyle?html}"<#rt/>
+</#if>
+>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlfooter.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlfooter.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlfooter.ftl
new file mode 100644
index 0000000..37da2f8
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlfooter.ftl
@@ -0,0 +1,38 @@
+<#--
+/*
+ * $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.
+ */
+-->
+${parameters.after?if_exists}<#t/>
+ </td><#lt/>
+</tr>
+<#if parameters.errorposition?default("top") == 'bottom'>
+<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/>
+<#if hasFieldErrors>
+<#list fieldErrors[parameters.name] as error>
+<tr errorFor="${parameters.id}">
+ <td align="center" valign="top" colspan="2"><#rt/>
+ <span class="errorMessage">${error?html}</span><#t/>
+ </td><#lt/>
+</tr>
+</#list>
+</#if>
+</#if>
+
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader-core.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader-core.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader-core.ftl
new file mode 100644
index 0000000..7330270
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader-core.ftl
@@ -0,0 +1,81 @@
+<#--
+/*
+ * $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.
+ */
+-->
+<#--
+ Only show message if errors are available.
+ This will be done if ActionSupport is used.
+-->
+<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/>
+<#if parameters.errorposition?default("top") == 'top'>
+<#if hasFieldErrors>
+<#list fieldErrors[parameters.name] as error>
+<tr errorFor="${parameters.id}">
+ <td align="center" valign="top" colspan="2"><#rt/>
+ <span class="errorMessage">${error?html}</span><#t/>
+ </td><#lt/>
+</tr>
+</#list>
+</#if>
+</#if>
+<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
+<#assign labelpos = parameters.form.labelposition/>
+<#elseif parameters.labelposition??>
+<#assign labelpos = parameters.labelposition/>
+</#if>
+<#--
+ if the label position is top,
+ then give the label it's own row in the table
+-->
+<tr>
+<#if labelpos?default("") == 'top'>
+ <td align="left" valign="top" colspan="2"><#rt/>
+<#else>
+ <td class="tdLabel"><#rt/>
+</#if>
+<#if parameters.label??>
+ <label <#t/>
+<#if parameters.id??>
+ for="${parameters.id?html}" <#t/>
+</#if>
+<#if hasFieldErrors>
+ class="errorLabel"<#t/>
+<#else>
+ class="label"<#t/>
+</#if>
+ ><#t/>
+<#if parameters.required?default(false) && parameters.requiredPosition?default("right") != 'right'>
+ <span class="required">*</span><#t/>
+</#if>
+${parameters.label?html}<#t/>
+<#if parameters.required?default(false) && parameters.requiredPosition?default("right") == 'right'>
+ <span class="required">*</span><#t/>
+</#if>
+${parameters.labelseparator?default(":")?html}<#t/>
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/tooltip.ftl" />
+</label><#t/>
+</#if>
+ </td><#lt/>
+<#-- add the extra row -->
+<#if labelpos?default("") == 'top'>
+</tr>
+<tr>
+</#if>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader.ftl
new file mode 100644
index 0000000..4a15058
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader.ftl
@@ -0,0 +1,28 @@
+<#--
+/*
+ * $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}/controlheader-core.ftl" />
+ <td
+<#if parameters.align??>
+ align="${parameters.align?html}"<#t/>
+</#if>
+><#t/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/doubleselect.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/doubleselect.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/doubleselect.ftl
new file mode 100644
index 0000000..f923462
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/doubleselect.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/doubleselect.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" /><#nt/>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/xhtml/file.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/xhtml/file.ftl b/themes_override/src/main/webapp/WEB-INF/template/xhtml/file.ftl
new file mode 100644
index 0000000..cae4a2e
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/xhtml/file.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.
+ */
+-->
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/file.ftl" />
+<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
[3/3] git commit: WW-3764 WW-1832 Adds small demo app to demonstrate
possible usage of struts.ui.templateDir
Posted by lu...@apache.org.
WW-3764 WW-1832 Adds small demo app to demonstrate possible usage of struts.ui.templateDir
Project: http://git-wip-us.apache.org/repos/asf/struts-examples/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts-examples/commit/111b1a7c
Tree: http://git-wip-us.apache.org/repos/asf/struts-examples/tree/111b1a7c
Diff: http://git-wip-us.apache.org/repos/asf/struts-examples/diff/111b1a7c
Branch: refs/heads/develop
Commit: 111b1a7c3f03b72a2c6dcb5dffb5188c012671b8
Parents: c73eae6
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Thu Jul 10 09:40:29 2014 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Thu Jul 10 09:40:29 2014 +0200
----------------------------------------------------------------------
pom.xml | 1 +
themes_override/README.txt | 16 +
themes_override/pom.xml | 54 ++++
.../apache/struts/edit/action/EditAction.java | 96 ++++++
.../org/apache/struts/edit/model/Person.java | 96 ++++++
.../org/apache/struts/edit/model/State.java | 39 +++
.../apache/struts/edit/service/EditService.java | 12 +
.../edit/service/EditServiceInMemory.java | 51 ++++
themes_override/src/main/resources/log4j.dtd | 227 ++++++++++++++
themes_override/src/main/resources/log4j.xml | 28 ++
.../struts/edit/action/EditAction.properties | 8 +
themes_override/src/main/resources/struts.xml | 30 ++
.../src/main/webapp/META-INF/MANIFEST.MF | 3 +
.../webapp/WEB-INF/template/simple/a-close.ftl | 45 +++
.../main/webapp/WEB-INF/template/simple/a.ftl | 22 ++
.../WEB-INF/template/simple/actionerror.ftl | 43 +++
.../WEB-INF/template/simple/actionmessage.ftl | 43 +++
.../webapp/WEB-INF/template/simple/checkbox.ftl | 50 +++
.../WEB-INF/template/simple/checkboxlist.ftl | 113 +++++++
.../webapp/WEB-INF/template/simple/combobox.ftl | 103 +++++++
.../template/simple/common-attributes.ftl | 25 ++
.../WEB-INF/template/simple/controlfooter.ftl | 22 ++
.../WEB-INF/template/simple/controlheader.ftl | 22 ++
.../main/webapp/WEB-INF/template/simple/css.ftl | 35 +++
.../webapp/WEB-INF/template/simple/debug.ftl | 82 +++++
.../WEB-INF/template/simple/div-close.ftl | 23 ++
.../main/webapp/WEB-INF/template/simple/div.ftl | 32 ++
.../WEB-INF/template/simple/doubleselect.ftl | 198 ++++++++++++
.../template/simple/dynamic-attributes.ftl | 34 +++
.../webapp/WEB-INF/template/simple/empty.ftl | 22 ++
.../WEB-INF/template/simple/fielderror.ftl | 82 +++++
.../webapp/WEB-INF/template/simple/file.ftl | 48 +++
.../WEB-INF/template/simple/form-close.ftl | 113 +++++++
.../WEB-INF/template/simple/form-common.ftl | 67 +++++
.../webapp/WEB-INF/template/simple/form.ftl | 27 ++
.../webapp/WEB-INF/template/simple/head.ftl | 23 ++
.../webapp/WEB-INF/template/simple/hidden.ftl | 41 +++
.../template/simple/inputtransferselect.ftl | 124 ++++++++
.../webapp/WEB-INF/template/simple/label.ftl | 45 +++
.../webapp/WEB-INF/template/simple/optgroup.ftl | 51 ++++
.../template/simple/optiontransferselect.ftl | 301 +++++++++++++++++++
.../webapp/WEB-INF/template/simple/password.ftl | 53 ++++
.../webapp/WEB-INF/template/simple/radiomap.ftl | 94 ++++++
.../webapp/WEB-INF/template/simple/reset.ftl | 76 +++++
.../template/simple/scripting-events.ftl | 64 ++++
.../webapp/WEB-INF/template/simple/select.ftl | 140 +++++++++
.../WEB-INF/template/simple/submit-close.ftl | 6 +
.../webapp/WEB-INF/template/simple/submit.ftl | 93 ++++++
.../webapp/WEB-INF/template/simple/table.ftl | 76 +++++
.../webapp/WEB-INF/template/simple/text.ftl | 54 ++++
.../webapp/WEB-INF/template/simple/textarea.ftl | 53 ++++
.../webapp/WEB-INF/template/simple/token.ftl | 24 ++
.../WEB-INF/template/simple/updownselect.ftl | 57 ++++
.../webapp/WEB-INF/template/xhtml/checkbox.ftl | 129 ++++++++
.../WEB-INF/template/xhtml/checkboxlist.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/combobox.ftl | 25 ++
.../WEB-INF/template/xhtml/control-close.ftl | 23 ++
.../webapp/WEB-INF/template/xhtml/control.ftl | 26 ++
.../WEB-INF/template/xhtml/controlfooter.ftl | 38 +++
.../template/xhtml/controlheader-core.ftl | 81 +++++
.../WEB-INF/template/xhtml/controlheader.ftl | 28 ++
.../WEB-INF/template/xhtml/doubleselect.ftl | 25 ++
.../main/webapp/WEB-INF/template/xhtml/file.ftl | 25 ++
.../template/xhtml/form-close-validate.ftl | 158 ++++++++++
.../WEB-INF/template/xhtml/form-close.ftl | 35 +++
.../WEB-INF/template/xhtml/form-validate.ftl | 31 ++
.../main/webapp/WEB-INF/template/xhtml/form.ftl | 33 ++
.../main/webapp/WEB-INF/template/xhtml/head.ftl | 24 ++
.../webapp/WEB-INF/template/xhtml/hidden.ftl | 27 ++
.../template/xhtml/inputtransferselect.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/label.ftl | 25 ++
.../template/xhtml/optiontransferselect.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/password.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/radiomap.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/reset.ftl | 31 ++
.../webapp/WEB-INF/template/xhtml/select.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/styles.css | 29 ++
.../WEB-INF/template/xhtml/submit-close.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/submit.ftl | 29 ++
.../main/webapp/WEB-INF/template/xhtml/text.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/textarea.ftl | 25 ++
.../WEB-INF/template/xhtml/theme.properties | 21 ++
.../webapp/WEB-INF/template/xhtml/tooltip.ftl | 41 +++
.../WEB-INF/template/xhtml/updownselect.ftl | 25 ++
.../webapp/WEB-INF/template/xhtml/validation.js | 139 +++++++++
themes_override/src/main/webapp/WEB-INF/web.xml | 19 ++
themes_override/src/main/webapp/edit.jsp | 29 ++
themes_override/src/main/webapp/index.jsp | 16 +
themes_override/src/main/webapp/thankyou.jsp | 21 ++
89 files changed, 4645 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5065411..1c7bde1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,7 @@
<module>exclude_parameters</module>
<module>restful2actionmapper</module>
<module>bean_validation</module>
+ <module>themes_override</module>
</modules>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/README.txt
----------------------------------------------------------------------
diff --git a/themes_override/README.txt b/themes_override/README.txt
new file mode 100644
index 0000000..2ef262e
--- /dev/null
+++ b/themes_override/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Struts 2 Themes tutorial.
+See: http://struts.apache.org.
+
+To build the application's war file run mvn clean package
+from the project's root folder.
+
+The war file is created in the target sub-folder.
+
+Copy the war file to your Servlet container (e.g. Tomcat, GlassFish) and
+then startup the Servlet container.
+
+In a web browser go to: http://localhost:8080/themes_override/index.action.
+
+You should see a web page with Welcome to Struts 2!
+
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/pom.xml
----------------------------------------------------------------------
diff --git a/themes_override/pom.xml b/themes_override/pom.xml
new file mode 100644
index 0000000..b0e33cc
--- /dev/null
+++ b/themes_override/pom.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+<!--
+ FIXME: this is temporary solution to use the latest snapshot version
+ <parent>
+ <groupId>struts.apache.org</groupId>
+ <artifactId>struts2examples</artifactId>
+ <version>1.0.0</version>
+ </parent>
+-->
+ <groupId>struts.apache.org</groupId>
+ <version>1.0.0</version>
+
+ <artifactId>themes_override</artifactId>
+
+ <name>Struts 2 Themes Override</name>
+
+ <description>Struts 2 themes override example application for the
+ Struts 2 getting started tutorials
+ </description>
+
+ <packaging>war</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-core</artifactId>
+ <version>2.3.18-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <finalName>themes_override</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-maven-plugin</artifactId>
+ <version>8.1.7.v20120910</version>
+ <configuration>
+ <stopKey>CTRL+C</stopKey>
+ <stopPort>8999</stopPort>
+ <scanIntervalSeconds>10</scanIntervalSeconds>
+ <scanTargets>
+ <scanTarget>src/main/webapp/WEB-INF/web.xml</scanTarget>
+ </scanTargets>
+ </configuration>
+ </plugin>
+ </plugins>
+
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/themes_override/src/main/java/org/apache/struts/edit/action/EditAction.java b/themes_override/src/main/java/org/apache/struts/edit/action/EditAction.java
new file mode 100644
index 0000000..aa07ff2
--- /dev/null
+++ b/themes_override/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -0,0 +1,96 @@
+package org.apache.struts.edit.action;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.struts.edit.model.Person;
+import org.apache.struts.edit.model.State;
+import org.apache.struts.edit.service.EditService;
+import org.apache.struts.edit.service.EditServiceInMemory;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * Acts as a controller to handle actions
+ * related to editing a Person.
+ * @author bruce phillips
+ *
+ */
+public class EditAction extends ActionSupport {
+
+ private static final long serialVersionUID = 1L;
+
+ private EditService editService = new EditServiceInMemory();
+
+ private Person personBean;
+
+ private String [] sports = {"football", "baseball", "basketball" };
+
+ private String [] genders = {"male", "female", "not sure" };
+
+ private List<State> states ;
+
+ private String [] carModelsAvailable = {"Ford","Chrysler","Toyota","Nissan"};
+
+ public String execute() throws Exception {
+
+ editService.savePerson( getPersonBean() );
+
+ return SUCCESS;
+
+ }
+
+
+ public String input() throws Exception {
+
+ setPersonBean( editService.getPerson() );
+
+ return INPUT;
+ }
+
+ public Person getPersonBean() {
+
+
+ return personBean;
+
+ }
+
+ public void setPersonBean(Person person) {
+
+ personBean = person;
+
+ }
+
+
+ public List<String> getSports() {
+ return Arrays.asList(sports);
+ }
+
+ public List<String> getGenders() {
+
+ return Arrays.asList(genders);
+
+ }
+
+
+
+ public List<State> getStates() {
+
+ states = new ArrayList<State>();
+ states.add( new State("AZ", "Arizona") );
+ states.add( new State("CA", "California") );
+ states.add( new State("FL", "Florida") );
+ states.add( new State("KS", "Kansas") );
+ states.add( new State("NY", "New York") );
+
+ return states;
+ }
+
+
+
+ public String [] getCarModelsAvailable() {
+ return carModelsAvailable;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/themes_override/src/main/java/org/apache/struts/edit/model/Person.java b/themes_override/src/main/java/org/apache/struts/edit/model/Person.java
new file mode 100644
index 0000000..392a8de
--- /dev/null
+++ b/themes_override/src/main/java/org/apache/struts/edit/model/Person.java
@@ -0,0 +1,96 @@
+package org.apache.struts.edit.model;
+
+import java.util.Arrays;
+
+
+/**
+ * Models a Person who registers.
+ * @author bruce phillips
+ *
+ */
+public class Person
+{
+ private String firstName;
+ private String lastName;
+ private String sport;
+ private String gender;
+ private String residency;
+ private boolean over21;
+ private String [] carModels;
+
+
+ public String getFirstName()
+ {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName)
+ {
+ this.firstName = firstName;
+ }
+
+ public String getLastName()
+ {
+ return lastName;
+ }
+
+ public void setLastName(String lastName)
+ {
+ this.lastName = lastName;
+ }
+
+
+
+
+ public void setSport(String sport) {
+ this.sport = sport;
+ }
+
+ public void setGender(String gender) {
+ this.gender = gender;
+ }
+
+ public String getGender() {
+ return gender;
+ }
+
+ public String getSport() {
+ return sport;
+ }
+
+ public void setResidency(String residency) {
+ this.residency = residency;
+ }
+
+ public String getResidency() {
+ return residency;
+ }
+
+ public void setOver21(boolean over21) {
+ this.over21 = over21;
+ }
+
+ public boolean isOver21() {
+ return over21;
+ }
+
+ public void setCarModels(String [] carModels) {
+ this.carModels = carModels;
+ }
+
+ public String [] getCarModels() {
+ return carModels;
+ }
+
+ public String toString()
+ {
+ return "First Name: " + getFirstName() + " | " +
+ " Last Name: " + getLastName() + " | " +
+ " Favorite Sport: " + getSport() + " | " +
+ " Gender: " + getGender() + " | " +
+ " Residency: " + getResidency() + " | " +
+ " Over 21: " + isOver21() + " | " +
+ " Car models: " + Arrays.asList( getCarModels() ) ;
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/themes_override/src/main/java/org/apache/struts/edit/model/State.java b/themes_override/src/main/java/org/apache/struts/edit/model/State.java
new file mode 100644
index 0000000..bb927e1
--- /dev/null
+++ b/themes_override/src/main/java/org/apache/struts/edit/model/State.java
@@ -0,0 +1,39 @@
+package org.apache.struts.edit.model;
+
+public class State {
+
+ private String stateAbbr;
+
+ private String stateName;
+
+ public State (String stateAbbr, String stateName) {
+
+ this.stateAbbr = stateAbbr;
+ this.stateName = stateName;
+
+ }
+
+ public void setStateAbbr(String stateAbbr) {
+ this.stateAbbr = stateAbbr;
+ }
+
+ public String getStateAbbr() {
+ return stateAbbr;
+ }
+
+ public void setStateName(String stateName) {
+ this.stateName = stateName;
+ }
+
+ public String getStateName() {
+ return stateName;
+ }
+
+ public String toString() {
+
+ return getStateAbbr() ;
+
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/themes_override/src/main/java/org/apache/struts/edit/service/EditService.java b/themes_override/src/main/java/org/apache/struts/edit/service/EditService.java
new file mode 100644
index 0000000..79d759a
--- /dev/null
+++ b/themes_override/src/main/java/org/apache/struts/edit/service/EditService.java
@@ -0,0 +1,12 @@
+package org.apache.struts.edit.service;
+
+import org.apache.struts.edit.model.Person;
+
+public interface EditService {
+
+
+ Person getPerson() ;
+
+ void savePerson(Person personBean);
+
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/themes_override/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/themes_override/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
new file mode 100644
index 0000000..7638152
--- /dev/null
+++ b/themes_override/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
@@ -0,0 +1,51 @@
+package org.apache.struts.edit.service;
+
+import org.apache.struts.edit.model.Person;
+
+/**
+ * Implement Services needed to edit and save
+ * a Person object's state. In this implementation
+ * the Person object's state is stored in memory
+ * @author brucephillips
+ *
+ */
+public class EditServiceInMemory implements EditService {
+
+
+ private static Person person ;
+ private static String [] carModels = {"Ford","Nissan"};
+
+
+ static {
+
+ person = new Person();
+ person.setFirstName("Bruce");
+ person.setLastName("Phillips");
+ person.setSport("basketball");
+ person.setGender("not sure");
+ person.setResidency("KS");
+ person.setOver21(true);
+ person.setCarModels( carModels);
+
+ }
+
+
+ public Person getPerson() {
+
+ return EditServiceInMemory.person;
+ }
+
+
+ public void savePerson(Person personBean) {
+
+ EditServiceInMemory.person.setFirstName(personBean.getFirstName() );
+ EditServiceInMemory.person.setLastName(personBean.getLastName() );
+ EditServiceInMemory.person.setSport(personBean.getSport() );
+ EditServiceInMemory.person.setGender( personBean.getGender() );
+ EditServiceInMemory.person.setResidency( personBean.getResidency() );
+ EditServiceInMemory.person.setOver21( personBean.isOver21() );
+ EditServiceInMemory.person.setCarModels(personBean.getCarModels() );
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/themes_override/src/main/resources/log4j.dtd b/themes_override/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/themes_override/src/main/resources/log4j.dtd
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ 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.
+-->
+
+<!-- Authors: Chris Taylor, Ceki Gulcu. -->
+
+<!-- Version: 1.2 -->
+
+<!-- A configuration element consists of optional renderer
+elements,appender elements, categories and an optional root
+element. -->
+
+<!ELEMENT log4j:configuration (renderer*, appender*,plugin*, (category|logger)*,root?,
+ (categoryFactory|loggerFactory)?)>
+
+<!-- The "threshold" attribute takes a level value below which -->
+<!-- all logging statements are disabled. -->
+
+<!-- Setting the "debug" enable the printing of internal log4j logging -->
+<!-- statements. -->
+
+<!-- By default, debug attribute is "null", meaning that we not do touch -->
+<!-- internal log4j logging settings. The "null" value for the threshold -->
+<!-- attribute can be misleading. The threshold field of a repository -->
+<!-- cannot be set to null. The "null" value for the threshold attribute -->
+<!-- simply means don't touch the threshold field, the threshold field -->
+<!-- keeps its old value. -->
+
+<!ATTLIST log4j:configuration
+ xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/"
+ threshold (all|trace|debug|info|warn|error|fatal|off|null) "null"
+ debug (true|false|null) "null"
+ reset (true|false) "false"
+>
+
+<!-- renderer elements allow the user to customize the conversion of -->
+<!-- message objects to String. -->
+
+<!ELEMENT renderer EMPTY>
+<!ATTLIST renderer
+ renderedClass CDATA #REQUIRED
+ renderingClass CDATA #REQUIRED
+>
+
+<!-- Appenders must have a name and a class. -->
+<!-- Appenders may contain an error handler, a layout, optional parameters -->
+<!-- and filters. They may also reference (or include) other appenders. -->
+<!ELEMENT appender (errorHandler?, param*,
+ rollingPolicy?, triggeringPolicy?, connectionSource?,
+ layout?, filter*, appender-ref*)>
+<!ATTLIST appender
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT layout (param*)>
+<!ATTLIST layout
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT filter (param*)>
+<!ATTLIST filter
+ class CDATA #REQUIRED
+>
+
+<!-- ErrorHandlers can be of any class. They can admit any number of -->
+<!-- parameters. -->
+
+<!ELEMENT errorHandler (param*, root-ref?, logger-ref*, appender-ref?)>
+<!ATTLIST errorHandler
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT root-ref EMPTY>
+
+<!ELEMENT logger-ref EMPTY>
+<!ATTLIST logger-ref
+ ref CDATA #REQUIRED
+>
+
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+ name CDATA #REQUIRED
+ value CDATA #REQUIRED
+>
+
+
+<!-- The priority class is org.apache.log4j.Level by default -->
+<!ELEMENT priority (param*)>
+<!ATTLIST priority
+ class CDATA #IMPLIED
+ value CDATA #REQUIRED
+>
+
+<!-- The level class is org.apache.log4j.Level by default -->
+<!ELEMENT level (param*)>
+<!ATTLIST level
+ class CDATA #IMPLIED
+ value CDATA #REQUIRED
+>
+
+
+<!-- If no level element is specified, then the configurator MUST not -->
+<!-- touch the level of the named category. -->
+<!ELEMENT category (param*,(priority|level)?,appender-ref*)>
+<!ATTLIST category
+ class CDATA #IMPLIED
+ name CDATA #REQUIRED
+ additivity (true|false) "true"
+>
+
+<!-- If no level element is specified, then the configurator MUST not -->
+<!-- touch the level of the named logger. -->
+<!ELEMENT logger (level?,appender-ref*)>
+<!ATTLIST logger
+ name CDATA #REQUIRED
+ additivity (true|false) "true"
+>
+
+
+<!ELEMENT categoryFactory (param*)>
+<!ATTLIST categoryFactory
+ class CDATA #REQUIRED>
+
+<!ELEMENT loggerFactory (param*)>
+<!ATTLIST loggerFactory
+ class CDATA #REQUIRED>
+
+<!ELEMENT appender-ref EMPTY>
+<!ATTLIST appender-ref
+ ref CDATA #REQUIRED
+>
+
+<!-- plugins must have a name and class and can have optional parameters -->
+<!ELEMENT plugin (param*, connectionSource?)>
+<!ATTLIST plugin
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT connectionSource (dataSource?, param*)>
+<!ATTLIST connectionSource
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT dataSource (param*)>
+<!ATTLIST dataSource
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT triggeringPolicy ((param|filter)*)>
+<!ATTLIST triggeringPolicy
+ name CDATA #IMPLIED
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT rollingPolicy (param*)>
+<!ATTLIST rollingPolicy
+ name CDATA #IMPLIED
+ class CDATA #REQUIRED
+>
+
+
+<!-- If no priority element is specified, then the configurator MUST not -->
+<!-- touch the priority of root. -->
+<!-- The root category always exists and cannot be subclassed. -->
+<!ELEMENT root (param*, (priority|level)?, appender-ref*)>
+
+
+<!-- ==================================================================== -->
+<!-- A logging event -->
+<!-- ==================================================================== -->
+<!ELEMENT log4j:eventSet (log4j:event*)>
+<!ATTLIST log4j:eventSet
+ xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/"
+ version (1.1|1.2) "1.2"
+ includesLocationInfo (true|false) "true"
+>
+
+
+
+<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?,
+ log4j:locationInfo?, log4j:properties?) >
+
+<!-- The timestamp format is application dependent. -->
+<!ATTLIST log4j:event
+ logger CDATA #REQUIRED
+ level CDATA #REQUIRED
+ thread CDATA #REQUIRED
+ timestamp CDATA #REQUIRED
+ time CDATA #IMPLIED
+>
+
+<!ELEMENT log4j:message (#PCDATA)>
+<!ELEMENT log4j:NDC (#PCDATA)>
+
+<!ELEMENT log4j:throwable (#PCDATA)>
+
+<!ELEMENT log4j:locationInfo EMPTY>
+<!ATTLIST log4j:locationInfo
+ class CDATA #REQUIRED
+ method CDATA #REQUIRED
+ file CDATA #REQUIRED
+ line CDATA #REQUIRED
+>
+
+<!ELEMENT log4j:properties (log4j:data*)>
+
+<!ELEMENT log4j:data EMPTY>
+<!ATTLIST log4j:data
+ name CDATA #REQUIRED
+ value CDATA #REQUIRED
+>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/themes_override/src/main/resources/log4j.xml b/themes_override/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/themes_override/src/main/resources/log4j.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+ <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %-5p %c.%M:%L - %m%n"/>
+ </layout>
+ </appender>
+
+ <!-- specify the logging level for loggers from other libraries -->
+ <logger name="com.opensymphony">
+ <level value="DEBUG" />
+ </logger>
+
+ <logger name="org.apache.struts2">
+ <level value="DEBUG" />
+ </logger>
+
+ <!-- for all other loggers log only debug and above log messages -->
+ <root>
+ <priority value="INFO"/>
+ <appender-ref ref="STDOUT" />
+ </root>
+
+</log4j:configuration>
+
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/themes_override/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/themes_override/src/main/resources/org/apache/struts/edit/action/EditAction.properties
new file mode 100644
index 0000000..0f08667
--- /dev/null
+++ b/themes_override/src/main/resources/org/apache/struts/edit/action/EditAction.properties
@@ -0,0 +1,8 @@
+personBean.firstName=First name
+personBean.lastName=Last name
+personBean.sport=Favorite sport
+personBean.gender=Gender
+personBean.residency=State resident
+personBean.over21=21 or older
+personBean.carModels=Car models owned
+submit=Save Changes
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/themes_override/src/main/resources/struts.xml b/themes_override/src/main/resources/struts.xml
new file mode 100644
index 0000000..5c37a7b
--- /dev/null
+++ b/themes_override/src/main/resources/struts.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts PUBLIC
+ "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
+ "http://struts.apache.org/dtds/struts-2.0.dtd">
+
+<struts>
+
+ <constant name="struts.devMode" value="true" />
+ <constant name="struts.ui.templateDir" value="WEB-INF/template"/>
+
+ <package name="basicstruts2" extends="struts-default">
+
+ <!-- If no class attribute is specified the framework will assume success and
+ render the result index.jsp -->
+ <!-- If no name value for the result node is specified the success value is the default -->
+ <action name="index">
+ <result>/index.jsp</result>
+ </action>
+
+ <action name="edit" class="org.apache.struts.edit.action.EditAction" method="input">
+ <result name="input">/edit.jsp</result>
+ </action>
+
+ <action name="save" class="org.apache.struts.edit.action.EditAction" method="execute">
+ <result name="success">/thankyou.jsp</result>
+ </action>
+
+ </package>
+
+</struts>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/META-INF/MANIFEST.MF b/themes_override/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/themes_override/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/a-close.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/a-close.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/a-close.ftl
new file mode 100644
index 0000000..84b5aae
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/a-close.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.
+ */
+-->
+<a<#rt/>
+<#if parameters.id?if_exists != "">
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#if parameters.href?if_exists != "">
+ href="${parameters.href}"<#rt/>
+</#if>
+<#if parameters.tabindex??>
+ tabindex="${parameters.tabindex?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" />
+>${parameters.body}</a>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/a.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/a.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/a.ftl
new file mode 100644
index 0000000..dcf27d2
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/a.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.
+ */
+-->
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/themes_override/src/main/webapp/WEB-INF/template/simple/actionerror.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/actionerror.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/actionerror.ftl
new file mode 100644
index 0000000..6563876
--- /dev/null
+++ b/themes_override/src/main/webapp/WEB-INF/template/simple/actionerror.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 (actionErrors?? && actionErrors?size > 0)>
+ <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>
+>
+ <#list actionErrors as error>
+ <#if error?if_exists != "">
+ <li><span><#if parameters.escape>${error!?html}<#else>${error!}</#if></span><#rt/></li><#rt/>
+ </#if>
+ </#list>
+ </ul>
+</#if>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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/111b1a7c/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>
+>