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

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

Repository: struts-examples
Updated Branches:
  refs/heads/master 33bf8f26a -> 65936200f


http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/src/main/webapp/view.jsp
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/webapp/view.jsp b/wildcard_method_selection/src/main/webapp/view.jsp
deleted file mode 100644
index 4c5e7f6..0000000
--- a/wildcard_method_selection/src/main/webapp/view.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
-<%
-String path = request.getContextPath();
-String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
-%>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <base href="<%=basePath%>">    
-    <title>View People</title>
-	<meta http-equiv="pragma" content="no-cache">
-	<meta http-equiv="cache-control" content="no-cache">
-	<meta http-equiv="expires" content="0">    
-
-  </head>
-  
-  <body>
-  <h3>People</h3>
-    
-    
-    <s:if test="personList.size > 0">
-       <ol>
-         <s:iterator value="personList">
-	  		<li>
-	  			<s:property value="firstName" />
-	  			
-	  			<s:property value="lastName" /> 
-	  			
-	  			<%--Put the name of the method we want to call
-	  			in front of Person.  This action will cause
-	  			the method named edit to be called in the
-	  			ActionSupport class (see struts.xml)  --%>
-  				<s:url action="editPerson" var="editUrl">
-				       <s:param name="id" value="id"/>
-			    </s:url>
-			    
-                <s:url action="deletePerson" var="deleteUrl">
-				       <s:param name="id" value="id"/>
-			    </s:url>
-			    
-	  			<a href="<s:property value='#editUrl' />" >Edit</a>
-	  			
-	  			<a href="<s:property value='#deleteUrl' />" >Delete</a>
-	  		</li>
-		</s:iterator>
-       </ol>
-    </s:if>
- 
-	<%--Put the name of the method we want to call
-    in front of Person.  This action will cause
-    the method named create to be called in the
-    ActionSupport class (see struts.xml)  --%>   
-	<s:url action="createPerson" var="newUrl">
-       <s:param name="id" value="0"/>
-     </s:url>
-     
-    <p><a href="<s:property value='#newUrl' />" > Create new person.</a></p>
-  </body>
-</html>


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/struts.xml b/message-resource/src/main/resources/struts.xml
new file mode 100644
index 0000000..6afdf20
--- /dev/null
+++ b/message-resource/src/main/resources/struts.xml
@@ -0,0 +1,37 @@
+<?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.custom.i18n.resources" value="global" />
+
+	<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>
+		
+		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
+		If the result returned by the execute method is success render the HelloWorld.jsp -->
+		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
+			<result name="success">/HelloWorld.jsp</result>
+		</action>
+		
+	<action name="registerInput" class="org.apache.struts.register.action.Register" method="input" >
+		<result name="input">/register.jsp</result>
+	</action>
+		
+	  <action name="register" class="org.apache.struts.register.action.Register" method="execute">
+		<result name="success">/thankyou.jsp</result>
+		<result name="input">/register.jsp</result>
+	  </action>
+
+	</package>
+
+</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/message-resource/src/main/webapp/HelloWorld.jsp b/message-resource/src/main/webapp/HelloWorld.jsp
new file mode 100644
index 0000000..75e150d
--- /dev/null
+++ b/message-resource/src/main/webapp/HelloWorld.jsp
@@ -0,0 +1,19 @@
+<%@ 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>Hello World!</title>
+</head>
+<body>
+<h1><s:text name="greeting" /></h1>
+<h2><s:property value="messageStore.message" /></h2>
+<p>I've said hello <s:property value="helloCount" /> times!</p>
+<p><s:property value="messageStore" /></p>
+<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
+<hr />
+<s:text name="contact" />
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/message-resource/src/main/webapp/META-INF/MANIFEST.MF b/message-resource/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/message-resource/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/433ea016/message-resource/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/message-resource/src/main/webapp/WEB-INF/web.xml b/message-resource/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..315ec50
--- /dev/null
+++ b/message-resource/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>Message Resource</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/433ea016/message-resource/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/message-resource/src/main/webapp/index.jsp b/message-resource/src/main/webapp/index.jsp
new file mode 100644
index 0000000..ba96d1e
--- /dev/null
+++ b/message-resource/src/main/webapp/index.jsp
@@ -0,0 +1,43 @@
+<%@ 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>Basic Struts 2 Application - Welcome</title>
+</head>
+<body>
+<h1>Welcome to Struts 2</h1>
+
+<p><a href="<s:url action='hello'/>">Hello World</a></p>
+<s:url action="hello" var="helloLink">
+  <s:param name="userName">Bruce Phillips</s:param>
+</s:url>
+<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
+
+<p>Get your own personal hello by filling out and submitting this form.</p>
+
+<s:form action="hello">
+
+	<s:textfield name="userName" label="Your name" />
+	
+	<s:submit value="Submit" />
+
+</s:form>
+
+<s:url action="registerInput" var="registerInputLink" >
+ <s:param name="request_locale">en</s:param>
+</s:url>
+<p><a href="${registerInputLink}">Please register</a> for our prize drawing.</p>
+
+<h3>Registro espa�ol</h3>
+<s:url action="registerInput" var="registerInputLinkES">
+    <s:param name="request_locale">es</s:param>
+</s:url>
+<p><a href="${registerInputLinkES}">Por favor, reg�strese</a> para nuestro sorteo</p>
+
+<hr />
+<s:text name="contact" />
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/message-resource/src/main/webapp/register.jsp b/message-resource/src/main/webapp/register.jsp
new file mode 100644
index 0000000..f56ca4e
--- /dev/null
+++ b/message-resource/src/main/webapp/register.jsp
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Register</title>
+<s:head />
+</head>
+<body>
+<h1><s:text name="greeting" /></h1>
+<h3><s:text name="instructions" /></h3>
+
+<s:form action="register">
+
+ 	  <s:textfield key="personBean.firstName"  />
+ 	  <s:textfield  key="personBean.lastName"  />
+ 	  <s:textfield key="personBean.email"  />  
+ 	  <s:textfield key="personBean.age"  />
+ 	  
+   	  <s:submit key="submit" />
+   	  
+</s:form>	
+ <hr />
+<s:text name="contact" />
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/message-resource/src/main/webapp/thankyou.jsp b/message-resource/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..2b8fb9c
--- /dev/null
+++ b/message-resource/src/main/webapp/thankyou.jsp
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Registration Successful</title>
+</head>
+<body>
+<h3><s:text name="thankyou" /></h3>
+
+<p>Your registration information: <s:property value="personBean" /> </p>
+
+<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
+<hr />
+<s:text name="contact" />
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/README.txt
----------------------------------------------------------------------
diff --git a/message_resource/README.txt b/message_resource/README.txt
deleted file mode 100644
index d7d59f8..0000000
--- a/message_resource/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Message Resource 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/message_resource/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/pom.xml
----------------------------------------------------------------------
diff --git a/message_resource/pom.xml b/message_resource/pom.xml
deleted file mode 100644
index 8666d3b..0000000
--- a/message_resource/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>message_resource</artifactId>
-
-  <name>Message resource</name>
-
-<description>Message resource example application for the 
-  Struts 2 getting started tutorials</description>
-  <packaging>war</packaging>
-  
-      <build>
-		<finalName>message_resource</finalName>
-	</build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/message_resource/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/message_resource/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
deleted file mode 100644
index 92fda49..0000000
--- a/message_resource/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.struts.helloworld.action;
-
-import org.apache.struts.helloworld.model.MessageStore;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a Struts 2 controller that responds
- * to a user action by setting the value
- * of the Message model class, and returns a String 
- * result.
- * @author Bruce Phillips
- *
- */
-public class HelloWorldAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-	
-	/**
-	 * The model class that stores the message
-	 * to display in the view.
-	 */
-	private MessageStore messageStore;
-	
-	private static int helloCount = 0;
-	
-	public int getHelloCount() {
-		return helloCount;
-	}
-
-	public void setHelloCount(int helloCount) {
-		HelloWorldAction.helloCount = helloCount;
-	}
-	
-	private String userName;
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	/*
-	 * Creates the MessageStore model object, 
-	 * increase helloCount by 1 and 
-	 * returns success.  The MessageStore model
-	 * object will be available to the view.
-	 * (non-Javadoc)
-	 * @see com.opensymphony.xwork2.ActionSupport#execute()
-	 */
-	public String execute() throws Exception {
-		
-		messageStore = new MessageStore() ;
-		
-		//Action included a query string parameter of userName
-		//or a form field with name of userName
-		if (userName != null) {
-			
-			messageStore.setMessage( messageStore.getMessage() + " " + userName);
-			
-		}
-		
-		helloCount++;
-		
-		return SUCCESS;
-	}
-
-	public MessageStore getMessageStore() {
-		return messageStore;
-	}
-
-	public void setMessageStore(MessageStore messageStore) {
-		this.messageStore = messageStore;
-	}
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/message_resource/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/message_resource/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
deleted file mode 100644
index b7fceeb..0000000
--- a/message_resource/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.struts.helloworld.model;
-
-/**
- * Model class that stores a message.
- * @author Bruce Phillips
- *
- */
-public class MessageStore {
-	
-	private String message;
-	
-	public MessageStore() {
-		
-		setMessage("Hello Struts User");
-	}
-
-	public String getMessage() {
-		return message;
-	}
-
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	
-	public String toString() {
-		
-		return message + " (from toString)";
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/message_resource/src/main/java/org/apache/struts/register/action/Register.java b/message_resource/src/main/java/org/apache/struts/register/action/Register.java
deleted file mode 100644
index 2d987cb..0000000
--- a/message_resource/src/main/java/org/apache/struts/register/action/Register.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.apache.struts.register.action;
-
-import org.apache.struts.register.model.Person;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a controller to handle actions
- * related to registering a user.
- * @author bruce phillips
- *
- */
-public class Register extends ActionSupport {
-	
-	private static final long serialVersionUID = 1L;
-	
-	private Person personBean;
-
-	
-	public String execute() throws Exception {
-		
-		//call Service class to store personBean's state in database
-		
-		return SUCCESS;
-		
-	}
-	
-	public void validate(){
-		
-		if ( personBean.getFirstName().length() == 0 ){	
-
-			addFieldError( "personBean.firstName", "First name is required." );
-			
-		}
-		
-				
-		if ( personBean.getEmail().length() == 0 ){	
-
-			addFieldError( "personBean.email", "Email is required." );
-			
-		}
-		
-		if ( personBean.getAge() < 18 ){	
-
-			addFieldError( "personBean.age", "Age is required and must be 18 or older" );
-			
-		}
-		
-		
-	}
-
-	
-	public Person getPersonBean() {
-		
-		return personBean;
-		
-	}
-	
-	public void setPersonBean(Person person) {
-		
-		personBean = person;
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/message_resource/src/main/java/org/apache/struts/register/model/Person.java b/message_resource/src/main/java/org/apache/struts/register/model/Person.java
deleted file mode 100644
index 3020bbb..0000000
--- a/message_resource/src/main/java/org/apache/struts/register/model/Person.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.struts.register.model;
-
-
-/**
- * Models a Person who registers.
- * @author bruce phillips
- *
- */
-public class Person
-{
-    private String firstName;
-    private String lastName;
-    private String email;
-    private int age;
-
-    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 String getEmail()
-    {
-        return email;
-    }
-
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    public int getAge()
-    {
-        return age;
-    }
-
-    public void setAge( int age)
-    {
-        this.age = age;
-    }
-
-
-    public String toString()
-    {
-        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
-        " Email:      " + getEmail() + " Age:      " + getAge() ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/resources/global.properties
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/global.properties b/message_resource/src/main/resources/global.properties
deleted file mode 100644
index 6b21b29..0000000
--- a/message_resource/src/main/resources/global.properties
+++ /dev/null
@@ -1 +0,0 @@
-contact=For assistance contact <a href='mailto:contact@email.com'>contact@email.com</a>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/resources/global_es.properties
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/global_es.properties b/message_resource/src/main/resources/global_es.properties
deleted file mode 100644
index fa01513..0000000
--- a/message_resource/src/main/resources/global_es.properties
+++ /dev/null
@@ -1 +0,0 @@
-contact=Para asistencia, comun�quese <a href='mailto:comun�quese@email.com'>comun�quese@email.com</a>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/log4j.dtd b/message_resource/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/message_resource/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/message_resource/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/log4j.xml b/message_resource/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/message_resource/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/message_resource/src/main/resources/org/apache/struts/package.properties
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/org/apache/struts/package.properties b/message_resource/src/main/resources/org/apache/struts/package.properties
deleted file mode 100644
index 4ac5698..0000000
--- a/message_resource/src/main/resources/org/apache/struts/package.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-greeting=Welcome to The Wonderful World of Struts 2
-instructions=Register for a prize by completing this form.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/resources/org/apache/struts/package_es.properties
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/org/apache/struts/package_es.properties b/message_resource/src/main/resources/org/apache/struts/package_es.properties
deleted file mode 100644
index 8f0857c..0000000
--- a/message_resource/src/main/resources/org/apache/struts/package_es.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-greeting=Bienvenido al maravilloso mundo de Struts 2
-instructions=Reg�strese para obtener un premio por completar este formulario.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/resources/org/apache/struts/register/action/Register.properties
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/org/apache/struts/register/action/Register.properties b/message_resource/src/main/resources/org/apache/struts/register/action/Register.properties
deleted file mode 100644
index 767e5db..0000000
--- a/message_resource/src/main/resources/org/apache/struts/register/action/Register.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-personBean.firstName=First name
-personBean.lastName=Last name
-personBean.age=Age
-personBean.email=Email
-thankyou=Thank you for registering %{personBean.firstName}.
-submit=Register
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/resources/org/apache/struts/register/action/Register_es.properties
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/org/apache/struts/register/action/Register_es.properties b/message_resource/src/main/resources/org/apache/struts/register/action/Register_es.properties
deleted file mode 100644
index b72712f..0000000
--- a/message_resource/src/main/resources/org/apache/struts/register/action/Register_es.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-personBean.firstName=Nombre
-personBean.lastName=Apellidos
-personBean.age=Edad
-personBean.email=Correo
-thankyou=Gracias por registrarse %{personBean.firstName}.
-submit=someter
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/message_resource/src/main/resources/struts.xml b/message_resource/src/main/resources/struts.xml
deleted file mode 100644
index 6afdf20..0000000
--- a/message_resource/src/main/resources/struts.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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.custom.i18n.resources" value="global" />
-
-	<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>
-		
-		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
-		If the result returned by the execute method is success render the HelloWorld.jsp -->
-		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
-			<result name="success">/HelloWorld.jsp</result>
-		</action>
-		
-	<action name="registerInput" class="org.apache.struts.register.action.Register" method="input" >
-		<result name="input">/register.jsp</result>
-	</action>
-		
-	  <action name="register" class="org.apache.struts.register.action.Register" method="execute">
-		<result name="success">/thankyou.jsp</result>
-		<result name="input">/register.jsp</result>
-	  </action>
-
-	</package>
-
-</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/message_resource/src/main/webapp/HelloWorld.jsp b/message_resource/src/main/webapp/HelloWorld.jsp
deleted file mode 100644
index 75e150d..0000000
--- a/message_resource/src/main/webapp/HelloWorld.jsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<%@ 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>Hello World!</title>
-</head>
-<body>
-<h1><s:text name="greeting" /></h1>
-<h2><s:property value="messageStore.message" /></h2>
-<p>I've said hello <s:property value="helloCount" /> times!</p>
-<p><s:property value="messageStore" /></p>
-<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
-<hr />
-<s:text name="contact" />
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/message_resource/src/main/webapp/META-INF/MANIFEST.MF b/message_resource/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/message_resource/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/message_resource/src/main/webapp/WEB-INF/web.xml b/message_resource/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 315ec50..0000000
--- a/message_resource/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Message Resource</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/433ea016/message_resource/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/message_resource/src/main/webapp/index.jsp b/message_resource/src/main/webapp/index.jsp
deleted file mode 100644
index 8abcfb5..0000000
--- a/message_resource/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,42 +0,0 @@
-<%@ 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>Basic Struts 2 Application - Welcome</title>
-</head>
-<body>
-<h1>Welcome to Struts 2</h1>
-
-<p><a href="<s:url action='hello'/>">Hello World</a></p>
-<s:url action="hello" var="helloLink">
-  <s:param name="userName">Bruce Phillips</s:param>
-</s:url>
-<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
-
-<p>Get your own personal hello by filling out and submitting this form.</p>
-
-<s:form action="hello">
-
-	<s:textfield name="userName" label="Your name" />
-	
-	<s:submit value="Submit" />
-
-</s:form>
-
-<s:url action="registerInput" var="registerInputLink" >
- <s:param name="request_locale">en</s:param>
-</s:url>
-<p><a href="${registerInputLink}">Please register</a> for our prize drawing.</p>
-<h3>Registro espa�ol</h3>
-<s:url action="registerInput" var="registerInputLinkES">
-    <s:param name="request_locale">es</s:param>
-</s:url>
-<p><a href="${registerInputLinkES}">Por favor, reg�strese</a> para nuestro sorteo</p>
-
-<hr />
-<s:text name="contact" />
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/message_resource/src/main/webapp/register.jsp b/message_resource/src/main/webapp/register.jsp
deleted file mode 100644
index f56ca4e..0000000
--- a/message_resource/src/main/webapp/register.jsp
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Register</title>
-<s:head />
-</head>
-<body>
-<h1><s:text name="greeting" /></h1>
-<h3><s:text name="instructions" /></h3>
-
-<s:form action="register">
-
- 	  <s:textfield key="personBean.firstName"  />
- 	  <s:textfield  key="personBean.lastName"  />
- 	  <s:textfield key="personBean.email"  />  
- 	  <s:textfield key="personBean.age"  />
- 	  
-   	  <s:submit key="submit" />
-   	  
-</s:form>	
- <hr />
-<s:text name="contact" />
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message_resource/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/message_resource/src/main/webapp/thankyou.jsp b/message_resource/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 2b8fb9c..0000000
--- a/message_resource/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Registration Successful</title>
-</head>
-<body>
-<h3><s:text name="thankyou" /></h3>
-
-<p>Your registration information: <s:property value="personBean" /> </p>
-
-<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
-<hr />
-<s:text name="contact" />
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2b99e14..e3c4943 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,28 +44,28 @@
         <module>jboss-blank</module>
         <module>mailreader</module>
         <module>helloworld</module>
-        <module>using_tags</module>
+        <module>using-tags</module>
         <module>coding-actions</module>
-        <module>form_processing</module>
-        <module>form_validation</module>
-        <module>message_resource</module>
-        <module>exception_handling</module>
+        <module>form-processing</module>
+        <module>form-validation</module>
+        <module>message-resource</module>
+        <module>exception-handling</module>
         <module>debugging-struts</module>
-        <module>form_tags</module>
-        <module>form_xml_validation</module>
+        <module>form-tags</module>
+        <module>form-xml-validation</module>
         <module>control-tags</module>
-        <module>wildcard_method_selection</module>
+        <module>wildcard-method-selection</module>
         <module>themes</module>
-        <module>spring_struts</module>
+        <module>spring-struts</module>
         <module>annotations</module>
         <module>interceptors</module>
-        <module>unit_testing</module>
-        <module>http_session</module>
-        <module>preparable_interface</module>
-        <module>exclude_parameters</module>
+        <module>unit-testing</module>
+        <module>http-session</module>
+        <module>preparable-interface</module>
+        <module>exclude-parameters</module>
         <module>restful2actionmapper</module>
         <module>bean-validation</module>
-        <module>themes_override</module>
+        <module>themes-override</module>
     </modules>
 
     <dependencies>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/README.txt
----------------------------------------------------------------------
diff --git a/preparable-interface/README.txt b/preparable-interface/README.txt
new file mode 100644
index 0000000..067c0d8
--- /dev/null
+++ b/preparable-interface/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Preparable Interface 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/preparable-interface/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/pom.xml
----------------------------------------------------------------------
diff --git a/preparable-interface/pom.xml b/preparable-interface/pom.xml
new file mode 100644
index 0000000..ee7d994
--- /dev/null
+++ b/preparable-interface/pom.xml
@@ -0,0 +1,24 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>preparable-interface</artifactId>
+
+    <name>Preparable Interface</name>
+
+    <description>Struts 2 example application for the preparable interface getting started tutorial</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>preparable-interface</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/java/org/apache/struts/edit/action/EditAction.java b/preparable-interface/src/main/java/org/apache/struts/edit/action/EditAction.java
new file mode 100644
index 0000000..1d9f288
--- /dev/null
+++ b/preparable-interface/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -0,0 +1,96 @@
+package org.apache.struts.edit.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.Preparable;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts.edit.model.Person;
+import org.apache.struts.edit.model.State;
+import org.apache.struts.edit.service.CarModelsService;
+import org.apache.struts.edit.service.CarModelsServiceHardCoded;
+import org.apache.struts.edit.service.EditService;
+import org.apache.struts.edit.service.EditServiceInMemory;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Acts as a controller to handle actions
+ * related to editing a Person.
+ *
+ * @author bruce phillips
+ */
+public class EditAction extends ActionSupport implements Preparable {
+
+    private static Logger log = LogManager.getLogger(EditAction.class);
+    private static final long serialVersionUID = 1L;
+
+    private EditService editService = new EditServiceInMemory();
+    private CarModelsService carModelsService = new CarModelsServiceHardCoded();
+
+    private Person personBean;
+    private String[] sports = {"football", "baseball", "basketball"};
+    private String[] genders = {"male", "female", "not sure"};
+    private List<State> states;
+    private String[] carModelsAvailable;
+
+
+    @Override
+    public void prepare() throws Exception {
+        log.debug("In prepare method...");
+        carModelsAvailable = carModelsService.getCarModels();
+        setPersonBean(editService.getPerson());
+    }
+
+    public void prepareExecute() {
+        log.debug("In prepareExecute method...");
+    }
+
+    public String execute() throws Exception {
+        log.debug("In execute method...");
+        editService.savePerson(getPersonBean());
+        return SUCCESS;
+    }
+
+    public void prepareInput() {
+        log.debug("In prepareInput method...");
+    }
+
+    public String input() throws Exception {
+        log.debug("In input method...");
+        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<>();
+        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/433ea016/preparable-interface/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/java/org/apache/struts/edit/model/Person.java b/preparable-interface/src/main/java/org/apache/struts/edit/model/Person.java
new file mode 100644
index 0000000..2d127eb
--- /dev/null
+++ b/preparable-interface/src/main/java/org/apache/struts/edit/model/Person.java
@@ -0,0 +1,121 @@
+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;
+    private String email;
+    private String phoneNumber;
+   
+ 
+
+    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() ) + " | " +
+        " Email: " + getEmail() + " | " +
+        " Phone: " + getPhoneNumber();
+        
+        
+    }
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setPhoneNumber(String phoneNumber) {
+		this.phoneNumber = phoneNumber;
+	}
+
+	public String getPhoneNumber() {
+		return phoneNumber;
+	}
+
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/java/org/apache/struts/edit/model/State.java b/preparable-interface/src/main/java/org/apache/struts/edit/model/State.java
new file mode 100644
index 0000000..8746add
--- /dev/null
+++ b/preparable-interface/src/main/java/org/apache/struts/edit/model/State.java
@@ -0,0 +1,35 @@
+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/433ea016/preparable-interface/src/main/java/org/apache/struts/edit/service/CarModelsService.java
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/java/org/apache/struts/edit/service/CarModelsService.java b/preparable-interface/src/main/java/org/apache/struts/edit/service/CarModelsService.java
new file mode 100644
index 0000000..e931dbe
--- /dev/null
+++ b/preparable-interface/src/main/java/org/apache/struts/edit/service/CarModelsService.java
@@ -0,0 +1,18 @@
+/**
+ * 
+ */
+package org.apache.struts.edit.service;
+
+/**
+ * Specifies what methods a CarModelService
+ * class must implement to provide information
+ * about car models.
+ * @author bphillips
+ *
+ */
+public interface CarModelsService {
+	
+	
+	String [] getCarModels() ;
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java b/preparable-interface/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
new file mode 100644
index 0000000..7d7eb20
--- /dev/null
+++ b/preparable-interface/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
@@ -0,0 +1,22 @@
+package org.apache.struts.edit.service;
+
+/**
+ * Provides information on car models using data hard-coded
+ * in this class.
+ * @author bphillips
+ *
+ */
+public class CarModelsServiceHardCoded implements CarModelsService {
+	
+
+	@Override
+	public String[] getCarModels() {
+		
+		String [] carModelsAvailable = {"Ford","Chrysler","Toyota","Nissan"};
+		
+		return carModelsAvailable ;
+		
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/java/org/apache/struts/edit/service/EditService.java b/preparable-interface/src/main/java/org/apache/struts/edit/service/EditService.java
new file mode 100644
index 0000000..79d759a
--- /dev/null
+++ b/preparable-interface/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/433ea016/preparable-interface/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/preparable-interface/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
new file mode 100644
index 0000000..b0821fb
--- /dev/null
+++ b/preparable-interface/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
@@ -0,0 +1,60 @@
+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.setEmail("bphillips@ku.edu");
+		person.setSport("basketball");
+		person.setGender("not sure");
+		person.setResidency("KS");
+		person.setOver21(true);		
+		person.setCarModels( carModels);	
+		person.setPhoneNumber("123-456-9999");
+
+		
+
+	}
+
+	
+	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() );
+		EditServiceInMemory.person.setEmail( personBean.getEmail() );
+		EditServiceInMemory.person.setPhoneNumber( personBean.getPhoneNumber() );
+
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/resources/log4j2.xml b/preparable-interface/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..d7c09f9
--- /dev/null
+++ b/preparable-interface/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Logger name="com.opensymphony.xwork2" level="info"/>
+        <Logger name="org.apache.struts2" level="info"/>
+        <Logger name="org.apache.struts2.edit" level="debug"/>
+        <Root level="warn">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml b/preparable-interface/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
new file mode 100644
index 0000000..0a884ff
--- /dev/null
+++ b/preparable-interface/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
@@ -0,0 +1,35 @@
+<!DOCTYPE validators PUBLIC
+         "-//Apache Struts//XWork Validator 1.0.3//EN"
+           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
+<validators>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.firstName</param>
+ 	<message>First name is required.</message>
+ </validator>
+  <validator type="requiredstring">
+ 	<param name="fieldname">personBean.lastName</param>
+ 	<message>Last name is required.</message>
+ </validator>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.email</param>
+ 	<message>Email address is required.</message>
+ </validator>
+ <validator type="email">
+ 	<param name="fieldname">personBean.email</param>
+ 	<message>Email address not valid.</message>
+ </validator>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.phoneNumber</param>
+ 	<message>Phone number is required.</message>
+ </validator>
+<validator type="regex">
+	<param name="fieldname">personBean.phoneNumber</param>
+	<param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>
+	<message>Phone number must be entered as 999-999-9999.</message>
+</validator>
+<validator type="fieldexpression">
+	<param name="fieldname">personBean.carModels</param>
+	<param name="expression"><![CDATA[personBean.carModels.length > 0]]></param>
+	<message>You must select at least one car model.</message>
+</validator>
+</validators>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable-interface/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/preparable-interface/src/main/resources/org/apache/struts/edit/action/EditAction.properties
new file mode 100644
index 0000000..1b36d51
--- /dev/null
+++ b/preparable-interface/src/main/resources/org/apache/struts/edit/action/EditAction.properties
@@ -0,0 +1,10 @@
+personBean.firstName=First name
+personBean.lastName=Last name
+personBean.email=Email address
+personBean.phoneNumber=Phone number (999-999-9999)
+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/433ea016/preparable-interface/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/resources/struts.xml b/preparable-interface/src/main/resources/struts.xml
new file mode 100644
index 0000000..893019d
--- /dev/null
+++ b/preparable-interface/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" />
+
+	<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="input">/edit.jsp</result>
+	    	<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/433ea016/preparable-interface/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/webapp/META-INF/MANIFEST.MF b/preparable-interface/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/preparable-interface/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/433ea016/preparable-interface/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/webapp/WEB-INF/web.xml b/preparable-interface/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..1790bae
--- /dev/null
+++ b/preparable-interface/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>Preparable Interface</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/433ea016/preparable-interface/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/webapp/edit.jsp b/preparable-interface/src/main/webapp/edit.jsp
new file mode 100644
index 0000000..67a9901
--- /dev/null
+++ b/preparable-interface/src/main/webapp/edit.jsp
@@ -0,0 +1,30 @@
+<%@ 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:textfield key="personBean.email" />
+<s:textfield key="personBean.phoneNumber" />
+<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/433ea016/preparable-interface/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/webapp/index.jsp b/preparable-interface/src/main/webapp/index.jsp
new file mode 100644
index 0000000..88209d8
--- /dev/null
+++ b/preparable-interface/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/433ea016/preparable-interface/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/preparable-interface/src/main/webapp/thankyou.jsp b/preparable-interface/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..5fa306f
--- /dev/null
+++ b/preparable-interface/src/main/webapp/thankyou.jsp
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/README.txt
----------------------------------------------------------------------
diff --git a/preparable_interface/README.txt b/preparable_interface/README.txt
deleted file mode 100644
index 53aa897..0000000
--- a/preparable_interface/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Preparable Interface 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/preparable_interface/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/pom.xml
----------------------------------------------------------------------
diff --git a/preparable_interface/pom.xml b/preparable_interface/pom.xml
deleted file mode 100644
index 6a73556..0000000
--- a/preparable_interface/pom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>preparable_interface</artifactId>
-
-  <name>Preparable Interface</name>
-  
-   <description>Struts 2 example application for the
-  preparable interface getting started tutorial</description>
-
-  <packaging>war</packaging>
-  
-  	<build>
-		<finalName>preparable_interface</finalName>
-	</build>
-  
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/java/org/apache/struts/edit/action/EditAction.java b/preparable_interface/src/main/java/org/apache/struts/edit/action/EditAction.java
deleted file mode 100644
index 1d9f288..0000000
--- a/preparable_interface/src/main/java/org/apache/struts/edit/action/EditAction.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.apache.struts.edit.action;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.Preparable;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.struts.edit.model.Person;
-import org.apache.struts.edit.model.State;
-import org.apache.struts.edit.service.CarModelsService;
-import org.apache.struts.edit.service.CarModelsServiceHardCoded;
-import org.apache.struts.edit.service.EditService;
-import org.apache.struts.edit.service.EditServiceInMemory;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Acts as a controller to handle actions
- * related to editing a Person.
- *
- * @author bruce phillips
- */
-public class EditAction extends ActionSupport implements Preparable {
-
-    private static Logger log = LogManager.getLogger(EditAction.class);
-    private static final long serialVersionUID = 1L;
-
-    private EditService editService = new EditServiceInMemory();
-    private CarModelsService carModelsService = new CarModelsServiceHardCoded();
-
-    private Person personBean;
-    private String[] sports = {"football", "baseball", "basketball"};
-    private String[] genders = {"male", "female", "not sure"};
-    private List<State> states;
-    private String[] carModelsAvailable;
-
-
-    @Override
-    public void prepare() throws Exception {
-        log.debug("In prepare method...");
-        carModelsAvailable = carModelsService.getCarModels();
-        setPersonBean(editService.getPerson());
-    }
-
-    public void prepareExecute() {
-        log.debug("In prepareExecute method...");
-    }
-
-    public String execute() throws Exception {
-        log.debug("In execute method...");
-        editService.savePerson(getPersonBean());
-        return SUCCESS;
-    }
-
-    public void prepareInput() {
-        log.debug("In prepareInput method...");
-    }
-
-    public String input() throws Exception {
-        log.debug("In input method...");
-        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<>();
-        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/433ea016/preparable_interface/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/java/org/apache/struts/edit/model/Person.java b/preparable_interface/src/main/java/org/apache/struts/edit/model/Person.java
deleted file mode 100644
index 2d127eb..0000000
--- a/preparable_interface/src/main/java/org/apache/struts/edit/model/Person.java
+++ /dev/null
@@ -1,121 +0,0 @@
-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;
-    private String email;
-    private String phoneNumber;
-   
- 
-
-    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() ) + " | " +
-        " Email: " + getEmail() + " | " +
-        " Phone: " + getPhoneNumber();
-        
-        
-    }
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setPhoneNumber(String phoneNumber) {
-		this.phoneNumber = phoneNumber;
-	}
-
-	public String getPhoneNumber() {
-		return phoneNumber;
-	}
-
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/java/org/apache/struts/edit/model/State.java b/preparable_interface/src/main/java/org/apache/struts/edit/model/State.java
deleted file mode 100644
index 8746add..0000000
--- a/preparable_interface/src/main/java/org/apache/struts/edit/model/State.java
+++ /dev/null
@@ -1,35 +0,0 @@
-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/433ea016/preparable_interface/src/main/java/org/apache/struts/edit/service/CarModelsService.java
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/java/org/apache/struts/edit/service/CarModelsService.java b/preparable_interface/src/main/java/org/apache/struts/edit/service/CarModelsService.java
deleted file mode 100644
index e931dbe..0000000
--- a/preparable_interface/src/main/java/org/apache/struts/edit/service/CarModelsService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * 
- */
-package org.apache.struts.edit.service;
-
-/**
- * Specifies what methods a CarModelService
- * class must implement to provide information
- * about car models.
- * @author bphillips
- *
- */
-public interface CarModelsService {
-	
-	
-	String [] getCarModels() ;
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java b/preparable_interface/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
deleted file mode 100644
index 7d7eb20..0000000
--- a/preparable_interface/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.apache.struts.edit.service;
-
-/**
- * Provides information on car models using data hard-coded
- * in this class.
- * @author bphillips
- *
- */
-public class CarModelsServiceHardCoded implements CarModelsService {
-	
-
-	@Override
-	public String[] getCarModels() {
-		
-		String [] carModelsAvailable = {"Ford","Chrysler","Toyota","Nissan"};
-		
-		return carModelsAvailable ;
-		
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/java/org/apache/struts/edit/service/EditService.java b/preparable_interface/src/main/java/org/apache/struts/edit/service/EditService.java
deleted file mode 100644
index f52e053..0000000
--- a/preparable_interface/src/main/java/org/apache/struts/edit/service/EditService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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/433ea016/preparable_interface/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/preparable_interface/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
deleted file mode 100644
index 8fd35e2..0000000
--- a/preparable_interface/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
+++ /dev/null
@@ -1,60 +0,0 @@
-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.setEmail("bphillips@ku.edu");
-		person.setSport("basketball");
-		person.setGender("not sure");
-		person.setResidency("KS");
-		person.setOver21(true);		
-		person.setCarModels( carModels);	
-		person.setPhoneNumber("123-456-9999");
-
-		
-
-	}
-
-	
-	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() );
-		EditServiceInMemory.person.setEmail( personBean.getEmail() );
-		EditServiceInMemory.person.setPhoneNumber( personBean.getPhoneNumber() );
-
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/resources/log4j2.xml b/preparable_interface/src/main/resources/log4j2.xml
deleted file mode 100644
index d7c09f9..0000000
--- a/preparable_interface/src/main/resources/log4j2.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Configuration>
-    <Appenders>
-        <Console name="STDOUT" target="SYSTEM_OUT">
-            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
-        </Console>
-    </Appenders>
-    <Loggers>
-        <Logger name="com.opensymphony.xwork2" level="info"/>
-        <Logger name="org.apache.struts2" level="info"/>
-        <Logger name="org.apache.struts2.edit" level="debug"/>
-        <Root level="warn">
-            <AppenderRef ref="STDOUT"/>
-        </Root>
-    </Loggers>
-</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml b/preparable_interface/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
deleted file mode 100644
index 0a884ff..0000000
--- a/preparable_interface/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE validators PUBLIC
-         "-//Apache Struts//XWork Validator 1.0.3//EN"
-           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-<validators>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.firstName</param>
- 	<message>First name is required.</message>
- </validator>
-  <validator type="requiredstring">
- 	<param name="fieldname">personBean.lastName</param>
- 	<message>Last name is required.</message>
- </validator>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.email</param>
- 	<message>Email address is required.</message>
- </validator>
- <validator type="email">
- 	<param name="fieldname">personBean.email</param>
- 	<message>Email address not valid.</message>
- </validator>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.phoneNumber</param>
- 	<message>Phone number is required.</message>
- </validator>
-<validator type="regex">
-	<param name="fieldname">personBean.phoneNumber</param>
-	<param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>
-	<message>Phone number must be entered as 999-999-9999.</message>
-</validator>
-<validator type="fieldexpression">
-	<param name="fieldname">personBean.carModels</param>
-	<param name="expression"><![CDATA[personBean.carModels.length > 0]]></param>
-	<message>You must select at least one car model.</message>
-</validator>
-</validators>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/preparable_interface/src/main/resources/org/apache/struts/edit/action/EditAction.properties
deleted file mode 100644
index 83f400a..0000000
--- a/preparable_interface/src/main/resources/org/apache/struts/edit/action/EditAction.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-personBean.firstName=First name
-personBean.lastName=Last name
-personBean.email=Email address
-personBean.phoneNumber=Phone number (999-999-9999)
-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/433ea016/preparable_interface/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/resources/struts.xml b/preparable_interface/src/main/resources/struts.xml
deleted file mode 100644
index 893019d..0000000
--- a/preparable_interface/src/main/resources/struts.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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" />
-
-	<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="input">/edit.jsp</result>
-	    	<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/433ea016/preparable_interface/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/webapp/META-INF/MANIFEST.MF b/preparable_interface/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/preparable_interface/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/webapp/WEB-INF/web.xml b/preparable_interface/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 1790bae..0000000
--- a/preparable_interface/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Preparable Interface</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>


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/>
+		&nbsp;<input type="button" value="${defMoveUpLabel}" onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
+	<#else><#t/>
+		&nbsp;<input type="button" value="${defMoveUpLabel}" onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
+	</#if><#t/>
+</#if><#t/>
+<#if parameters.allowMoveDown?default(true)><#t/>
+	<#assign defMoveDownLabel="${parameters.moveDownLabel?default('v')}" /><#t/>
+	<#if parameters.headerKey??><#t/>
+		&nbsp;<input type="button" value="${defMoveDownLabel}" onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
+	<#else><#t/>
+		&nbsp;<input type="button" value="${defMoveDownLabel}" onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
+	</#if><#t/>
+</#if><#t/>
+<#if parameters.allowSelectAll?default(true)><#t/>
+	<#assign defSelectAllLabel="${parameters.selectAllLabel?default('*')}" /><#t/>
+	<#if parameters.headerKey??><#t/>
+		&nbsp;<input type="button" value="${defSelectAllLabel}" onclick="selectAllOptionsExceptSome(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
+	<#else><#t/>
+		&nbsp;<input type="button" value="${defSelectAllLabel}" onclick="selectAllOptions(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
+	</#if><#t/>
+</#if><#t/>
+</td></tr>
+</table>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/src/main/webapp/WEB-INF/template/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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" />

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/>


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/resources/log4j.dtd b/unit_testing/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/unit_testing/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/unit_testing/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/resources/log4j.xml b/unit_testing/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/unit_testing/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/unit_testing/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/resources/struts.xml b/unit_testing/src/main/resources/struts.xml
deleted file mode 100644
index 21cc563..0000000
--- a/unit_testing/src/main/resources/struts.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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" />
-
-	<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="register" class="org.apache.struts.register.action.Register" method="execute">
-		<result name="success">/thankyou.jsp</result>
-		<result name="input">/register.jsp</result>
-	  </action>
-
-	</package>
-
-</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/webapp/META-INF/MANIFEST.MF b/unit_testing/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/unit_testing/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/webapp/WEB-INF/web.xml b/unit_testing/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 794e993..0000000
--- a/unit_testing/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Struts 2 Unit Testing</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/433ea016/unit_testing/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/webapp/index.jsp b/unit_testing/src/main/webapp/index.jsp
deleted file mode 100644
index 48d3fc5..0000000
--- a/unit_testing/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@ 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>Basic Struts 2 Application - Welcome</title>
-</head>
-<body>
-<h1>Welcome To Struts 2!</h1>
-
-
-
-<p><a href="register.jsp">Please register</a> for our prize drawing.</p>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/webapp/register.jsp b/unit_testing/src/main/webapp/register.jsp
deleted file mode 100644
index a4acb15..0000000
--- a/unit_testing/src/main/webapp/register.jsp
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Register</title>
-<s:head />
-</head>
-<body>
-<h3>Register for a prize by completing this form.</h3>
-
-<s:form action="register">
-
- 	  <s:textfield name="personBean.firstName" label="First name" />
- 	  <s:textfield  name="personBean.lastName" label="Last name" />
- 	  <s:textfield name="personBean.email"  label ="Email"/>  
- 	  <s:textfield name="personBean.age"  label="Age"  />
- 	  
-   	  <s:submit/>
-   	  
-</s:form>	
- 
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/webapp/thankyou.jsp b/unit_testing/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 3c845bc..0000000
--- a/unit_testing/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Registration Successful</title>
-</head>
-<body>
-<h3>Thank you for registering for a prize.</h3>
-
-<p>Your registration 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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/src/test/java/org/apache/struts/register/action/RegisterTest.java
----------------------------------------------------------------------
diff --git a/unit_testing/src/test/java/org/apache/struts/register/action/RegisterTest.java b/unit_testing/src/test/java/org/apache/struts/register/action/RegisterTest.java
deleted file mode 100644
index d4e98a5..0000000
--- a/unit_testing/src/test/java/org/apache/struts/register/action/RegisterTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.apache.struts.register.action;
-
-
-
-import org.apache.struts2.StrutsTestCase;
-import org.junit.Test;
-
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionSupport;
-
-public class RegisterTest extends StrutsTestCase {
-
-	@Test
-	public void testExecuteValidationPasses() throws Exception {
-		
-		request.setParameter("personBean.firstName", "Bruce");
-		
-		request.setParameter("personBean.lastName", "Phillips");
-		
-		request.setParameter("personBean.email", "bphillips@ku.edu");
-		
-		request.setParameter("personBean.age", "19");
-			
-		ActionProxy actionProxy = getActionProxy("/register.action") ;
-		
-		Register action = (Register) actionProxy.getAction();
-		
-		assertNotNull("The action is null but should not be.", action);
-
-		String result = actionProxy.execute();
-		
-		assertEquals("The execute method did not return " + ActionSupport.SUCCESS + " but should have.", ActionSupport.SUCCESS, result);
-
-	}
-	
-	@Test
-	public void testExecuteValidationFailsMissingFirstName() throws Exception {
-		
-		request.setParameter("personBean.firstName", "Bruce");
-		
-		request.setParameter("personBean.lastName", "Phillips");
-		
-		request.setParameter("personBean.email", "bphillips@ku.edu");
-		
-		request.setParameter("personBean.age", "17");
-			
-		ActionProxy actionProxy = getActionProxy("/register.action") ;
-		
-		Register action = (Register) actionProxy.getAction();
-		
-		assertNotNull("The action is null but should not be.", action);
-
-		String result = actionProxy.execute();
-		
-		assertEquals("The execute method did not return " + ActionSupport.INPUT + " but should have.", ActionSupport.INPUT, result);
-
-	}
-	
-	
-	@Test
-	public void testExecuteValidationFailsAgeToYoung() throws Exception {
-		
-		
-		request.setParameter("personBean.lastName", "Phillips");
-		
-		request.setParameter("personBean.email", "bphillips@ku.edu");
-		
-		request.setParameter("personBean.age", "19");
-			
-		ActionProxy actionProxy = getActionProxy("/register.action") ;
-		
-		Register action = (Register) actionProxy.getAction();
-		
-		assertNotNull("The action is null but should not be.", action);
-
-		String result = actionProxy.execute();
-		
-		assertEquals("The execute method did not return " + ActionSupport.INPUT + " but should have.", ActionSupport.INPUT, result);
-
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using-tags/README.txt
----------------------------------------------------------------------
diff --git a/using-tags/README.txt b/using-tags/README.txt
new file mode 100644
index 0000000..2ebb6ed
--- /dev/null
+++ b/using-tags/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Using Tags 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/using-tags/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using-tags/pom.xml
----------------------------------------------------------------------
diff --git a/using-tags/pom.xml b/using-tags/pom.xml
new file mode 100644
index 0000000..4da6604
--- /dev/null
+++ b/using-tags/pom.xml
@@ -0,0 +1,23 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>using-tags</artifactId>
+    <name>Using Struts 2 Tags</name>
+
+    <description>Struts 2 example application for the Using Struts 2 Tags getting started tutorial</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>using_tags</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using-tags/src/main/java/org/apache/struts/using_tags/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/using-tags/src/main/java/org/apache/struts/using_tags/helloworld/action/HelloWorldAction.java b/using-tags/src/main/java/org/apache/struts/using_tags/helloworld/action/HelloWorldAction.java
new file mode 100644
index 0000000..2a777be
--- /dev/null
+++ b/using-tags/src/main/java/org/apache/struts/using_tags/helloworld/action/HelloWorldAction.java
@@ -0,0 +1,62 @@
+package org.apache.struts.using_tags.helloworld.action;
+
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.using_tags.helloworld.model.MessageStore;
+
+/**
+ * Acts as a Struts 2 controller that responds
+ * to a user action by setting the value
+ * of the Message model class, and returns a String 
+ * result.
+ * @author Bruce Phillips
+ *
+ */
+public class HelloWorldAction extends ActionSupport {
+
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * The model class that stores the message
+	 * to display in the view.
+	 */
+	private MessageStore messageStore;
+	
+	private static int helloCount = 0;
+	
+	public int getHelloCount() {
+		return helloCount;
+	}
+
+	public void setHelloCount(int helloCount) {
+		HelloWorldAction.helloCount = helloCount;
+	}
+
+	/*
+	 * Creates the MessageStore model object, 
+	 * increase helloCount by 1 and 
+	 * returns success.  The MessageStore model
+	 * object will be available to the view.
+	 * (non-Javadoc)
+	 * @see com.opensymphony.xwork2.ActionSupport#execute()
+	 */
+	public String execute() throws Exception {
+		
+		messageStore = new MessageStore() ;
+		
+		helloCount++;
+		
+		return SUCCESS;
+	}
+
+	public MessageStore getMessageStore() {
+		return messageStore;
+	}
+
+	public void setMessageStore(MessageStore messageStore) {
+		this.messageStore = messageStore;
+	}
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using-tags/src/main/java/org/apache/struts/using_tags/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/using-tags/src/main/java/org/apache/struts/using_tags/helloworld/model/MessageStore.java b/using-tags/src/main/java/org/apache/struts/using_tags/helloworld/model/MessageStore.java
new file mode 100644
index 0000000..8870513
--- /dev/null
+++ b/using-tags/src/main/java/org/apache/struts/using_tags/helloworld/model/MessageStore.java
@@ -0,0 +1,31 @@
+package org.apache.struts.using_tags.helloworld.model;
+
+/**
+ * Model class that stores a message.
+ * @author Bruce Phillips
+ *
+ */
+public class MessageStore {
+	
+	private String message;
+	
+	public MessageStore() {
+		
+		setMessage("Hello Struts User");
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+	public String toString() {
+		
+		return message + " (from toString)";
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using-tags/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/using-tags/src/main/resources/log4j.dtd b/using-tags/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/using-tags/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/433ea016/using-tags/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/using-tags/src/main/resources/log4j.xml b/using-tags/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/using-tags/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/433ea016/using-tags/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/using-tags/src/main/resources/struts.xml b/using-tags/src/main/resources/struts.xml
new file mode 100644
index 0000000..f162457
--- /dev/null
+++ b/using-tags/src/main/resources/struts.xml
@@ -0,0 +1,27 @@
+<?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" />
+
+	<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>
+		
+		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
+		If the result returned by the execute method is success render the HelloWorld.jsp -->
+		<action name="hello" class="org.apache.struts.using_tags.helloworld.action.HelloWorldAction" method="execute">
+			<result name="success">/HelloWorld.jsp</result>
+		</action>
+
+	</package>
+
+</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using-tags/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/using-tags/src/main/webapp/HelloWorld.jsp b/using-tags/src/main/webapp/HelloWorld.jsp
new file mode 100644
index 0000000..108810c
--- /dev/null
+++ b/using-tags/src/main/webapp/HelloWorld.jsp
@@ -0,0 +1,15 @@
+<%@ 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>Hello World!</title>
+</head>
+<body>
+<h2><s:property value="messageStore.message" /></h2>
+<p>I've said hello <s:property value="helloCount" /> times!</p>
+<p><s:property value="messageStore" /></p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using-tags/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/using-tags/src/main/webapp/WEB-INF/web.xml b/using-tags/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..ac8a81b
--- /dev/null
+++ b/using-tags/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>Using_Tags_Struts2</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/433ea016/using-tags/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/using-tags/src/main/webapp/index.jsp b/using-tags/src/main/webapp/index.jsp
new file mode 100644
index 0000000..f9bcea2
--- /dev/null
+++ b/using-tags/src/main/webapp/index.jsp
@@ -0,0 +1,28 @@
+<%@ 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>Basic Struts 2 Application - Welcome</title>
+</head>
+<body>
+<h1>Welcome To Struts 2!</h1>
+<p><a href="<s:url action='hello'/>">Hello World</a></p>
+<s:url action="hello" var="helloLink">
+  <s:param name="userName">Bruce Phillips</s:param>
+</s:url>
+<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
+
+<p>Get your own personal hello by filling out and submitting this form.</p>
+
+<s:form action="hello">
+
+	<s:textfield name="userName" label="Your name" />
+	
+	<s:submit value="Submit" />
+
+</s:form>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using_tags/README.txt
----------------------------------------------------------------------
diff --git a/using_tags/README.txt b/using_tags/README.txt
deleted file mode 100644
index 426c32c..0000000
--- a/using_tags/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Using Tags 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/using_tags/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using_tags/pom.xml
----------------------------------------------------------------------
diff --git a/using_tags/pom.xml b/using_tags/pom.xml
deleted file mode 100644
index 54a61c4..0000000
--- a/using_tags/pom.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-  <artifactId>using_tags</artifactId>
-  <name>using_tags</name>
-  <description>Struts 2 example application for the
-  Using Struts 2 Tags getting started tutorial</description>
-
-  <packaging>war</packaging>
-  
-  	<build>
-		<finalName>using_tags</finalName>
-	</build>
-  
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using_tags/src/main/java/org/apache/struts/using_tags/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/using_tags/src/main/java/org/apache/struts/using_tags/helloworld/action/HelloWorldAction.java b/using_tags/src/main/java/org/apache/struts/using_tags/helloworld/action/HelloWorldAction.java
deleted file mode 100644
index 85017d9..0000000
--- a/using_tags/src/main/java/org/apache/struts/using_tags/helloworld/action/HelloWorldAction.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.apache.struts.using_tags.helloworld.action;
-
-
-
-import org.apache.struts.using_tags.helloworld.model.MessageStore;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a Struts 2 controller that responds
- * to a user action by setting the value
- * of the Message model class, and returns a String 
- * result.
- * @author Bruce Phillips
- *
- */
-public class HelloWorldAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-	
-	/**
-	 * The model class that stores the message
-	 * to display in the view.
-	 */
-	private MessageStore messageStore;
-	
-	private static int helloCount = 0;
-	
-	public int getHelloCount() {
-		return helloCount;
-	}
-
-	public void setHelloCount(int helloCount) {
-		HelloWorldAction.helloCount = helloCount;
-	}
-
-	/*
-	 * Creates the MessageStore model object, 
-	 * increase helloCount by 1 and 
-	 * returns success.  The MessageStore model
-	 * object will be available to the view.
-	 * (non-Javadoc)
-	 * @see com.opensymphony.xwork2.ActionSupport#execute()
-	 */
-	public String execute() throws Exception {
-		
-		messageStore = new MessageStore() ;
-		
-		helloCount++;
-		
-		return SUCCESS;
-	}
-
-	public MessageStore getMessageStore() {
-		return messageStore;
-	}
-
-	public void setMessageStore(MessageStore messageStore) {
-		this.messageStore = messageStore;
-	}
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using_tags/src/main/java/org/apache/struts/using_tags/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/using_tags/src/main/java/org/apache/struts/using_tags/helloworld/model/MessageStore.java b/using_tags/src/main/java/org/apache/struts/using_tags/helloworld/model/MessageStore.java
deleted file mode 100644
index 8870513..0000000
--- a/using_tags/src/main/java/org/apache/struts/using_tags/helloworld/model/MessageStore.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.struts.using_tags.helloworld.model;
-
-/**
- * Model class that stores a message.
- * @author Bruce Phillips
- *
- */
-public class MessageStore {
-	
-	private String message;
-	
-	public MessageStore() {
-		
-		setMessage("Hello Struts User");
-	}
-
-	public String getMessage() {
-		return message;
-	}
-
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	
-	public String toString() {
-		
-		return message + " (from toString)";
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using_tags/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/using_tags/src/main/resources/log4j.dtd b/using_tags/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/using_tags/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/using_tags/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/using_tags/src/main/resources/log4j.xml b/using_tags/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/using_tags/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/using_tags/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/using_tags/src/main/resources/struts.xml b/using_tags/src/main/resources/struts.xml
deleted file mode 100644
index f162457..0000000
--- a/using_tags/src/main/resources/struts.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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" />
-
-	<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>
-		
-		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
-		If the result returned by the execute method is success render the HelloWorld.jsp -->
-		<action name="hello" class="org.apache.struts.using_tags.helloworld.action.HelloWorldAction" method="execute">
-			<result name="success">/HelloWorld.jsp</result>
-		</action>
-
-	</package>
-
-</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using_tags/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/using_tags/src/main/webapp/HelloWorld.jsp b/using_tags/src/main/webapp/HelloWorld.jsp
deleted file mode 100644
index 108810c..0000000
--- a/using_tags/src/main/webapp/HelloWorld.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ 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>Hello World!</title>
-</head>
-<body>
-<h2><s:property value="messageStore.message" /></h2>
-<p>I've said hello <s:property value="helloCount" /> times!</p>
-<p><s:property value="messageStore" /></p>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/using_tags/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/using_tags/src/main/webapp/WEB-INF/web.xml b/using_tags/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index ac8a81b..0000000
--- a/using_tags/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Using_Tags_Struts2</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/433ea016/using_tags/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/using_tags/src/main/webapp/index.jsp b/using_tags/src/main/webapp/index.jsp
deleted file mode 100644
index f9bcea2..0000000
--- a/using_tags/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@ 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>Basic Struts 2 Application - Welcome</title>
-</head>
-<body>
-<h1>Welcome To Struts 2!</h1>
-<p><a href="<s:url action='hello'/>">Hello World</a></p>
-<s:url action="hello" var="helloLink">
-  <s:param name="userName">Bruce Phillips</s:param>
-</s:url>
-<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
-
-<p>Get your own personal hello by filling out and submitting this form.</p>
-
-<s:form action="hello">
-
-	<s:textfield name="userName" label="Your name" />
-	
-	<s:submit value="Submit" />
-
-</s:form>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/README.txt
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/README.txt b/wildcard-method-selection/README.txt
new file mode 100644
index 0000000..cd9275d
--- /dev/null
+++ b/wildcard-method-selection/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Wildcard Method 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/wildcard-method-selection/Person.action
+
+You should see a web page with People listed.
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/pom.xml
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/pom.xml b/wildcard-method-selection/pom.xml
new file mode 100644
index 0000000..8b4fe1f
--- /dev/null
+++ b/wildcard-method-selection/pom.xml
@@ -0,0 +1,39 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>wildcard-method-selection</artifactId>
+
+    <name>Wildcard Method Selection</name>
+
+    <description>Wildcard method selection example application for the Struts 2 getting started tutorials
+    </description>
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>wildcard-method-selection</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</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/433ea016/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/action/PersonAction.java
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/action/PersonAction.java b/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/action/PersonAction.java
new file mode 100644
index 0000000..4aa0926
--- /dev/null
+++ b/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/action/PersonAction.java
@@ -0,0 +1,93 @@
+package org.apache.struts.tutorials.wildcardmethod.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts.tutorials.wildcardmethod.model.Person;
+import org.apache.struts.tutorials.wildcardmethod.service.PersonService;
+
+import java.util.List;
+
+
+public class PersonAction extends ActionSupport {
+
+    //Create a Logger object
+    private static final Logger log = LogManager.getLogger(PersonAction.class);
+    private static final long serialVersionUID = 1L;
+
+    Person person;
+    int id;
+    List<Person> personList = PersonService.getPersons();
+    PersonService personService = new PersonService();
+
+    public String execute() throws Exception {
+        log.debug("In execute method");
+        return SUCCESS;
+    }
+
+    public String create() {
+        log.debug("In create method");
+        person = new Person();
+
+        return INPUT;
+    }
+
+    public String edit() {
+        log.debug("In edit method");
+        person = personService.getPerson(id);
+
+        return INPUT;
+    }
+
+    public String saveOrUpdate() {
+        log.debug("In saveOrUpdate method");
+        if (person.getId() > -1) {
+            personService.update(person);
+        } else {
+            personService.save(person);
+        }
+
+        personList = PersonService.getPersons();
+        return SUCCESS;
+    }
+
+
+    public String delete() {
+        log.debug("In delete method");
+        personService.deletePerson(id);
+
+        personList = PersonService.getPersons();
+
+        return SUCCESS;
+    }
+
+
+    public Person getPerson() {
+        return person;
+    }
+
+
+    public void setPerson(Person person) {
+        this.person = person;
+    }
+
+
+    public List<Person> getPersonList() {
+        return personList;
+    }
+
+
+    public void setPersonList(List<Person> personList) {
+        this.personList = personList;
+    }
+
+
+    public int getId() {
+        return id;
+    }
+
+
+    public void setId(int id) {
+        this.id = id;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/model/Person.java
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/model/Person.java b/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/model/Person.java
new file mode 100644
index 0000000..d3e1b8d
--- /dev/null
+++ b/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/model/Person.java
@@ -0,0 +1,55 @@
+package org.apache.struts.tutorials.wildcardmethod.model;
+
+public class Person {
+	
+	private int id;
+	private String firstName;
+	private String lastName;
+	
+	
+	public Person() {
+		
+		this.id = -1;
+		this.firstName = null;
+		this.lastName = null;
+	}
+	
+	
+	public Person(int id, String firstName, String lastName) {
+		super();
+		this.id = id;
+		this.firstName = firstName;
+		this.lastName = lastName;
+	}
+	
+	public int getId() {
+		return id;
+	}
+	public void setId(int id) {
+		this.id = id;
+	}
+	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 String toString() {
+		
+		
+		return firstName + " " + lastName;
+		
+	}
+	
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/service/PersonService.java
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/service/PersonService.java b/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/service/PersonService.java
new file mode 100644
index 0000000..79d5b5b
--- /dev/null
+++ b/wildcard-method-selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/service/PersonService.java
@@ -0,0 +1,88 @@
+package org.apache.struts.tutorials.wildcardmethod.service;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts.tutorials.wildcardmethod.model.Person;
+
+import java.util.*;
+
+
+
+public class PersonService {
+	
+	//Create a Logger object
+	private static final Logger log = LogManager.getLogger(PersonService.class);
+
+	private static SortedMap<Integer, Person> people = new TreeMap<>();
+	
+	static {
+		people.put(0, new Person(0, "Steve", "Smith") );
+		people.put(1, new Person(1, "Sue", "Jones") );
+	}
+
+
+	private static List<Person> personList = new ArrayList<>();
+	
+	static{
+		for (Integer id : people.keySet() ) {
+			personList.add( people.get(id));
+		}
+	}
+	
+	
+	public static List<Person> getPersons() {
+		return personList;
+	}
+	
+	
+    public  void save(Person person) {
+    	int newId = getNewId();
+    	person.setId( newId );
+    	people.put( newId, person);
+    	rebuildPersonList();
+    }
+    
+    
+    private int getNewId() {
+    	int newId = 0;
+    	
+    	try {
+    	  newId = people.lastKey() + 1;
+    	} catch (NoSuchElementException ex) {
+			log.info("Id value set to 0");
+		}
+ 
+    	return newId;
+	}
+
+
+	public  void update(Person person) {
+    	Person tempPerson = people.get( person.getId() );
+    	
+    	tempPerson.setFirstName( person.getFirstName() );
+    	tempPerson.setLastName(person.getLastName() );
+    	
+    	rebuildPersonList();
+    }
+
+
+	public void deletePerson(int ID) {
+		people.remove(ID);
+		
+		rebuildPersonList();
+	}
+
+
+	public Person getPerson(int id) {
+		return people.get(id);
+	}
+	
+ 
+	public static void rebuildPersonList() {
+		personList = new ArrayList<>();
+
+		for (Integer id : people.keySet() ) {
+ 			personList.add( people.get(id));
+ 		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/resources/log4j2.xml b/wildcard-method-selection/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..3d7ad0b
--- /dev/null
+++ b/wildcard-method-selection/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Logger name="com.opensymphony.xwork2" level="info"/>
+        <Logger name="org.apache.struts2" level="info"/>
+        <Logger name="org.apache.struts2.tutorials" level="debug"/>
+        <Root level="warn">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/resources/struts.xml b/wildcard-method-selection/src/main/resources/struts.xml
new file mode 100644
index 0000000..d6f1e93
--- /dev/null
+++ b/wildcard-method-selection/src/main/resources/struts.xml
@@ -0,0 +1,26 @@
+<?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.enable.DynamicMethodInvocation" value="false" />
+
+   
+   <package name="wildcardmethodexample" extends="struts-default">
+
+        <!-- Whatever value is before Person for the name of
+        the action will be the name of the method to call in 
+        class PersonAction.  For example action createPerson 
+        will call a method named create in class PersonAction -->
+        
+		<action name="*Person" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="{1}">
+			<result name="success">view.jsp</result>
+			<result name="input">input.jsp</result>
+		</action>
+		
+   </package>
+
+</struts>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/webapp/META-INF/MANIFEST.MF b/wildcard-method-selection/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/wildcard-method-selection/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/433ea016/wildcard-method-selection/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/webapp/WEB-INF/web.xml b/wildcard-method-selection/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..9be994d
--- /dev/null
+++ b/wildcard-method-selection/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,20 @@
+<?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>Wildcard_Method_Struts2_Mvn</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/433ea016/wildcard-method-selection/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/webapp/index.jsp b/wildcard-method-selection/src/main/webapp/index.jsp
new file mode 100644
index 0000000..efdb306
--- /dev/null
+++ b/wildcard-method-selection/src/main/webapp/index.jsp
@@ -0,0 +1 @@
+<% response.sendRedirect("Person.action"); %>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/src/main/webapp/input.jsp
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/webapp/input.jsp b/wildcard-method-selection/src/main/webapp/input.jsp
new file mode 100644
index 0000000..442990e
--- /dev/null
+++ b/wildcard-method-selection/src/main/webapp/input.jsp
@@ -0,0 +1,40 @@
+<%@ page language="java" pageEncoding="ISO-8859-1" %>
+<%
+String path = request.getContextPath();
+String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
+%>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <base href="<%=basePath%>">
+    
+    <title>Edit Person</title>
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="expires" content="0">    
+
+  </head>
+  
+  <body>
+  <s:if test="id > 0">
+    <h3>Edit Person</h3>
+  </s:if>
+  <s:else>
+  	<h3>Create Person</h3>
+  
+  </s:else>
+  
+  <s:form action='saveOrUpdatePerson'>
+  
+  	<p><s:textfield name="person.firstName" label="First name" /> <br />
+  	<s:textfield name="person.lastName" label="Last name" /> </p>
+  	
+  	<s:hidden name="person.id" />
+  	<s:submit  value="Save" />
+  
+  </s:form>
+    
+   
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard-method-selection/src/main/webapp/view.jsp
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/src/main/webapp/view.jsp b/wildcard-method-selection/src/main/webapp/view.jsp
new file mode 100644
index 0000000..e619846
--- /dev/null
+++ b/wildcard-method-selection/src/main/webapp/view.jsp
@@ -0,0 +1,60 @@
+<%@ page language="java" pageEncoding="ISO-8859-1" %>
+<%
+String path = request.getContextPath();
+String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
+%>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <base href="<%=basePath%>">    
+    <title>View People</title>
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="expires" content="0">    
+
+  </head>
+  
+  <body>
+  <h3>People</h3>
+    
+    
+    <s:if test="personList.size > 0">
+       <ol>
+         <s:iterator value="personList">
+	  		<li>
+	  			<s:property value="firstName" />
+	  			
+	  			<s:property value="lastName" /> 
+	  			
+	  			<%--Put the name of the method we want to call
+	  			in front of Person.  This action will cause
+	  			the method named edit to be called in the
+	  			ActionSupport class (see struts.xml)  --%>
+  				<s:url action="editPerson" var="editUrl">
+				       <s:param name="id" value="id"/>
+			    </s:url>
+			    
+                <s:url action="deletePerson" var="deleteUrl">
+				       <s:param name="id" value="id"/>
+			    </s:url>
+			    
+	  			<a href="<s:property value='#editUrl' />" >Edit</a>
+	  			
+	  			<a href="<s:property value='#deleteUrl' />" >Delete</a>
+	  		</li>
+		</s:iterator>
+       </ol>
+    </s:if>
+ 
+	<%--Put the name of the method we want to call
+    in front of Person.  This action will cause
+    the method named create to be called in the
+    ActionSupport class (see struts.xml)  --%>   
+	<s:url action="createPerson" var="newUrl">
+       <s:param name="id" value="0"/>
+     </s:url>
+     
+    <p><a href="<s:property value='#newUrl' />" > Create new person.</a></p>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/README.txt
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/README.txt b/wildcard_method_selection/README.txt
deleted file mode 100644
index 67a3f47..0000000
--- a/wildcard_method_selection/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Wildcard Method 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/wildcard_method_selection/Person.action
-
-You should see a web page with People listed.
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/pom.xml
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/pom.xml b/wildcard_method_selection/pom.xml
deleted file mode 100644
index a76d999..0000000
--- a/wildcard_method_selection/pom.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?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>
-    <parent>
-        <groupId>struts.apache.org</groupId>
-        <artifactId>struts2examples</artifactId>
-        <version>1.0.0</version>
-    </parent>
-
-    <artifactId>wildcard_method_selection</artifactId>
-
-    <name>Wildcard Method Selection</name>
-
-    <description>Wildcard method selection example application for the
-        Struts 2 getting started tutorials
-    </description>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>wildcard_method_selection</finalName>
-        <plugins>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>8.1.16.v20140903</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/433ea016/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/action/PersonAction.java
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/action/PersonAction.java b/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/action/PersonAction.java
deleted file mode 100644
index ac3bf53..0000000
--- a/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/action/PersonAction.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.apache.struts.tutorials.wildcardmethod.action;
-
-import com.opensymphony.xwork2.ActionSupport;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.struts.tutorials.wildcardmethod.model.Person;
-import org.apache.struts.tutorials.wildcardmethod.service.PersonService;
-
-import java.util.List;
-
-
-public class PersonAction extends ActionSupport {
-
-    //Create a Logger object
-    private static final Logger log = LogManager.getLogger(PersonAction.class);
-    private static final long serialVersionUID = 1L;
-
-    Person person;
-    int id;
-    List<Person> personList = PersonService.getPersons();
-    PersonService personService = new PersonService();
-
-    public String execute() throws Exception {
-        log.debug("In execute method");
-        return SUCCESS;
-    }
-
-    public String create() {
-        log.debug("In create method");
-        person = new Person();
-
-        return INPUT;
-    }
-
-    public String edit() {
-        log.debug("In edit method");
-        person = personService.getPerson(id);
-
-        return INPUT;
-    }
-
-    public String saveOrUpdate() {
-        log.debug("In saveOrUpdate method");
-        if (person.getId() > -1) {
-            personService.update(person);
-        } else {
-            personService.save(person);
-        }
-
-        personList = PersonService.getPersons();
-        return SUCCESS;
-    }
-
-
-    public String delete() {
-        log.debug("In delete method");
-        personService.deletePerson(id);
-
-        personList = PersonService.getPersons();
-
-        return SUCCESS;
-    }
-
-
-    public Person getPerson() {
-        return person;
-    }
-
-
-    public void setPerson(Person person) {
-        this.person = person;
-    }
-
-
-    public List<Person> getPersonList() {
-        return personList;
-    }
-
-
-    public void setPersonList(List<Person> personList) {
-        this.personList = personList;
-    }
-
-
-    public int getId() {
-        return id;
-    }
-
-
-    public void setId(int id) {
-        this.id = id;
-    }
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/model/Person.java
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/model/Person.java b/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/model/Person.java
deleted file mode 100644
index 84abec3..0000000
--- a/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/model/Person.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.apache.struts.tutorials.wildcardmethod.model;
-
-public class Person {
-	
-	private int id;
-	private String firstName;
-	private String lastName;
-	
-	
-	public Person() {
-		
-		this.id = -1;
-		this.firstName = null;
-		this.lastName = null;
-	}
-	
-	
-	public Person(int id, String firstName, String lastName) {
-		super();
-		this.id = id;
-		this.firstName = firstName;
-		this.lastName = lastName;
-	}
-	
-	public int getId() {
-		return id;
-	}
-	public void setId(int id) {
-		this.id = id;
-	}
-	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 String toString() {
-		
-		
-		return firstName + " " + lastName;
-		
-	}
-	
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/service/PersonService.java
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/service/PersonService.java b/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/service/PersonService.java
deleted file mode 100644
index 0aa657c..0000000
--- a/wildcard_method_selection/src/main/java/org/apache/struts/tutorials/wildcardmethod/service/PersonService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.apache.struts.tutorials.wildcardmethod.service;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.struts.tutorials.wildcardmethod.model.Person;
-
-import java.util.*;
-
-
-
-public class PersonService {
-	
-	//Create a Logger object
-	private static final Logger log = LogManager.getLogger(PersonService.class);
-
-	private static SortedMap<Integer, Person> people = new TreeMap<>();
-	
-	static {
-		people.put(0, new Person(0, "Steve", "Smith") );
-		people.put(1, new Person(1, "Sue", "Jones") );
-	}
-
-
-	private static List<Person> personList = new ArrayList<>();
-	
-	static{
-		for (Integer id : people.keySet() ) {
-			personList.add( people.get(id));
-		}
-	}
-	
-	
-	public static List<Person> getPersons() {
-		return personList;
-	}
-	
-	
-    public  void save(Person person) {
-    	int newId = getNewId();
-    	person.setId( newId );
-    	people.put( newId, person);
-    	rebuildPersonList();
-    }
-    
-    
-    private int getNewId() {
-    	int newId = 0;
-    	
-    	try {
-    	  newId = people.lastKey() + 1;
-    	} catch (NoSuchElementException ex) {
-			log.info("Id value set to 0");
-		}
- 
-    	return newId;
-	}
-
-
-	public  void update(Person person) {
-    	Person tempPerson = people.get( person.getId() );
-    	
-    	tempPerson.setFirstName( person.getFirstName() );
-    	tempPerson.setLastName(person.getLastName() );
-    	
-    	rebuildPersonList();
-    }
-
-
-	public void deletePerson(int ID) {
-		people.remove(ID);
-		
-		rebuildPersonList();
-	}
-
-
-	public Person getPerson(int id) {
-		return people.get(id);
-	}
-	
- 
-	public static void rebuildPersonList() {
-		personList = new ArrayList<>();
-
-		for (Integer id : people.keySet() ) {
- 			personList.add( people.get(id));
- 		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/resources/log4j2.xml b/wildcard_method_selection/src/main/resources/log4j2.xml
deleted file mode 100644
index 3d7ad0b..0000000
--- a/wildcard_method_selection/src/main/resources/log4j2.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Configuration>
-    <Appenders>
-        <Console name="STDOUT" target="SYSTEM_OUT">
-            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
-        </Console>
-    </Appenders>
-    <Loggers>
-        <Logger name="com.opensymphony.xwork2" level="info"/>
-        <Logger name="org.apache.struts2" level="info"/>
-        <Logger name="org.apache.struts2.tutorials" level="debug"/>
-        <Root level="warn">
-            <AppenderRef ref="STDOUT"/>
-        </Root>
-    </Loggers>
-</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/resources/struts.xml b/wildcard_method_selection/src/main/resources/struts.xml
deleted file mode 100644
index c8ea023..0000000
--- a/wildcard_method_selection/src/main/resources/struts.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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.enable.DynamicMethodInvocation" value="false" />
-
-   
-   <package name="wildcardmethodexample" extends="struts-default">
-
-        <!-- Whatever value is before Person for the name of
-        the action will be the name of the method to call in 
-        class PersonAction.  For example action createPerson 
-        will call a method named create in class PersonAction -->
-        
-		<action name="*Person" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="{1}">
-			<result name="success">view.jsp</result>
-			<result name="input">input.jsp</result>
-		</action>
-		
-   </package>
-
-</struts>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/webapp/META-INF/MANIFEST.MF b/wildcard_method_selection/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/wildcard_method_selection/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/webapp/WEB-INF/web.xml b/wildcard_method_selection/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 9be994d..0000000
--- a/wildcard_method_selection/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?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>Wildcard_Method_Struts2_Mvn</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/433ea016/wildcard_method_selection/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/webapp/index.jsp b/wildcard_method_selection/src/main/webapp/index.jsp
deleted file mode 100644
index efdb306..0000000
--- a/wildcard_method_selection/src/main/webapp/index.jsp
+++ /dev/null
@@ -1 +0,0 @@
-<% response.sendRedirect("Person.action"); %>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/wildcard_method_selection/src/main/webapp/input.jsp
----------------------------------------------------------------------
diff --git a/wildcard_method_selection/src/main/webapp/input.jsp b/wildcard_method_selection/src/main/webapp/input.jsp
deleted file mode 100644
index 741d1d1..0000000
--- a/wildcard_method_selection/src/main/webapp/input.jsp
+++ /dev/null
@@ -1,40 +0,0 @@
-<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
-<%
-String path = request.getContextPath();
-String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
-%>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <base href="<%=basePath%>">
-    
-    <title>Edit Person</title>
-	<meta http-equiv="pragma" content="no-cache">
-	<meta http-equiv="cache-control" content="no-cache">
-	<meta http-equiv="expires" content="0">    
-
-  </head>
-  
-  <body>
-  <s:if test="id > 0">
-    <h3>Edit Person</h3>
-  </s:if>
-  <s:else>
-  	<h3>Create Person</h3>
-  
-  </s:else>
-  
-  <s:form action='saveOrUpdatePerson'>
-  
-  	<p><s:textfield name="person.firstName" label="First name" /> <br />
-  	<s:textfield name="person.lastName" label="Last name" /> </p>
-  	
-  	<s:hidden name="person.id" />
-  	<s:submit  value="Save" />
-  
-  </s:form>
-    
-   
-  </body>
-</html>


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/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
deleted file mode 100644
index 4a15058..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader.ftl
+++ /dev/null
@@ -1,28 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index f923462..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/doubleselect.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index cae4a2e..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/file.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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" />

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/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
deleted file mode 100644
index f129156..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close-validate.ftl
+++ /dev/null
@@ -1,158 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index d783454..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-close.ftl
+++ /dev/null
@@ -1,35 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 6597f4e..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/form-validate.ftl
+++ /dev/null
@@ -1,31 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 5a686dd..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/form.ftl
+++ /dev/null
@@ -1,33 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index e8a8fb8..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/head.ftl
+++ /dev/null
@@ -1,24 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 92881ab..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/hidden.ftl
+++ /dev/null
@@ -1,27 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index f25a6ab..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/inputtransferselect.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 8faf8d6..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/label.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index e1cd440..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/optiontransferselect.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 202da51..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/password.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 008de45..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/radiomap.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 8e6e2b5..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/reset.ftl
+++ /dev/null
@@ -1,31 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 9d07046..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/select.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index dd54904..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/styles.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * $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/433ea016/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
deleted file mode 100644
index faa551c..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit-close.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 7b82921..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/submit.ftl
+++ /dev/null
@@ -1,29 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 53f1647..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/text.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 46f77d9..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/textarea.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 84dc155..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/theme.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# $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/433ea016/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
deleted file mode 100644
index 74938a8..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/tooltip.ftl
+++ /dev/null
@@ -1,41 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index bd575f7..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/updownselect.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index e63751b..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/validation.js
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * $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/433ea016/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
deleted file mode 100644
index a5fcf75..0000000
--- a/themes_override/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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/433ea016/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
deleted file mode 100644
index bb1ef76..0000000
--- a/themes_override/src/main/webapp/edit.jsp
+++ /dev/null
@@ -1,29 +0,0 @@
-<%@ 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/433ea016/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
deleted file mode 100644
index 88209d8..0000000
--- a/themes_override/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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/433ea016/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
deleted file mode 100644
index 7c268ef..0000000
--- a/themes_override/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<?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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/README.txt
----------------------------------------------------------------------
diff --git a/unit-testing/README.txt b/unit-testing/README.txt
new file mode 100644
index 0000000..61377ee
--- /dev/null
+++ b/unit-testing/README.txt
@@ -0,0 +1,18 @@
+This is the example project referred to in the
+Struts 2 documentation, Unit Testing tutorial.
+See:  http://struts.apache.org.
+
+To build the application's war file run mvn clean package
+from the project's root folder.
+
+As part of packaging the war file, Maven will run the unit test.
+
+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/unit-testing/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/pom.xml
----------------------------------------------------------------------
diff --git a/unit-testing/pom.xml b/unit-testing/pom.xml
new file mode 100644
index 0000000..38ceeee
--- /dev/null
+++ b/unit-testing/pom.xml
@@ -0,0 +1,45 @@
+<?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>
+	<parent>
+		<groupId>struts.apache.org</groupId>
+		<artifactId>struts2examples</artifactId>
+		<version>1.0.0</version>
+	</parent>
+
+	<artifactId>unit-testing</artifactId>
+
+	<name>Unit Testing</name>
+
+	<build>
+		<finalName>unit-testing</finalName>
+	</build>
+
+	<packaging>war</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.struts</groupId>
+			<artifactId>struts2-junit-plugin</artifactId>
+			<version>${struts2.version}</version>
+			<type>jar</type>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.4</version>
+			<type>jar</type>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>jsp-api</artifactId>
+			<version>2.0</version>
+			<type>jar</type>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/java/org/apache/struts/register/action/Register.java b/unit-testing/src/main/java/org/apache/struts/register/action/Register.java
new file mode 100644
index 0000000..cbdb5e9
--- /dev/null
+++ b/unit-testing/src/main/java/org/apache/struts/register/action/Register.java
@@ -0,0 +1,64 @@
+package org.apache.struts.register.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.register.model.Person;
+
+/**
+ * Acts as a controller to handle actions
+ * related to registering a user.
+ * @author bruce phillips
+ *
+ */
+public class Register extends ActionSupport {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private Person personBean;
+
+	
+	public String execute() throws Exception {
+		
+		//call Service class to store personBean's state in database
+		
+		return SUCCESS;
+		
+	}
+	
+	public void validate(){
+		
+		if ( personBean.getFirstName() == null || personBean.getFirstName().length() == 0 ){	
+
+			addFieldError( "personBean.firstName", "First name is required." );
+			
+		}
+		
+				
+		if ( personBean.getEmail() == null || personBean.getEmail().length() == 0 ){	
+
+			addFieldError( "personBean.email", "Email is required." );
+			
+		}
+		
+		if ( personBean.getAge() < 18 ){	
+
+			addFieldError( "personBean.age", "Age is required and must be 18 or older" );
+			
+		}
+		
+		
+	}
+
+	
+	public Person getPersonBean() {
+		
+		return personBean;
+		
+	}
+	
+	public void setPersonBean(Person person) {
+		
+		personBean = person;
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/java/org/apache/struts/register/model/Person.java b/unit-testing/src/main/java/org/apache/struts/register/model/Person.java
new file mode 100644
index 0000000..3020bbb
--- /dev/null
+++ b/unit-testing/src/main/java/org/apache/struts/register/model/Person.java
@@ -0,0 +1,62 @@
+package org.apache.struts.register.model;
+
+
+/**
+ * Models a Person who registers.
+ * @author bruce phillips
+ *
+ */
+public class Person
+{
+    private String firstName;
+    private String lastName;
+    private String email;
+    private int age;
+
+    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 String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    public int getAge()
+    {
+        return age;
+    }
+
+    public void setAge( int age)
+    {
+        this.age = age;
+    }
+
+
+    public String toString()
+    {
+        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
+        " Email:      " + getEmail() + " Age:      " + getAge() ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/resources/log4j.dtd b/unit-testing/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/unit-testing/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/433ea016/unit-testing/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/resources/log4j.xml b/unit-testing/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/unit-testing/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/433ea016/unit-testing/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/resources/struts.xml b/unit-testing/src/main/resources/struts.xml
new file mode 100644
index 0000000..21cc563
--- /dev/null
+++ b/unit-testing/src/main/resources/struts.xml
@@ -0,0 +1,27 @@
+<?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" />
+
+	<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="register" class="org.apache.struts.register.action.Register" method="execute">
+		<result name="success">/thankyou.jsp</result>
+		<result name="input">/register.jsp</result>
+	  </action>
+
+	</package>
+
+</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/webapp/META-INF/MANIFEST.MF b/unit-testing/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/unit-testing/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/433ea016/unit-testing/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/webapp/WEB-INF/web.xml b/unit-testing/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..794e993
--- /dev/null
+++ b/unit-testing/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>Struts 2 Unit Testing</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/433ea016/unit-testing/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/webapp/index.jsp b/unit-testing/src/main/webapp/index.jsp
new file mode 100644
index 0000000..48d3fc5
--- /dev/null
+++ b/unit-testing/src/main/webapp/index.jsp
@@ -0,0 +1,17 @@
+<%@ 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>Basic Struts 2 Application - Welcome</title>
+</head>
+<body>
+<h1>Welcome To Struts 2!</h1>
+
+
+
+<p><a href="register.jsp">Please register</a> for our prize drawing.</p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/webapp/register.jsp b/unit-testing/src/main/webapp/register.jsp
new file mode 100644
index 0000000..a4acb15
--- /dev/null
+++ b/unit-testing/src/main/webapp/register.jsp
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Register</title>
+<s:head />
+</head>
+<body>
+<h3>Register for a prize by completing this form.</h3>
+
+<s:form action="register">
+
+ 	  <s:textfield name="personBean.firstName" label="First name" />
+ 	  <s:textfield  name="personBean.lastName" label="Last name" />
+ 	  <s:textfield name="personBean.email"  label ="Email"/>  
+ 	  <s:textfield name="personBean.age"  label="Age"  />
+ 	  
+   	  <s:submit/>
+   	  
+</s:form>	
+ 
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/unit-testing/src/main/webapp/thankyou.jsp b/unit-testing/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..3c845bc
--- /dev/null
+++ b/unit-testing/src/main/webapp/thankyou.jsp
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Registration Successful</title>
+</head>
+<body>
+<h3>Thank you for registering for a prize.</h3>
+
+<p>Your registration 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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit-testing/src/test/java/org/apache/struts/register/action/RegisterTest.java
----------------------------------------------------------------------
diff --git a/unit-testing/src/test/java/org/apache/struts/register/action/RegisterTest.java b/unit-testing/src/test/java/org/apache/struts/register/action/RegisterTest.java
new file mode 100644
index 0000000..ae94936
--- /dev/null
+++ b/unit-testing/src/test/java/org/apache/struts/register/action/RegisterTest.java
@@ -0,0 +1,80 @@
+package org.apache.struts.register.action;
+
+
+import com.opensymphony.xwork2.ActionProxy;
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.StrutsTestCase;
+import org.junit.Test;
+
+public class RegisterTest extends StrutsTestCase {
+
+	@Test
+	public void testExecuteValidationPasses() throws Exception {
+		
+		request.setParameter("personBean.firstName", "Bruce");
+		
+		request.setParameter("personBean.lastName", "Phillips");
+		
+		request.setParameter("personBean.email", "bphillips@ku.edu");
+		
+		request.setParameter("personBean.age", "19");
+			
+		ActionProxy actionProxy = getActionProxy("/register.action") ;
+		
+		Register action = (Register) actionProxy.getAction();
+		
+		assertNotNull("The action is null but should not be.", action);
+
+		String result = actionProxy.execute();
+		
+		assertEquals("The execute method did not return " + ActionSupport.SUCCESS + " but should have.", ActionSupport.SUCCESS, result);
+
+	}
+	
+	@Test
+	public void testExecuteValidationFailsMissingFirstName() throws Exception {
+		
+		request.setParameter("personBean.firstName", "Bruce");
+		
+		request.setParameter("personBean.lastName", "Phillips");
+		
+		request.setParameter("personBean.email", "bphillips@ku.edu");
+		
+		request.setParameter("personBean.age", "17");
+			
+		ActionProxy actionProxy = getActionProxy("/register.action") ;
+		
+		Register action = (Register) actionProxy.getAction();
+		
+		assertNotNull("The action is null but should not be.", action);
+
+		String result = actionProxy.execute();
+		
+		assertEquals("The execute method did not return " + ActionSupport.INPUT + " but should have.", ActionSupport.INPUT, result);
+
+	}
+	
+	
+	@Test
+	public void testExecuteValidationFailsAgeToYoung() throws Exception {
+		
+		
+		request.setParameter("personBean.lastName", "Phillips");
+		
+		request.setParameter("personBean.email", "bphillips@ku.edu");
+		
+		request.setParameter("personBean.age", "19");
+			
+		ActionProxy actionProxy = getActionProxy("/register.action") ;
+		
+		Register action = (Register) actionProxy.getAction();
+		
+		assertNotNull("The action is null but should not be.", action);
+
+		String result = actionProxy.execute();
+		
+		assertEquals("The execute method did not return " + ActionSupport.INPUT + " but should have.", ActionSupport.INPUT, result);
+
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/README.txt
----------------------------------------------------------------------
diff --git a/unit_testing/README.txt b/unit_testing/README.txt
deleted file mode 100644
index 73a9989..0000000
--- a/unit_testing/README.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Unit Testing tutorial.
-See:  http://struts.apache.org.
-
-To build the application's war file run mvn clean package
-from the project's root folder.
-
-As part of packaging the war file, Maven will run the unit test.
-
-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/unit_testing/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/pom.xml
----------------------------------------------------------------------
diff --git a/unit_testing/pom.xml b/unit_testing/pom.xml
deleted file mode 100644
index 624d0ee..0000000
--- a/unit_testing/pom.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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>
-	<parent>
-		<groupId>struts.apache.org</groupId>
-		<artifactId>struts2examples</artifactId>
-		<version>1.0.0</version>
-	</parent>
-
-	<artifactId>unit_testing</artifactId>
-
-	<name>Unit Testing</name>
-
-	<build>
-		<finalName>unit_testing</finalName>
-	</build>
-
-	<packaging>war</packaging>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.apache.struts</groupId>
-			<artifactId>struts2-junit-plugin</artifactId>
-			<version>${struts2.version}</version>
-			<type>jar</type>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-			<version>2.4</version>
-			<type>jar</type>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>jsp-api</artifactId>
-			<version>2.0</version>
-			<type>jar</type>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/java/org/apache/struts/register/action/Register.java b/unit_testing/src/main/java/org/apache/struts/register/action/Register.java
deleted file mode 100644
index 3a7f662..0000000
--- a/unit_testing/src/main/java/org/apache/struts/register/action/Register.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.apache.struts.register.action;
-
-import org.apache.struts.register.model.Person;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a controller to handle actions
- * related to registering a user.
- * @author bruce phillips
- *
- */
-public class Register extends ActionSupport {
-	
-	private static final long serialVersionUID = 1L;
-	
-	private Person personBean;
-
-	
-	public String execute() throws Exception {
-		
-		//call Service class to store personBean's state in database
-		
-		return SUCCESS;
-		
-	}
-	
-	public void validate(){
-		
-		if ( personBean.getFirstName() == null || personBean.getFirstName().length() == 0 ){	
-
-			addFieldError( "personBean.firstName", "First name is required." );
-			
-		}
-		
-				
-		if ( personBean.getEmail() == null || personBean.getEmail().length() == 0 ){	
-
-			addFieldError( "personBean.email", "Email is required." );
-			
-		}
-		
-		if ( personBean.getAge() < 18 ){	
-
-			addFieldError( "personBean.age", "Age is required and must be 18 or older" );
-			
-		}
-		
-		
-	}
-
-	
-	public Person getPersonBean() {
-		
-		return personBean;
-		
-	}
-	
-	public void setPersonBean(Person person) {
-		
-		personBean = person;
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/unit_testing/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/unit_testing/src/main/java/org/apache/struts/register/model/Person.java b/unit_testing/src/main/java/org/apache/struts/register/model/Person.java
deleted file mode 100644
index 3020bbb..0000000
--- a/unit_testing/src/main/java/org/apache/struts/register/model/Person.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.struts.register.model;
-
-
-/**
- * Models a Person who registers.
- * @author bruce phillips
- *
- */
-public class Person
-{
-    private String firstName;
-    private String lastName;
-    private String email;
-    private int age;
-
-    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 String getEmail()
-    {
-        return email;
-    }
-
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    public int getAge()
-    {
-        return age;
-    }
-
-    public void setAge( int age)
-    {
-        this.age = age;
-    }
-
-
-    public String toString()
-    {
-        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
-        " Email:      " + getEmail() + " Age:      " + getAge() ;
-    }
-}


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

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

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

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

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

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes_override/src/main/webapp/WEB-INF/template/simple/radiomap.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/radiomap.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/radiomap.ftl
deleted file mode 100644
index 34cf1b1..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/radiomap.ftl
+++ /dev/null
@@ -1,94 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 0ddba57..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/reset.ftl
+++ /dev/null
@@ -1,76 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index c998e61..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/scripting-events.ftl
+++ /dev/null
@@ -1,64 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 74277e6..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/select.ftl
+++ /dev/null
@@ -1,140 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 2bb7347..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/submit-close.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-<#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/433ea016/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
deleted file mode 100644
index 95315ef..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/submit.ftl
+++ /dev/null
@@ -1,93 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index d7efb06..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/table.ftl
+++ /dev/null
@@ -1,76 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 1caf3aa..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/text.ftl
+++ /dev/null
@@ -1,54 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 6cf1e9b..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/textarea.ftl
+++ /dev/null
@@ -1,53 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index cabfa9c..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/token.ftl
+++ /dev/null
@@ -1,24 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 30128ef..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/updownselect.ftl
+++ /dev/null
@@ -1,57 +0,0 @@
-<#--
-/*
- * $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/>
-		&nbsp;<input type="button" value="${defMoveUpLabel}" onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
-	<#else><#t/>
-		&nbsp;<input type="button" value="${defMoveUpLabel}" onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
-	</#if><#t/>
-</#if><#t/>
-<#if parameters.allowMoveDown?default(true)><#t/>
-	<#assign defMoveDownLabel="${parameters.moveDownLabel?default('v')}" /><#t/>
-	<#if parameters.headerKey??><#t/>
-		&nbsp;<input type="button" value="${defMoveDownLabel}" onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
-	<#else><#t/>
-		&nbsp;<input type="button" value="${defMoveDownLabel}" onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
-	</#if><#t/>
-</#if><#t/>
-<#if parameters.allowSelectAll?default(true)><#t/>
-	<#assign defSelectAllLabel="${parameters.selectAllLabel?default('*')}" /><#t/>
-	<#if parameters.headerKey??><#t/>
-		&nbsp;<input type="button" value="${defSelectAllLabel}" onclick="selectAllOptionsExceptSome(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
-	<#else><#t/>
-		&nbsp;<input type="button" value="${defSelectAllLabel}" onclick="selectAllOptions(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
-	</#if><#t/>
-</#if><#t/>
-</td></tr>
-</table>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes_override/src/main/webapp/WEB-INF/template/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
deleted file mode 100644
index 4504b3f..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkbox.ftl
+++ /dev/null
@@ -1,129 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 8cc0dd8..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/checkboxlist.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index a1a85f1..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/combobox.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index a89de7e..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/control-close.ftl
+++ /dev/null
@@ -1,23 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 2761ac3..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/control.ftl
+++ /dev/null
@@ -1,26 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 37da2f8..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlfooter.ftl
+++ /dev/null
@@ -1,38 +0,0 @@
-<#--
-/*
- * $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/433ea016/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
deleted file mode 100644
index 7330270..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/xhtml/controlheader-core.ftl
+++ /dev/null
@@ -1,81 +0,0 @@
-<#--
-/*
- * $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>


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/form_processing/src/main/java/org/apache/struts/register/action/Register.java b/form_processing/src/main/java/org/apache/struts/register/action/Register.java
deleted file mode 100644
index d8f2e73..0000000
--- a/form_processing/src/main/java/org/apache/struts/register/action/Register.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.apache.struts.register.action;
-
-import org.apache.struts.register.model.Person;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a controller to handle actions
- * related to registering a user.
- * @author bruce phillips
- *
- */
-public class Register extends ActionSupport {
-	
-	private static final long serialVersionUID = 1L;
-	
-	private Person personBean;
-
-
-	public String execute() throws Exception {
-		
-		//call Service class to store personBean's state in database
-		
-		return SUCCESS;
-		
-	}
-	
-	public Person getPersonBean() {
-		
-		return personBean;
-		
-	}
-	
-	public void setPersonBean(Person person) {
-		
-		personBean = person;
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/form_processing/src/main/java/org/apache/struts/register/model/Person.java b/form_processing/src/main/java/org/apache/struts/register/model/Person.java
deleted file mode 100644
index 3020bbb..0000000
--- a/form_processing/src/main/java/org/apache/struts/register/model/Person.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.struts.register.model;
-
-
-/**
- * Models a Person who registers.
- * @author bruce phillips
- *
- */
-public class Person
-{
-    private String firstName;
-    private String lastName;
-    private String email;
-    private int age;
-
-    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 String getEmail()
-    {
-        return email;
-    }
-
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    public int getAge()
-    {
-        return age;
-    }
-
-    public void setAge( int age)
-    {
-        this.age = age;
-    }
-
-
-    public String toString()
-    {
-        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
-        " Email:      " + getEmail() + " Age:      " + getAge() ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/form_processing/src/main/resources/log4j.dtd b/form_processing/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/form_processing/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/form_processing/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/form_processing/src/main/resources/log4j.xml b/form_processing/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/form_processing/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/form_processing/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/form_processing/src/main/resources/struts.xml b/form_processing/src/main/resources/struts.xml
deleted file mode 100644
index e46b594..0000000
--- a/form_processing/src/main/resources/struts.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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" />
-
-	<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>
-		
-		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
-		If the result returned by the execute method is success render the HelloWorld.jsp -->
-		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
-			<result name="success">/HelloWorld.jsp</result>
-		</action>
-		
-	  <action name="register" class="org.apache.struts.register.action.Register" 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/433ea016/form_processing/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/form_processing/src/main/webapp/HelloWorld.jsp b/form_processing/src/main/webapp/HelloWorld.jsp
deleted file mode 100644
index 286a6ab..0000000
--- a/form_processing/src/main/webapp/HelloWorld.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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>Hello World!</title>
-</head>
-<body>
-<h2><s:property value="messageStore.message" /></h2>
-<p>I've said hello <s:property value="helloCount" /> times!</p>
-<p><s:property value="messageStore" /></p>
-<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/form_processing/src/main/webapp/META-INF/MANIFEST.MF b/form_processing/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/form_processing/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/form_processing/src/main/webapp/WEB-INF/web.xml b/form_processing/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 84fe881..0000000
--- a/form_processing/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Form_Processing_Struts2_Mvn</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/433ea016/form_processing/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/form_processing/src/main/webapp/index.jsp b/form_processing/src/main/webapp/index.jsp
deleted file mode 100644
index 091f505..0000000
--- a/form_processing/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,30 +0,0 @@
-<%@ 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>Basic Struts 2 Application - Welcome</title>
-</head>
-<body>
-<h1>Welcome To Struts 2!</h1>
-<p><a href="<s:url action='hello'/>">Hello World</a></p>
-<s:url action="hello" var="helloLink">
-  <s:param name="userName">Bruce Phillips</s:param>
-</s:url>
-<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
-
-<p>Get your own personal hello by filling out and submitting this form.</p>
-
-<s:form action="hello">
-
-	<s:textfield name="userName" label="Your name" />
-	
-	<s:submit value="Submit" />
-
-</s:form>
-
-<p><a href="register.jsp">Please register</a> for our prize drawing.</p>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/form_processing/src/main/webapp/register.jsp b/form_processing/src/main/webapp/register.jsp
deleted file mode 100644
index 0adac76..0000000
--- a/form_processing/src/main/webapp/register.jsp
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Register</title>
-</head>
-<body>
-<h3>Register for a prize by completing this form.</h3>
-
-<s:form action="register">
-
- 	  <s:textfield name="personBean.firstName" label="First name" />
- 	  <s:textfield  name="personBean.lastName" label="Last name" />
- 	  <s:textfield name="personBean.email"  label ="Email"/>  
- 	  <s:textfield name="personBean.age"  label="Age"  />
- 	  
-   	  <s:submit/>
-   	  
-</s:form>	
- 
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/form_processing/src/main/webapp/thankyou.jsp b/form_processing/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 3c845bc..0000000
--- a/form_processing/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Registration Successful</title>
-</head>
-<body>
-<h3>Thank you for registering for a prize.</h3>
-
-<p>Your registration 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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_tags/README.txt
----------------------------------------------------------------------
diff --git a/form_tags/README.txt b/form_tags/README.txt
deleted file mode 100644
index cf6854f..0000000
--- a/form_tags/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Form Tags 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/form_tags/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_tags/pom.xml
----------------------------------------------------------------------
diff --git a/form_tags/pom.xml b/form_tags/pom.xml
deleted file mode 100644
index 128f8ff..0000000
--- a/form_tags/pom.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>form_tags</artifactId>
-
-  <name>form_tags</name>
-
-  <description>Form tags example application for the 
-  Struts 2 getting started tutorials</description>
-  <packaging>war</packaging>
-      <build>
-		<finalName>form_tags</finalName>
-	</build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_tags/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/form_tags/src/main/java/org/apache/struts/edit/action/EditAction.java b/form_tags/src/main/java/org/apache/struts/edit/action/EditAction.java
deleted file mode 100644
index aa07ff2..0000000
--- a/form_tags/src/main/java/org/apache/struts/edit/action/EditAction.java
+++ /dev/null
@@ -1,96 +0,0 @@
-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/433ea016/form_tags/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/form_tags/src/main/java/org/apache/struts/edit/model/Person.java b/form_tags/src/main/java/org/apache/struts/edit/model/Person.java
deleted file mode 100644
index 392a8de..0000000
--- a/form_tags/src/main/java/org/apache/struts/edit/model/Person.java
+++ /dev/null
@@ -1,96 +0,0 @@
-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/433ea016/form_tags/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/form_tags/src/main/java/org/apache/struts/edit/model/State.java b/form_tags/src/main/java/org/apache/struts/edit/model/State.java
deleted file mode 100644
index bb927e1..0000000
--- a/form_tags/src/main/java/org/apache/struts/edit/model/State.java
+++ /dev/null
@@ -1,39 +0,0 @@
-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/433ea016/form_tags/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/form_tags/src/main/java/org/apache/struts/edit/service/EditService.java b/form_tags/src/main/java/org/apache/struts/edit/service/EditService.java
deleted file mode 100644
index f52e053..0000000
--- a/form_tags/src/main/java/org/apache/struts/edit/service/EditService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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/433ea016/form_tags/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/form_tags/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/form_tags/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
deleted file mode 100644
index 169b1d0..0000000
--- a/form_tags/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-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/433ea016/form_tags/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/form_tags/src/main/resources/log4j.dtd b/form_tags/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/form_tags/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/form_tags/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/form_tags/src/main/resources/log4j.xml b/form_tags/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/form_tags/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/form_tags/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/form_tags/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/form_tags/src/main/resources/org/apache/struts/edit/action/EditAction.properties
deleted file mode 100644
index 82869db..0000000
--- a/form_tags/src/main/resources/org/apache/struts/edit/action/EditAction.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-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/433ea016/form_tags/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/form_tags/src/main/resources/struts.xml b/form_tags/src/main/resources/struts.xml
deleted file mode 100644
index 30c5e5d..0000000
--- a/form_tags/src/main/resources/struts.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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" />
-
-	<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/433ea016/form_tags/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/form_tags/src/main/webapp/META-INF/MANIFEST.MF b/form_tags/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/form_tags/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_tags/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/form_tags/src/main/webapp/WEB-INF/web.xml b/form_tags/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 7edd933..0000000
--- a/form_tags/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Form Tags</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/433ea016/form_tags/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/form_tags/src/main/webapp/edit.jsp b/form_tags/src/main/webapp/edit.jsp
deleted file mode 100644
index 948f63e..0000000
--- a/form_tags/src/main/webapp/edit.jsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@ 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/433ea016/form_tags/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/form_tags/src/main/webapp/index.jsp b/form_tags/src/main/webapp/index.jsp
deleted file mode 100644
index 88209d8..0000000
--- a/form_tags/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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/433ea016/form_tags/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/form_tags/src/main/webapp/thankyou.jsp b/form_tags/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 5fa306f..0000000
--- a/form_tags/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/README.txt
----------------------------------------------------------------------
diff --git a/form_validation/README.txt b/form_validation/README.txt
deleted file mode 100644
index ea1bf02..0000000
--- a/form_validation/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Form Validation 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/form_validation/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/pom.xml
----------------------------------------------------------------------
diff --git a/form_validation/pom.xml b/form_validation/pom.xml
deleted file mode 100644
index 1a7b639..0000000
--- a/form_validation/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>form_validation</artifactId>
-
-  <name>Form validation</name>
-
-<description>Form validation example application for the 
-  Struts 2 getting started tutorials</description>
-  <packaging>war</packaging>
-  
-      <build>
-		<finalName>form_validation</finalName>
-	</build>
-	
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/form_validation/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/form_validation/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
deleted file mode 100644
index 92fda49..0000000
--- a/form_validation/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.struts.helloworld.action;
-
-import org.apache.struts.helloworld.model.MessageStore;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a Struts 2 controller that responds
- * to a user action by setting the value
- * of the Message model class, and returns a String 
- * result.
- * @author Bruce Phillips
- *
- */
-public class HelloWorldAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-	
-	/**
-	 * The model class that stores the message
-	 * to display in the view.
-	 */
-	private MessageStore messageStore;
-	
-	private static int helloCount = 0;
-	
-	public int getHelloCount() {
-		return helloCount;
-	}
-
-	public void setHelloCount(int helloCount) {
-		HelloWorldAction.helloCount = helloCount;
-	}
-	
-	private String userName;
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	/*
-	 * Creates the MessageStore model object, 
-	 * increase helloCount by 1 and 
-	 * returns success.  The MessageStore model
-	 * object will be available to the view.
-	 * (non-Javadoc)
-	 * @see com.opensymphony.xwork2.ActionSupport#execute()
-	 */
-	public String execute() throws Exception {
-		
-		messageStore = new MessageStore() ;
-		
-		//Action included a query string parameter of userName
-		//or a form field with name of userName
-		if (userName != null) {
-			
-			messageStore.setMessage( messageStore.getMessage() + " " + userName);
-			
-		}
-		
-		helloCount++;
-		
-		return SUCCESS;
-	}
-
-	public MessageStore getMessageStore() {
-		return messageStore;
-	}
-
-	public void setMessageStore(MessageStore messageStore) {
-		this.messageStore = messageStore;
-	}
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/form_validation/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/form_validation/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
deleted file mode 100644
index b7fceeb..0000000
--- a/form_validation/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.struts.helloworld.model;
-
-/**
- * Model class that stores a message.
- * @author Bruce Phillips
- *
- */
-public class MessageStore {
-	
-	private String message;
-	
-	public MessageStore() {
-		
-		setMessage("Hello Struts User");
-	}
-
-	public String getMessage() {
-		return message;
-	}
-
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	
-	public String toString() {
-		
-		return message + " (from toString)";
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/form_validation/src/main/java/org/apache/struts/register/action/Register.java b/form_validation/src/main/java/org/apache/struts/register/action/Register.java
deleted file mode 100644
index 2d987cb..0000000
--- a/form_validation/src/main/java/org/apache/struts/register/action/Register.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.apache.struts.register.action;
-
-import org.apache.struts.register.model.Person;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a controller to handle actions
- * related to registering a user.
- * @author bruce phillips
- *
- */
-public class Register extends ActionSupport {
-	
-	private static final long serialVersionUID = 1L;
-	
-	private Person personBean;
-
-	
-	public String execute() throws Exception {
-		
-		//call Service class to store personBean's state in database
-		
-		return SUCCESS;
-		
-	}
-	
-	public void validate(){
-		
-		if ( personBean.getFirstName().length() == 0 ){	
-
-			addFieldError( "personBean.firstName", "First name is required." );
-			
-		}
-		
-				
-		if ( personBean.getEmail().length() == 0 ){	
-
-			addFieldError( "personBean.email", "Email is required." );
-			
-		}
-		
-		if ( personBean.getAge() < 18 ){	
-
-			addFieldError( "personBean.age", "Age is required and must be 18 or older" );
-			
-		}
-		
-		
-	}
-
-	
-	public Person getPersonBean() {
-		
-		return personBean;
-		
-	}
-	
-	public void setPersonBean(Person person) {
-		
-		personBean = person;
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/form_validation/src/main/java/org/apache/struts/register/model/Person.java b/form_validation/src/main/java/org/apache/struts/register/model/Person.java
deleted file mode 100644
index 3020bbb..0000000
--- a/form_validation/src/main/java/org/apache/struts/register/model/Person.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.struts.register.model;
-
-
-/**
- * Models a Person who registers.
- * @author bruce phillips
- *
- */
-public class Person
-{
-    private String firstName;
-    private String lastName;
-    private String email;
-    private int age;
-
-    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 String getEmail()
-    {
-        return email;
-    }
-
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    public int getAge()
-    {
-        return age;
-    }
-
-    public void setAge( int age)
-    {
-        this.age = age;
-    }
-
-
-    public String toString()
-    {
-        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
-        " Email:      " + getEmail() + " Age:      " + getAge() ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/form_validation/src/main/resources/log4j.dtd b/form_validation/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/form_validation/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/form_validation/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/form_validation/src/main/resources/log4j.xml b/form_validation/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/form_validation/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/form_validation/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/form_validation/src/main/resources/struts.xml b/form_validation/src/main/resources/struts.xml
deleted file mode 100644
index b631d42..0000000
--- a/form_validation/src/main/resources/struts.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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" />
-
-	<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>
-		
-		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
-		If the result returned by the execute method is success render the HelloWorld.jsp -->
-		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
-			<result name="success">/HelloWorld.jsp</result>
-		</action>
-		
-	  <action name="register" class="org.apache.struts.register.action.Register" method="execute">
-		<result name="success">/thankyou.jsp</result>
-		<result name="input">/register.jsp</result>
-	  </action>
-
-	</package>
-
-</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/form_validation/src/main/webapp/HelloWorld.jsp b/form_validation/src/main/webapp/HelloWorld.jsp
deleted file mode 100644
index 286a6ab..0000000
--- a/form_validation/src/main/webapp/HelloWorld.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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>Hello World!</title>
-</head>
-<body>
-<h2><s:property value="messageStore.message" /></h2>
-<p>I've said hello <s:property value="helloCount" /> times!</p>
-<p><s:property value="messageStore" /></p>
-<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/form_validation/src/main/webapp/META-INF/MANIFEST.MF b/form_validation/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/form_validation/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/webapp/META-INF/context.xml
----------------------------------------------------------------------
diff --git a/form_validation/src/main/webapp/META-INF/context.xml b/form_validation/src/main/webapp/META-INF/context.xml
deleted file mode 100644
index a4f8a97..0000000
--- a/form_validation/src/main/webapp/META-INF/context.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Context antiJARLocking="true" path="/form_validation"/>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/form_validation/src/main/webapp/WEB-INF/web.xml b/form_validation/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 90c6644..0000000
--- a/form_validation/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Form Validation</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/433ea016/form_validation/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/form_validation/src/main/webapp/index.jsp b/form_validation/src/main/webapp/index.jsp
deleted file mode 100644
index 091f505..0000000
--- a/form_validation/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,30 +0,0 @@
-<%@ 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>Basic Struts 2 Application - Welcome</title>
-</head>
-<body>
-<h1>Welcome To Struts 2!</h1>
-<p><a href="<s:url action='hello'/>">Hello World</a></p>
-<s:url action="hello" var="helloLink">
-  <s:param name="userName">Bruce Phillips</s:param>
-</s:url>
-<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
-
-<p>Get your own personal hello by filling out and submitting this form.</p>
-
-<s:form action="hello">
-
-	<s:textfield name="userName" label="Your name" />
-	
-	<s:submit value="Submit" />
-
-</s:form>
-
-<p><a href="register.jsp">Please register</a> for our prize drawing.</p>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/form_validation/src/main/webapp/register.jsp b/form_validation/src/main/webapp/register.jsp
deleted file mode 100644
index a4acb15..0000000
--- a/form_validation/src/main/webapp/register.jsp
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Register</title>
-<s:head />
-</head>
-<body>
-<h3>Register for a prize by completing this form.</h3>
-
-<s:form action="register">
-
- 	  <s:textfield name="personBean.firstName" label="First name" />
- 	  <s:textfield  name="personBean.lastName" label="Last name" />
- 	  <s:textfield name="personBean.email"  label ="Email"/>  
- 	  <s:textfield name="personBean.age"  label="Age"  />
- 	  
-   	  <s:submit/>
-   	  
-</s:form>	
- 
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_validation/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/form_validation/src/main/webapp/thankyou.jsp b/form_validation/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 3c845bc..0000000
--- a/form_validation/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Registration Successful</title>
-</head>
-<body>
-<h3>Thank you for registering for a prize.</h3>
-
-<p>Your registration 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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_xml_validation/README.txt
----------------------------------------------------------------------
diff --git a/form_xml_validation/README.txt b/form_xml_validation/README.txt
deleted file mode 100644
index c61a80c..0000000
--- a/form_xml_validation/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Form XML Validation 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/form_xml_validation/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_xml_validation/pom.xml
----------------------------------------------------------------------
diff --git a/form_xml_validation/pom.xml b/form_xml_validation/pom.xml
deleted file mode 100644
index 4f75e55..0000000
--- a/form_xml_validation/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>form_xml_validation</artifactId>
-
-  <name>form_xml_validation</name>
-  
-<description>Form XML validation example application for the 
-  Struts 2 getting started tutorials</description>
-  <packaging>war</packaging>
-  
-      <build>
-		<finalName>form_xml_validation</finalName>
-	</build>
-	
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_xml_validation/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/java/org/apache/struts/edit/action/EditAction.java b/form_xml_validation/src/main/java/org/apache/struts/edit/action/EditAction.java
deleted file mode 100644
index aa07ff2..0000000
--- a/form_xml_validation/src/main/java/org/apache/struts/edit/action/EditAction.java
+++ /dev/null
@@ -1,96 +0,0 @@
-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/433ea016/form_xml_validation/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/java/org/apache/struts/edit/model/Person.java b/form_xml_validation/src/main/java/org/apache/struts/edit/model/Person.java
deleted file mode 100644
index 2d127eb..0000000
--- a/form_xml_validation/src/main/java/org/apache/struts/edit/model/Person.java
+++ /dev/null
@@ -1,121 +0,0 @@
-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;
-    private String email;
-    private String phoneNumber;
-   
- 
-
-    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() ) + " | " +
-        " Email: " + getEmail() + " | " +
-        " Phone: " + getPhoneNumber();
-        
-        
-    }
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setPhoneNumber(String phoneNumber) {
-		this.phoneNumber = phoneNumber;
-	}
-
-	public String getPhoneNumber() {
-		return phoneNumber;
-	}
-
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_xml_validation/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/java/org/apache/struts/edit/model/State.java b/form_xml_validation/src/main/java/org/apache/struts/edit/model/State.java
deleted file mode 100644
index bb927e1..0000000
--- a/form_xml_validation/src/main/java/org/apache/struts/edit/model/State.java
+++ /dev/null
@@ -1,39 +0,0 @@
-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/433ea016/form_xml_validation/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/java/org/apache/struts/edit/service/EditService.java b/form_xml_validation/src/main/java/org/apache/struts/edit/service/EditService.java
deleted file mode 100644
index f52e053..0000000
--- a/form_xml_validation/src/main/java/org/apache/struts/edit/service/EditService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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/433ea016/form_xml_validation/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/form_xml_validation/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
deleted file mode 100644
index 8fd35e2..0000000
--- a/form_xml_validation/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
+++ /dev/null
@@ -1,60 +0,0 @@
-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.setEmail("bphillips@ku.edu");
-		person.setSport("basketball");
-		person.setGender("not sure");
-		person.setResidency("KS");
-		person.setOver21(true);		
-		person.setCarModels( carModels);	
-		person.setPhoneNumber("123-456-9999");
-
-		
-
-	}
-
-	
-	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() );
-		EditServiceInMemory.person.setEmail( personBean.getEmail() );
-		EditServiceInMemory.person.setPhoneNumber( personBean.getPhoneNumber() );
-
-	}
-
-}


[16/16] struts-examples git commit: Add jetty plugin to all artifacts for fast try out of functionality and add note about it to readme

Posted by jo...@apache.org.
Add jetty plugin to all artifacts for fast try out of functionality and add note about it to readme


Project: http://git-wip-us.apache.org/repos/asf/struts-examples/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts-examples/commit/65936200
Tree: http://git-wip-us.apache.org/repos/asf/struts-examples/tree/65936200
Diff: http://git-wip-us.apache.org/repos/asf/struts-examples/diff/65936200

Branch: refs/heads/master
Commit: 65936200fc0e04cfc8ca965eed8803d2da9188ce
Parents: d75eb7a
Author: Johannes Geppert <jo...@apache.org>
Authored: Sun Jun 14 12:53:07 2015 +0200
Committer: Johannes Geppert <jo...@apache.org>
Committed: Sun Jun 14 12:53:07 2015 +0200

----------------------------------------------------------------------
 annotations/README.txt               |  3 +++
 basic-struts/README.txt              |  2 +-
 bean-validation/README.txt           |  2 +-
 blank/pom.xml                        |  3 +++
 coding-actions/README.txt            |  2 +-
 control-tags/README.txt              |  2 +-
 exception-handling/README.txt        |  3 +++
 exception-handling/pom.xml           | 18 ++++++++++++++++++
 exclude-parameters/README.txt        |  3 +++
 exclude-parameters/pom.xml           | 18 ++++++++++++++++++
 form-processing/README.txt           |  3 +++
 form-processing/pom.xml              | 18 ++++++++++++++++++
 form-tags/README.txt                 |  3 +++
 form-tags/pom.xml                    | 18 ++++++++++++++++++
 form-validation/README.txt           |  3 +++
 form-validation/pom.xml              | 18 ++++++++++++++++++
 form-xml-validation/README.txt       |  3 +++
 form-xml-validation/pom.xml          | 18 ++++++++++++++++++
 helloworld/README.txt                |  3 +++
 helloworld/pom.xml                   | 18 ++++++++++++++++++
 http-session/README.txt              |  3 +++
 http-session/pom.xml                 | 18 ++++++++++++++++++
 interceptors/README.txt              |  3 +++
 interceptors/pom.xml                 | 18 ++++++++++++++++++
 mailreader/pom.xml                   | 20 ++++++++++----------
 message-resource/README.txt          |  3 +++
 message-resource/pom.xml             | 18 ++++++++++++++++++
 preparable-interface/README.txt      |  3 +++
 preparable-interface/pom.xml         | 18 ++++++++++++++++++
 restful2actionmapper/README.txt      |  3 +++
 restful2actionmapper/pom.xml         | 18 ++++++++++++++++++
 spring-struts/README.txt             |  3 +++
 spring-struts/pom.xml                | 18 ++++++++++++++++++
 themes-override/README.txt           |  3 +++
 themes/README.txt                    |  3 +++
 themes/pom.xml                       |  6 ++++--
 unit-testing/README.txt              |  3 +++
 unit-testing/pom.xml                 | 26 ++++++++++++++++++++++----
 using-tags/README.txt                |  3 +++
 using-tags/pom.xml                   | 20 +++++++++++++++++++-
 wildcard-method-selection/README.txt |  3 +++
 wildcard-method-selection/pom.xml    |  3 +++
 42 files changed, 356 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/annotations/README.txt
----------------------------------------------------------------------
diff --git a/annotations/README.txt b/annotations/README.txt
index 6eb6eb0..570d538 100644
--- a/annotations/README.txt
+++ b/annotations/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/annotations/index.jsp 
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/basic-struts/README.txt
----------------------------------------------------------------------
diff --git a/basic-struts/README.txt b/basic-struts/README.txt
index c609f31..331e59e 100644
--- a/basic-struts/README.txt
+++ b/basic-struts/README.txt
@@ -10,7 +10,7 @@ The war file is created in the target sub-folder.
 Copy the war file to your Servlet container (e.g. Tomcat) and 
 then startup the Servlet container.
 
-Or you are using maven you can run command:
+Or if you are using maven you can run command:
 mvn jetty:run
 
 

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/bean-validation/README.txt
----------------------------------------------------------------------
diff --git a/bean-validation/README.txt b/bean-validation/README.txt
index 519f3f6..392d9aa 100755
--- a/bean-validation/README.txt
+++ b/bean-validation/README.txt
@@ -10,7 +10,7 @@ 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.
 
-Or you are using maven you can run command:
+Or if you are using maven you can run command:
 mvn jetty:run
 
 In a web browser go to:  http://localhost:8080/bean-validation/index.action

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/blank/pom.xml
----------------------------------------------------------------------
diff --git a/blank/pom.xml b/blank/pom.xml
index 78f467c..74a435f 100644
--- a/blank/pom.xml
+++ b/blank/pom.xml
@@ -64,6 +64,9 @@
                 <artifactId>jetty-maven-plugin</artifactId>
                 <version>8.1.16.v20140903</version>
                 <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
                     <stopKey>CTRL+C</stopKey>
                     <stopPort>8999</stopPort>
                     <scanIntervalSeconds>10</scanIntervalSeconds>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/coding-actions/README.txt
----------------------------------------------------------------------
diff --git a/coding-actions/README.txt b/coding-actions/README.txt
index ee850e8..a269f42 100644
--- a/coding-actions/README.txt
+++ b/coding-actions/README.txt
@@ -10,7 +10,7 @@ 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.
 
-Or you are using maven you can run command:
+Or if you are using maven you can run command:
 mvn jetty:run
 
 In a web browser go to:  http://localhost:8080/coding-actions/index.action.

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/control-tags/README.txt
----------------------------------------------------------------------
diff --git a/control-tags/README.txt b/control-tags/README.txt
index f1da262..b5d8062 100755
--- a/control-tags/README.txt
+++ b/control-tags/README.txt
@@ -10,7 +10,7 @@ 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.
 
-Or you are using maven you can run command:
+Or if you are using maven you can run command:
 mvn jetty:run
 
 In a web browser go to:  http://localhost:8080/control-tags/index.action.

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/exception-handling/README.txt
----------------------------------------------------------------------
diff --git a/exception-handling/README.txt b/exception-handling/README.txt
index de86365..d350450 100644
--- a/exception-handling/README.txt
+++ b/exception-handling/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/exception-handling/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/exception-handling/pom.xml
----------------------------------------------------------------------
diff --git a/exception-handling/pom.xml b/exception-handling/pom.xml
index 86a555d..c6c1922 100644
--- a/exception-handling/pom.xml
+++ b/exception-handling/pom.xml
@@ -18,6 +18,24 @@
 
     <build>
         <finalName>exception-handling</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/exclude-parameters/README.txt
----------------------------------------------------------------------
diff --git a/exclude-parameters/README.txt b/exclude-parameters/README.txt
index 56d63d4..85a5db2 100644
--- a/exclude-parameters/README.txt
+++ b/exclude-parameters/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/exclude-parameters/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/exclude-parameters/pom.xml
----------------------------------------------------------------------
diff --git a/exclude-parameters/pom.xml b/exclude-parameters/pom.xml
index 920c505..7b439ac 100644
--- a/exclude-parameters/pom.xml
+++ b/exclude-parameters/pom.xml
@@ -19,6 +19,24 @@
 
     <build>
         <finalName>exclude-parameters</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/form-processing/README.txt
----------------------------------------------------------------------
diff --git a/form-processing/README.txt b/form-processing/README.txt
index 70e168f..bdcb84e 100644
--- a/form-processing/README.txt
+++ b/form-processing/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/form-processing/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/form-processing/pom.xml
----------------------------------------------------------------------
diff --git a/form-processing/pom.xml b/form-processing/pom.xml
index d355876..1d61758 100644
--- a/form-processing/pom.xml
+++ b/form-processing/pom.xml
@@ -18,5 +18,23 @@
 
     <build>
         <finalName>form-processing</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/form-tags/README.txt
----------------------------------------------------------------------
diff --git a/form-tags/README.txt b/form-tags/README.txt
index ca309b2..d48b9bf 100644
--- a/form-tags/README.txt
+++ b/form-tags/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/form-tags/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/form-tags/pom.xml
----------------------------------------------------------------------
diff --git a/form-tags/pom.xml b/form-tags/pom.xml
index f529e18..42e797c 100644
--- a/form-tags/pom.xml
+++ b/form-tags/pom.xml
@@ -19,6 +19,24 @@
 
     <build>
         <finalName>form-tags</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/form-validation/README.txt
----------------------------------------------------------------------
diff --git a/form-validation/README.txt b/form-validation/README.txt
index 2dabeb0..7ecf75f 100644
--- a/form-validation/README.txt
+++ b/form-validation/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/form-validation/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/form-validation/pom.xml
----------------------------------------------------------------------
diff --git a/form-validation/pom.xml b/form-validation/pom.xml
index 8f8a2e1..7a0a50d 100644
--- a/form-validation/pom.xml
+++ b/form-validation/pom.xml
@@ -19,6 +19,24 @@
 
     <build>
         <finalName>form_validation</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/form-xml-validation/README.txt
----------------------------------------------------------------------
diff --git a/form-xml-validation/README.txt b/form-xml-validation/README.txt
index 067681c..a7ddabc 100644
--- a/form-xml-validation/README.txt
+++ b/form-xml-validation/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/form-xml-validation/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/form-xml-validation/pom.xml
----------------------------------------------------------------------
diff --git a/form-xml-validation/pom.xml b/form-xml-validation/pom.xml
index adc063d..290eff3 100644
--- a/form-xml-validation/pom.xml
+++ b/form-xml-validation/pom.xml
@@ -18,6 +18,24 @@
 
     <build>
         <finalName>form-xml-validation</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/helloworld/README.txt
----------------------------------------------------------------------
diff --git a/helloworld/README.txt b/helloworld/README.txt
index 19d2338..94aa3c0 100755
--- a/helloworld/README.txt
+++ b/helloworld/README.txt
@@ -10,6 +10,9 @@ The war file is created in the target sub-folder.
 Copy the war file to your Servlet container (e.g. Tomcat) and 
 then startup the Servlet container.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/hello-world/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/helloworld/pom.xml
----------------------------------------------------------------------
diff --git a/helloworld/pom.xml b/helloworld/pom.xml
index ef4ea50..6493efc 100644
--- a/helloworld/pom.xml
+++ b/helloworld/pom.xml
@@ -18,5 +18,23 @@
 
     <build>
         <finalName>hello-world</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/http-session/README.txt
----------------------------------------------------------------------
diff --git a/http-session/README.txt b/http-session/README.txt
index 8689b30..3e9f7d2 100644
--- a/http-session/README.txt
+++ b/http-session/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/http-session/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/http-session/pom.xml
----------------------------------------------------------------------
diff --git a/http-session/pom.xml b/http-session/pom.xml
index f5d0a1c..ecba425 100644
--- a/http-session/pom.xml
+++ b/http-session/pom.xml
@@ -19,5 +19,23 @@
 
     <build>
         <finalName>http-session</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/interceptors/README.txt
----------------------------------------------------------------------
diff --git a/interceptors/README.txt b/interceptors/README.txt
index d3e2ae5..daaa6c6 100644
--- a/interceptors/README.txt
+++ b/interceptors/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/interceptors/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/interceptors/pom.xml
----------------------------------------------------------------------
diff --git a/interceptors/pom.xml b/interceptors/pom.xml
index 955a08c..0d5b422 100644
--- a/interceptors/pom.xml
+++ b/interceptors/pom.xml
@@ -19,6 +19,24 @@
 
     <build>
         <finalName>interceptors</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/mailreader/pom.xml
----------------------------------------------------------------------
diff --git a/mailreader/pom.xml b/mailreader/pom.xml
index 1f70592..512860c 100644
--- a/mailreader/pom.xml
+++ b/mailreader/pom.xml
@@ -21,7 +21,8 @@
  * under the License.
  */
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>struts.apache.org</groupId>
@@ -43,9 +44,9 @@
         </dependency>
 
         <dependency>
-           <groupId>org.apache.struts</groupId>
-           <artifactId>struts-mailreader-dao</artifactId>
-           <version>1.3.5</version>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts-mailreader-dao</artifactId>
+            <version>1.3.5</version>
         </dependency>
 
         <!-- Logging -->
@@ -73,19 +74,18 @@
                 <artifactId>jetty-maven-plugin</artifactId>
                 <version>8.1.16.v20140903</version>
                 <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
                     <stopKey>CTRL+C</stopKey>
                     <stopPort>8999</stopPort>
-                   <scanIntervalSeconds>10</scanIntervalSeconds>
+                    <scanIntervalSeconds>10</scanIntervalSeconds>
                     <webAppSourceDirectory>${basedir}/src/main/webapp/</webAppSourceDirectory>
-                    <webAppConfig>
-                        <contextPath>/struts2-mailreader</contextPath>
-                        <descriptor>${basedir}/src/main/webapp/WEB-INF/web.xml</descriptor>
-                    </webAppConfig>
                 </configuration>
             </plugin>
         </plugins>
     </build>
     <properties>
-    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 </project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/message-resource/README.txt
----------------------------------------------------------------------
diff --git a/message-resource/README.txt b/message-resource/README.txt
index 299304a..f5f571b 100644
--- a/message-resource/README.txt
+++ b/message-resource/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/message-resource/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/message-resource/pom.xml
----------------------------------------------------------------------
diff --git a/message-resource/pom.xml b/message-resource/pom.xml
index ea9f2d0..f559388 100644
--- a/message-resource/pom.xml
+++ b/message-resource/pom.xml
@@ -19,6 +19,24 @@
 
     <build>
         <finalName>message-resource</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/preparable-interface/README.txt
----------------------------------------------------------------------
diff --git a/preparable-interface/README.txt b/preparable-interface/README.txt
index 067c0d8..647008a 100644
--- a/preparable-interface/README.txt
+++ b/preparable-interface/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/preparable-interface/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/preparable-interface/pom.xml
----------------------------------------------------------------------
diff --git a/preparable-interface/pom.xml b/preparable-interface/pom.xml
index ee7d994..38596c5 100644
--- a/preparable-interface/pom.xml
+++ b/preparable-interface/pom.xml
@@ -19,6 +19,24 @@
 
     <build>
         <finalName>preparable-interface</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/restful2actionmapper/README.txt
----------------------------------------------------------------------
diff --git a/restful2actionmapper/README.txt b/restful2actionmapper/README.txt
index ebf3019..bff3130 100644
--- a/restful2actionmapper/README.txt
+++ b/restful2actionmapper/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/reststyleactionmapper/
 
 You should see a web page with Welcome to Struts 2.

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/restful2actionmapper/pom.xml
----------------------------------------------------------------------
diff --git a/restful2actionmapper/pom.xml b/restful2actionmapper/pom.xml
index cff5924..ea96861 100644
--- a/restful2actionmapper/pom.xml
+++ b/restful2actionmapper/pom.xml
@@ -21,6 +21,24 @@
 
     <build>
         <finalName>reststyleactionmapper</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/spring-struts/README.txt
----------------------------------------------------------------------
diff --git a/spring-struts/README.txt b/spring-struts/README.txt
index c9b1d9a..6be1e15 100644
--- a/spring-struts/README.txt
+++ b/spring-struts/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/spring-struts/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/spring-struts/pom.xml
----------------------------------------------------------------------
diff --git a/spring-struts/pom.xml b/spring-struts/pom.xml
index 0531b3a..91ce88a 100644
--- a/spring-struts/pom.xml
+++ b/spring-struts/pom.xml
@@ -24,6 +24,24 @@
     </dependencies>
     <build>
         <finalName>spring-struts</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/themes-override/README.txt
----------------------------------------------------------------------
diff --git a/themes-override/README.txt b/themes-override/README.txt
index 2a1b48c..1754c87 100644
--- a/themes-override/README.txt
+++ b/themes-override/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 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/65936200/themes/README.txt
----------------------------------------------------------------------
diff --git a/themes/README.txt b/themes/README.txt
index 677a62f..94d490c 100644
--- a/themes/README.txt
+++ b/themes/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/themes/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/themes/pom.xml
----------------------------------------------------------------------
diff --git a/themes/pom.xml b/themes/pom.xml
index 87dd43c..044e84d 100644
--- a/themes/pom.xml
+++ b/themes/pom.xml
@@ -25,8 +25,11 @@
             <plugin>
                 <groupId>org.mortbay.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
-                <version>8.1.7.v20120910</version>
+                <version>8.1.16.v20140903</version>
                 <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
                     <stopKey>CTRL+C</stopKey>
                     <stopPort>8999</stopPort>
                     <scanIntervalSeconds>10</scanIntervalSeconds>
@@ -36,7 +39,6 @@
                 </configuration>
             </plugin>
         </plugins>
-
     </build>
 
 </project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/unit-testing/README.txt
----------------------------------------------------------------------
diff --git a/unit-testing/README.txt b/unit-testing/README.txt
index 61377ee..d71eee5 100644
--- a/unit-testing/README.txt
+++ b/unit-testing/README.txt
@@ -12,6 +12,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/unit-testing/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/unit-testing/pom.xml
----------------------------------------------------------------------
diff --git a/unit-testing/pom.xml b/unit-testing/pom.xml
index 38ceeee..933e5ef 100644
--- a/unit-testing/pom.xml
+++ b/unit-testing/pom.xml
@@ -13,10 +13,6 @@
 
 	<name>Unit Testing</name>
 
-	<build>
-		<finalName>unit-testing</finalName>
-	</build>
-
 	<packaging>war</packaging>
 
 	<dependencies>
@@ -42,4 +38,26 @@
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
+
+	<build>
+		<finalName>unit-testing</finalName>
+		<plugins>
+			<plugin>
+				<groupId>org.mortbay.jetty</groupId>
+				<artifactId>jetty-maven-plugin</artifactId>
+				<version>8.1.16.v20140903</version>
+				<configuration>
+					<webApp>
+						<contextPath>/${artifactId}</contextPath>
+					</webApp>
+					<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/65936200/using-tags/README.txt
----------------------------------------------------------------------
diff --git a/using-tags/README.txt b/using-tags/README.txt
index 2ebb6ed..35308c1 100644
--- a/using-tags/README.txt
+++ b/using-tags/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/using-tags/index.action.
 
 You should see a web page with Welcome to Struts 2!

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/using-tags/pom.xml
----------------------------------------------------------------------
diff --git a/using-tags/pom.xml b/using-tags/pom.xml
index 4da6604..abd3916 100644
--- a/using-tags/pom.xml
+++ b/using-tags/pom.xml
@@ -17,7 +17,25 @@
     <packaging>war</packaging>
 
     <build>
-        <finalName>using_tags</finalName>
+        <finalName>using-tags</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</version>
+                <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
+                    <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/65936200/wildcard-method-selection/README.txt
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/README.txt b/wildcard-method-selection/README.txt
index cd9275d..a0cae36 100644
--- a/wildcard-method-selection/README.txt
+++ b/wildcard-method-selection/README.txt
@@ -10,6 +10,9 @@ 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.
 
+Or if you are using maven you can run command:
+mvn jetty:run
+
 In a web browser go to:  http://localhost:8080/wildcard-method-selection/Person.action
 
 You should see a web page with People listed.

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/65936200/wildcard-method-selection/pom.xml
----------------------------------------------------------------------
diff --git a/wildcard-method-selection/pom.xml b/wildcard-method-selection/pom.xml
index 8b4fe1f..bcd156e 100644
--- a/wildcard-method-selection/pom.xml
+++ b/wildcard-method-selection/pom.xml
@@ -25,6 +25,9 @@
                 <artifactId>jetty-maven-plugin</artifactId>
                 <version>8.1.16.v20140903</version>
                 <configuration>
+                    <webApp>
+                        <contextPath>/${artifactId}</contextPath>
+                    </webApp>
                     <stopKey>CTRL+C</stopKey>
                     <stopPort>8999</stopPort>
                     <scanIntervalSeconds>10</scanIntervalSeconds>


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/resources/struts.xml b/exception_handling/src/main/resources/struts.xml
deleted file mode 100644
index c77b0de..0000000
--- a/exception_handling/src/main/resources/struts.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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" />
-
-	<package name="basicstruts2" extends="struts-default">
-	
-	<!-- setup the default-stack exception mapping interceptor 
- 		so that any exceptions not caught by this application 
- 		will be logged and then handled by the global exception 
- 		mapping -->
- 		<interceptors>
- 		<interceptor-stack name="appDefault">
-        	 <interceptor-ref name="defaultStack">
-      			<param name="exception.logEnabled">true</param>
-      			<param name="exception.logLevel">ERROR</param>
-   			</interceptor-ref>
- 	    </interceptor-stack>
-		</interceptors>
-		
-		<default-interceptor-ref name="appDefault" />
-		
-        <global-results>
-  		  <result name="error">/error.jsp</result>
-  		  <result name="securityerror">/securityerror.jsp</result>
-  	    </global-results>
-  		
-
-	    <global-exception-mappings>
-	        <exception-mapping exception="org.apache.struts.register.exceptions.SecurityBreachException" result="securityerror" />
-	        <exception-mapping exception="java.lang.Exception" result="error" />
-	   	</global-exception-mappings>
-	  
-	    
-         
-        <action name="causesecurityexception" class="org.apache.struts.register.action.Register" method="throwSecurityException">
-        	<result>/register.jsp</result>
-        </action>
-        
-        <action name="causeexception" class="org.apache.struts.register.action.Register" method="throwException">
-        	<result>/register.jsp</result>
-        </action>
-        
-        <action name="causenullpointerexception" class="org.apache.struts.register.action.Register" method="throwNullPointerException">
-        	<result>/register.jsp</result>
-        </action>
-        
-        <action name="actionspecificexception" class="org.apache.struts.register.action.Register" method="throwSecurityException">
-        	<exception-mapping exception="org.apache.struts.register.exceptions.SecurityBreachException" 
-        	   result="login" />
-        	<result>/register.jsp</result>
-        	<result name="login">/login.jsp</result>
-        </action>
-
-        <!-- 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>
-		
-		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
-		If the result returned by the execute method is success render the HelloWorld.jsp -->
-		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
-			<result name="success">/HelloWorld.jsp</result>
-		</action>
-		
-  <action name="register" class="org.apache.struts.register.action.Register" 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/433ea016/exception_handling/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/HelloWorld.jsp b/exception_handling/src/main/webapp/HelloWorld.jsp
deleted file mode 100644
index 286a6ab..0000000
--- a/exception_handling/src/main/webapp/HelloWorld.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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>Hello World!</title>
-</head>
-<body>
-<h2><s:property value="messageStore.message" /></h2>
-<p>I've said hello <s:property value="helloCount" /> times!</p>
-<p><s:property value="messageStore" /></p>
-<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/META-INF/MANIFEST.MF b/exception_handling/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/exception_handling/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/WEB-INF/web.xml b/exception_handling/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index abfd1f4..0000000
--- a/exception_handling/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Exception Handling</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/433ea016/exception_handling/src/main/webapp/error.jsp
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/error.jsp b/exception_handling/src/main/webapp/error.jsp
deleted file mode 100644
index 44a8044..0000000
--- a/exception_handling/src/main/webapp/error.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-
-	<head>
-    <title>Error</title>
-	</head>
-
-	<body>
-		<h4>The application has malfunctioned.</h4>
-		<p>  Please contact technical support with the following information:</p> 
-		
-		<!-- the exception and exceptionStack bean properties
-		were created by Struts2's Exception Intercepter  -->
-		<h4>Exception Name: <s:property value="exception" /> </h4>
-		<h4>Exception Details: <s:property value="exceptionStack" /></h4> 
-		
-	
-	    <p><a href="index.jsp">Return to the home page.</a></p>
-	  
-		
-	</body>
-	
-</html>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/index.jsp b/exception_handling/src/main/webapp/index.jsp
deleted file mode 100644
index 0e38bcc..0000000
--- a/exception_handling/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,39 +0,0 @@
-<%@ 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>Exception Handling Struts 2 Application - Welcome</title>
-</head>
-<body>
-<h1>Welcome To Struts 2!</h1>
-<p><a href="<s:url action='hello'/>">Hello World</a></p>
-<s:url action="hello" var="helloLink">
-  <s:param name="userName">Bruce Phillips</s:param>
-</s:url>
-<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
-
-<p>Get your own personal hello by filling out and submitting this form.</p>
-
-<s:form action="hello">
-
-	<s:textfield name="userName" label="Your name" />
-	
-	<s:submit value="Submit" />
-
-</s:form>
-
-<p><a href="register.jsp">Please register</a> for our prize drawing.</p>
-
-<p><a href='<s:url action="causeexception" />' >Cause Exception</a></p> 
-
-<p><a href='<s:url action="causenullpointerexception" />' >Cause Null Pointer Exception</a></p> 
-
-<p><a href='<s:url action="causesecurityexception" />' >Cause Global Security Exception</a></p> 
-
-<p><a href='<s:url action="actionspecificexception" />' >Cause ActionSpecific Security Exception</a></p>
-  
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/webapp/login.jsp
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/login.jsp b/exception_handling/src/main/webapp/login.jsp
deleted file mode 100644
index 1b59392..0000000
--- a/exception_handling/src/main/webapp/login.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@ 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>Exception Handling Struts 2 Application - Login</title>
-</head>
-<body>
-<h1>You Must Login</h1>
-<p>Please login</p>
-
-<p><a href="index.jsp">Return to the home page.</a></p>
-	  
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/register.jsp b/exception_handling/src/main/webapp/register.jsp
deleted file mode 100644
index 0adac76..0000000
--- a/exception_handling/src/main/webapp/register.jsp
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Register</title>
-</head>
-<body>
-<h3>Register for a prize by completing this form.</h3>
-
-<s:form action="register">
-
- 	  <s:textfield name="personBean.firstName" label="First name" />
- 	  <s:textfield  name="personBean.lastName" label="Last name" />
- 	  <s:textfield name="personBean.email"  label ="Email"/>  
- 	  <s:textfield name="personBean.age"  label="Age"  />
- 	  
-   	  <s:submit/>
-   	  
-</s:form>	
- 
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/webapp/securityerror.jsp
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/securityerror.jsp b/exception_handling/src/main/webapp/securityerror.jsp
deleted file mode 100644
index 873c467..0000000
--- a/exception_handling/src/main/webapp/securityerror.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-
-	<head>
-    <title>Security Error</title>
-	</head>
-
-	<body>
-		<h4>There has been a security error.</h4>
-		<p>  Please contact technical support with the following information:</p> 
-		
-		<!-- the exception and exceptionStack bean properties
-		were created by Struts2's Exception Intercepter -->
-		<h4>Exception Name: <s:property value="exception" /> </h4>
-		<h4>Exception Details: <s:property value="exceptionStack" /></h4> 
-		
-	
-	    <p><a href="index.jsp">Return to the home page.</a></p>
-	  
-		
-	</body>
-	
-</html>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/webapp/thankyou.jsp b/exception_handling/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 3c845bc..0000000
--- a/exception_handling/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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>Registration Successful</title>
-</head>
-<body>
-<h3>Thank you for registering for a prize.</h3>
-
-<p>Your registration 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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/README.txt
----------------------------------------------------------------------
diff --git a/exclude-parameters/README.txt b/exclude-parameters/README.txt
new file mode 100644
index 0000000..56d63d4
--- /dev/null
+++ b/exclude-parameters/README.txt
@@ -0,0 +1,19 @@
+This is the example project referred to in the
+Struts 2 documentation, Exclude Params 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/exclude-parameters/index.action.
+
+You should see a web page with Welcome to Struts 2!
+
+The application writes log messages to the console.  In Tomcat the 
+log messages can be found in catalina.out ([tomcat home]/logs).
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/pom.xml
----------------------------------------------------------------------
diff --git a/exclude-parameters/pom.xml b/exclude-parameters/pom.xml
new file mode 100644
index 0000000..920c505
--- /dev/null
+++ b/exclude-parameters/pom.xml
@@ -0,0 +1,24 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>exclude-parameters</artifactId>
+
+    <name>exclude-parameters</name>
+
+    <description>Struts 2 example application for the exclude parameters getting started tutorial</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>exclude-parameters</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/java/org/apache/struts/edit/action/EditAction.java b/exclude-parameters/src/main/java/org/apache/struts/edit/action/EditAction.java
new file mode 100644
index 0000000..0383bbc
--- /dev/null
+++ b/exclude-parameters/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -0,0 +1,95 @@
+package org.apache.struts.edit.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.Preparable;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts.edit.model.Person;
+import org.apache.struts.edit.model.State;
+import org.apache.struts.edit.service.CarModelsService;
+import org.apache.struts.edit.service.CarModelsServiceHardCoded;
+import org.apache.struts.edit.service.EditService;
+import org.apache.struts.edit.service.EditServiceInMemory;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Acts as a controller to handle actions
+ * related to editing a Person.
+ * @author bruce phillips
+ *
+ */
+public class EditAction extends ActionSupport implements Preparable {
+
+	private static Logger log = LogManager.getLogger(EditAction.class);
+	private static final long serialVersionUID = 1L;
+	
+	private EditService editService = new EditServiceInMemory();
+	private CarModelsService carModelsService = new CarModelsServiceHardCoded() ;
+	
+	private Person personBean;
+	private String [] sports = {"football", "baseball", "basketball" };
+	private String [] genders = {"male", "female", "not sure" };
+	private List<State> states ;
+	private String [] carModelsAvailable ;
+
+	@Override
+	public void prepare() throws Exception {
+		log.info("In prepare method...");
+		carModelsAvailable = carModelsService.getCarModels() ;
+		setPersonBean( editService.getPerson() );
+	}
+
+	public void prepareExecute() {
+		log.info("In prepareExecute method...");
+	}
+	
+	public String execute() throws Exception {
+		log.info ("In execute method...");
+	    editService.savePerson( getPersonBean() );
+		return SUCCESS;
+	}
+	
+	public void prepareInput() {
+		log.info("In prepareInput method...");
+	}
+	
+	public String input() throws Exception {
+		log.info("In input method...");
+		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<>();
+		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/433ea016/exclude-parameters/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/java/org/apache/struts/edit/model/Person.java b/exclude-parameters/src/main/java/org/apache/struts/edit/model/Person.java
new file mode 100644
index 0000000..2d127eb
--- /dev/null
+++ b/exclude-parameters/src/main/java/org/apache/struts/edit/model/Person.java
@@ -0,0 +1,121 @@
+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;
+    private String email;
+    private String phoneNumber;
+   
+ 
+
+    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() ) + " | " +
+        " Email: " + getEmail() + " | " +
+        " Phone: " + getPhoneNumber();
+        
+        
+    }
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setPhoneNumber(String phoneNumber) {
+		this.phoneNumber = phoneNumber;
+	}
+
+	public String getPhoneNumber() {
+		return phoneNumber;
+	}
+
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/java/org/apache/struts/edit/model/State.java b/exclude-parameters/src/main/java/org/apache/struts/edit/model/State.java
new file mode 100644
index 0000000..bb927e1
--- /dev/null
+++ b/exclude-parameters/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/433ea016/exclude-parameters/src/main/java/org/apache/struts/edit/service/CarModelsService.java
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/java/org/apache/struts/edit/service/CarModelsService.java b/exclude-parameters/src/main/java/org/apache/struts/edit/service/CarModelsService.java
new file mode 100644
index 0000000..e931dbe
--- /dev/null
+++ b/exclude-parameters/src/main/java/org/apache/struts/edit/service/CarModelsService.java
@@ -0,0 +1,18 @@
+/**
+ * 
+ */
+package org.apache.struts.edit.service;
+
+/**
+ * Specifies what methods a CarModelService
+ * class must implement to provide information
+ * about car models.
+ * @author bphillips
+ *
+ */
+public interface CarModelsService {
+	
+	
+	String [] getCarModels() ;
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java b/exclude-parameters/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
new file mode 100644
index 0000000..7d7eb20
--- /dev/null
+++ b/exclude-parameters/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
@@ -0,0 +1,22 @@
+package org.apache.struts.edit.service;
+
+/**
+ * Provides information on car models using data hard-coded
+ * in this class.
+ * @author bphillips
+ *
+ */
+public class CarModelsServiceHardCoded implements CarModelsService {
+	
+
+	@Override
+	public String[] getCarModels() {
+		
+		String [] carModelsAvailable = {"Ford","Chrysler","Toyota","Nissan"};
+		
+		return carModelsAvailable ;
+		
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/java/org/apache/struts/edit/service/EditService.java b/exclude-parameters/src/main/java/org/apache/struts/edit/service/EditService.java
new file mode 100644
index 0000000..79d759a
--- /dev/null
+++ b/exclude-parameters/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/433ea016/exclude-parameters/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/exclude-parameters/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
new file mode 100644
index 0000000..b0821fb
--- /dev/null
+++ b/exclude-parameters/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
@@ -0,0 +1,60 @@
+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.setEmail("bphillips@ku.edu");
+		person.setSport("basketball");
+		person.setGender("not sure");
+		person.setResidency("KS");
+		person.setOver21(true);		
+		person.setCarModels( carModels);	
+		person.setPhoneNumber("123-456-9999");
+
+		
+
+	}
+
+	
+	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() );
+		EditServiceInMemory.person.setEmail( personBean.getEmail() );
+		EditServiceInMemory.person.setPhoneNumber( personBean.getPhoneNumber() );
+
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/resources/log4j2.xml b/exclude-parameters/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..d7c09f9
--- /dev/null
+++ b/exclude-parameters/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Logger name="com.opensymphony.xwork2" level="info"/>
+        <Logger name="org.apache.struts2" level="info"/>
+        <Logger name="org.apache.struts2.edit" level="debug"/>
+        <Root level="warn">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml b/exclude-parameters/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
new file mode 100644
index 0000000..0a884ff
--- /dev/null
+++ b/exclude-parameters/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
@@ -0,0 +1,35 @@
+<!DOCTYPE validators PUBLIC
+         "-//Apache Struts//XWork Validator 1.0.3//EN"
+           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
+<validators>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.firstName</param>
+ 	<message>First name is required.</message>
+ </validator>
+  <validator type="requiredstring">
+ 	<param name="fieldname">personBean.lastName</param>
+ 	<message>Last name is required.</message>
+ </validator>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.email</param>
+ 	<message>Email address is required.</message>
+ </validator>
+ <validator type="email">
+ 	<param name="fieldname">personBean.email</param>
+ 	<message>Email address not valid.</message>
+ </validator>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.phoneNumber</param>
+ 	<message>Phone number is required.</message>
+ </validator>
+<validator type="regex">
+	<param name="fieldname">personBean.phoneNumber</param>
+	<param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>
+	<message>Phone number must be entered as 999-999-9999.</message>
+</validator>
+<validator type="fieldexpression">
+	<param name="fieldname">personBean.carModels</param>
+	<param name="expression"><![CDATA[personBean.carModels.length > 0]]></param>
+	<message>You must select at least one car model.</message>
+</validator>
+</validators>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude-parameters/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/exclude-parameters/src/main/resources/org/apache/struts/edit/action/EditAction.properties
new file mode 100644
index 0000000..1b36d51
--- /dev/null
+++ b/exclude-parameters/src/main/resources/org/apache/struts/edit/action/EditAction.properties
@@ -0,0 +1,10 @@
+personBean.firstName=First name
+personBean.lastName=Last name
+personBean.email=Email address
+personBean.phoneNumber=Phone number (999-999-9999)
+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/433ea016/exclude-parameters/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/resources/struts.xml b/exclude-parameters/src/main/resources/struts.xml
new file mode 100644
index 0000000..f0ee62d
--- /dev/null
+++ b/exclude-parameters/src/main/resources/struts.xml
@@ -0,0 +1,42 @@
+<?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" />
+
+	<package name="basicstruts2" extends="struts-default" >
+	
+	    <interceptors>
+	 		<interceptor-stack name="appDefault">
+	        	 <interceptor-ref name="defaultStack">
+	      			<param name="exception.logEnabled">true</param>
+	      			<param name="exception.logLevel">ERROR</param>
+	      			<param name="params.excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*,submit</param>
+	   			</interceptor-ref>
+	 	    </interceptor-stack>
+		</interceptors>
+		
+		<default-interceptor-ref name="appDefault" />
+
+        <!-- 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="input">/edit.jsp</result>
+	    	<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/433ea016/exclude-parameters/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/webapp/META-INF/MANIFEST.MF b/exclude-parameters/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/exclude-parameters/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/433ea016/exclude-parameters/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/webapp/WEB-INF/web.xml b/exclude-parameters/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..3e29883
--- /dev/null
+++ b/exclude-parameters/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>Exclude Parameters</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/433ea016/exclude-parameters/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/webapp/edit.jsp b/exclude-parameters/src/main/webapp/edit.jsp
new file mode 100644
index 0000000..67a9901
--- /dev/null
+++ b/exclude-parameters/src/main/webapp/edit.jsp
@@ -0,0 +1,30 @@
+<%@ 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:textfield key="personBean.email" />
+<s:textfield key="personBean.phoneNumber" />
+<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/433ea016/exclude-parameters/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/webapp/index.jsp b/exclude-parameters/src/main/webapp/index.jsp
new file mode 100644
index 0000000..88209d8
--- /dev/null
+++ b/exclude-parameters/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/433ea016/exclude-parameters/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/exclude-parameters/src/main/webapp/thankyou.jsp b/exclude-parameters/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..5fa306f
--- /dev/null
+++ b/exclude-parameters/src/main/webapp/thankyou.jsp
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/README.txt
----------------------------------------------------------------------
diff --git a/exclude_parameters/README.txt b/exclude_parameters/README.txt
deleted file mode 100644
index a026815..0000000
--- a/exclude_parameters/README.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Exclude Params 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/exclude_parameters/index.action.
-
-You should see a web page with Welcome to Struts 2!
-
-The application writes log messages to the console.  In Tomcat the 
-log messages can be found in catalina.out ([tomcat home]/logs).
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/pom.xml
----------------------------------------------------------------------
diff --git a/exclude_parameters/pom.xml b/exclude_parameters/pom.xml
deleted file mode 100644
index 3d7ea88..0000000
--- a/exclude_parameters/pom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>exclude_parameters</artifactId>
-
-  <name>exclude_parameters</name>
-  
-     <description>Struts 2 example application for the
-  exclude parameters getting started tutorial</description>
-
-  <packaging>war</packaging>
-  
-  	<build>
-		<finalName>exclude_parameters</finalName>
-	</build>
-	
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/java/org/apache/struts/edit/action/EditAction.java b/exclude_parameters/src/main/java/org/apache/struts/edit/action/EditAction.java
deleted file mode 100644
index 0383bbc..0000000
--- a/exclude_parameters/src/main/java/org/apache/struts/edit/action/EditAction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.apache.struts.edit.action;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.Preparable;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.struts.edit.model.Person;
-import org.apache.struts.edit.model.State;
-import org.apache.struts.edit.service.CarModelsService;
-import org.apache.struts.edit.service.CarModelsServiceHardCoded;
-import org.apache.struts.edit.service.EditService;
-import org.apache.struts.edit.service.EditServiceInMemory;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Acts as a controller to handle actions
- * related to editing a Person.
- * @author bruce phillips
- *
- */
-public class EditAction extends ActionSupport implements Preparable {
-
-	private static Logger log = LogManager.getLogger(EditAction.class);
-	private static final long serialVersionUID = 1L;
-	
-	private EditService editService = new EditServiceInMemory();
-	private CarModelsService carModelsService = new CarModelsServiceHardCoded() ;
-	
-	private Person personBean;
-	private String [] sports = {"football", "baseball", "basketball" };
-	private String [] genders = {"male", "female", "not sure" };
-	private List<State> states ;
-	private String [] carModelsAvailable ;
-
-	@Override
-	public void prepare() throws Exception {
-		log.info("In prepare method...");
-		carModelsAvailable = carModelsService.getCarModels() ;
-		setPersonBean( editService.getPerson() );
-	}
-
-	public void prepareExecute() {
-		log.info("In prepareExecute method...");
-	}
-	
-	public String execute() throws Exception {
-		log.info ("In execute method...");
-	    editService.savePerson( getPersonBean() );
-		return SUCCESS;
-	}
-	
-	public void prepareInput() {
-		log.info("In prepareInput method...");
-	}
-	
-	public String input() throws Exception {
-		log.info("In input method...");
-		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<>();
-		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/433ea016/exclude_parameters/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/java/org/apache/struts/edit/model/Person.java b/exclude_parameters/src/main/java/org/apache/struts/edit/model/Person.java
deleted file mode 100644
index 2d127eb..0000000
--- a/exclude_parameters/src/main/java/org/apache/struts/edit/model/Person.java
+++ /dev/null
@@ -1,121 +0,0 @@
-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;
-    private String email;
-    private String phoneNumber;
-   
- 
-
-    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() ) + " | " +
-        " Email: " + getEmail() + " | " +
-        " Phone: " + getPhoneNumber();
-        
-        
-    }
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setPhoneNumber(String phoneNumber) {
-		this.phoneNumber = phoneNumber;
-	}
-
-	public String getPhoneNumber() {
-		return phoneNumber;
-	}
-
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/java/org/apache/struts/edit/model/State.java b/exclude_parameters/src/main/java/org/apache/struts/edit/model/State.java
deleted file mode 100644
index bb927e1..0000000
--- a/exclude_parameters/src/main/java/org/apache/struts/edit/model/State.java
+++ /dev/null
@@ -1,39 +0,0 @@
-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/433ea016/exclude_parameters/src/main/java/org/apache/struts/edit/service/CarModelsService.java
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/java/org/apache/struts/edit/service/CarModelsService.java b/exclude_parameters/src/main/java/org/apache/struts/edit/service/CarModelsService.java
deleted file mode 100644
index e931dbe..0000000
--- a/exclude_parameters/src/main/java/org/apache/struts/edit/service/CarModelsService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * 
- */
-package org.apache.struts.edit.service;
-
-/**
- * Specifies what methods a CarModelService
- * class must implement to provide information
- * about car models.
- * @author bphillips
- *
- */
-public interface CarModelsService {
-	
-	
-	String [] getCarModels() ;
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java b/exclude_parameters/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
deleted file mode 100644
index 7d7eb20..0000000
--- a/exclude_parameters/src/main/java/org/apache/struts/edit/service/CarModelsServiceHardCoded.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.apache.struts.edit.service;
-
-/**
- * Provides information on car models using data hard-coded
- * in this class.
- * @author bphillips
- *
- */
-public class CarModelsServiceHardCoded implements CarModelsService {
-	
-
-	@Override
-	public String[] getCarModels() {
-		
-		String [] carModelsAvailable = {"Ford","Chrysler","Toyota","Nissan"};
-		
-		return carModelsAvailable ;
-		
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/java/org/apache/struts/edit/service/EditService.java b/exclude_parameters/src/main/java/org/apache/struts/edit/service/EditService.java
deleted file mode 100644
index f52e053..0000000
--- a/exclude_parameters/src/main/java/org/apache/struts/edit/service/EditService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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/433ea016/exclude_parameters/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/exclude_parameters/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
deleted file mode 100644
index 8fd35e2..0000000
--- a/exclude_parameters/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
+++ /dev/null
@@ -1,60 +0,0 @@
-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.setEmail("bphillips@ku.edu");
-		person.setSport("basketball");
-		person.setGender("not sure");
-		person.setResidency("KS");
-		person.setOver21(true);		
-		person.setCarModels( carModels);	
-		person.setPhoneNumber("123-456-9999");
-
-		
-
-	}
-
-	
-	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() );
-		EditServiceInMemory.person.setEmail( personBean.getEmail() );
-		EditServiceInMemory.person.setPhoneNumber( personBean.getPhoneNumber() );
-
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/resources/log4j2.xml b/exclude_parameters/src/main/resources/log4j2.xml
deleted file mode 100644
index d7c09f9..0000000
--- a/exclude_parameters/src/main/resources/log4j2.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Configuration>
-    <Appenders>
-        <Console name="STDOUT" target="SYSTEM_OUT">
-            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
-        </Console>
-    </Appenders>
-    <Loggers>
-        <Logger name="com.opensymphony.xwork2" level="info"/>
-        <Logger name="org.apache.struts2" level="info"/>
-        <Logger name="org.apache.struts2.edit" level="debug"/>
-        <Root level="warn">
-            <AppenderRef ref="STDOUT"/>
-        </Root>
-    </Loggers>
-</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml b/exclude_parameters/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
deleted file mode 100644
index 0a884ff..0000000
--- a/exclude_parameters/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE validators PUBLIC
-         "-//Apache Struts//XWork Validator 1.0.3//EN"
-           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-<validators>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.firstName</param>
- 	<message>First name is required.</message>
- </validator>
-  <validator type="requiredstring">
- 	<param name="fieldname">personBean.lastName</param>
- 	<message>Last name is required.</message>
- </validator>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.email</param>
- 	<message>Email address is required.</message>
- </validator>
- <validator type="email">
- 	<param name="fieldname">personBean.email</param>
- 	<message>Email address not valid.</message>
- </validator>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.phoneNumber</param>
- 	<message>Phone number is required.</message>
- </validator>
-<validator type="regex">
-	<param name="fieldname">personBean.phoneNumber</param>
-	<param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>
-	<message>Phone number must be entered as 999-999-9999.</message>
-</validator>
-<validator type="fieldexpression">
-	<param name="fieldname">personBean.carModels</param>
-	<param name="expression"><![CDATA[personBean.carModels.length > 0]]></param>
-	<message>You must select at least one car model.</message>
-</validator>
-</validators>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/exclude_parameters/src/main/resources/org/apache/struts/edit/action/EditAction.properties
deleted file mode 100644
index 83f400a..0000000
--- a/exclude_parameters/src/main/resources/org/apache/struts/edit/action/EditAction.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-personBean.firstName=First name
-personBean.lastName=Last name
-personBean.email=Email address
-personBean.phoneNumber=Phone number (999-999-9999)
-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/433ea016/exclude_parameters/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/resources/struts.xml b/exclude_parameters/src/main/resources/struts.xml
deleted file mode 100644
index f0ee62d..0000000
--- a/exclude_parameters/src/main/resources/struts.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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" />
-
-	<package name="basicstruts2" extends="struts-default" >
-	
-	    <interceptors>
-	 		<interceptor-stack name="appDefault">
-	        	 <interceptor-ref name="defaultStack">
-	      			<param name="exception.logEnabled">true</param>
-	      			<param name="exception.logLevel">ERROR</param>
-	      			<param name="params.excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*,submit</param>
-	   			</interceptor-ref>
-	 	    </interceptor-stack>
-		</interceptors>
-		
-		<default-interceptor-ref name="appDefault" />
-
-        <!-- 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="input">/edit.jsp</result>
-	    	<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/433ea016/exclude_parameters/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/webapp/META-INF/MANIFEST.MF b/exclude_parameters/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/exclude_parameters/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exclude_parameters/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/webapp/WEB-INF/web.xml b/exclude_parameters/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 3e29883..0000000
--- a/exclude_parameters/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Exclude Parameters</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/433ea016/exclude_parameters/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/webapp/edit.jsp b/exclude_parameters/src/main/webapp/edit.jsp
deleted file mode 100644
index 67a9901..0000000
--- a/exclude_parameters/src/main/webapp/edit.jsp
+++ /dev/null
@@ -1,30 +0,0 @@
-<%@ 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:textfield key="personBean.email" />
-<s:textfield key="personBean.phoneNumber" />
-<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/433ea016/exclude_parameters/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/webapp/index.jsp b/exclude_parameters/src/main/webapp/index.jsp
deleted file mode 100644
index 88209d8..0000000
--- a/exclude_parameters/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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/433ea016/exclude_parameters/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/exclude_parameters/src/main/webapp/thankyou.jsp b/exclude_parameters/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 5fa306f..0000000
--- a/exclude_parameters/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/README.txt
----------------------------------------------------------------------
diff --git a/form-processing/README.txt b/form-processing/README.txt
new file mode 100644
index 0000000..70e168f
--- /dev/null
+++ b/form-processing/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Processing Forms 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/form-processing/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/pom.xml
----------------------------------------------------------------------
diff --git a/form-processing/pom.xml b/form-processing/pom.xml
new file mode 100644
index 0000000..d355876
--- /dev/null
+++ b/form-processing/pom.xml
@@ -0,0 +1,22 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+    <artifactId>form-processing</artifactId>
+
+    <name>Form Processing</name>
+
+    <description>Form processing example application for the Struts 2 getting started tutorials</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>form-processing</finalName>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/form-processing/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/form-processing/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
new file mode 100644
index 0000000..1285010
--- /dev/null
+++ b/form-processing/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
@@ -0,0 +1,79 @@
+package org.apache.struts.helloworld.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.helloworld.model.MessageStore;
+
+/**
+ * Acts as a Struts 2 controller that responds
+ * to a user action by setting the value
+ * of the Message model class, and returns a String 
+ * result.
+ * @author Bruce Phillips
+ *
+ */
+public class HelloWorldAction extends ActionSupport {
+
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * The model class that stores the message
+	 * to display in the view.
+	 */
+	private MessageStore messageStore;
+	
+	private static int helloCount = 0;
+	
+	public int getHelloCount() {
+		return helloCount;
+	}
+
+	public void setHelloCount(int helloCount) {
+		HelloWorldAction.helloCount = helloCount;
+	}
+	
+	private String userName;
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	/*
+	 * Creates the MessageStore model object, 
+	 * increase helloCount by 1 and 
+	 * returns success.  The MessageStore model
+	 * object will be available to the view.
+	 * (non-Javadoc)
+	 * @see com.opensymphony.xwork2.ActionSupport#execute()
+	 */
+	public String execute() throws Exception {
+		
+		messageStore = new MessageStore() ;
+		
+		//Action included a query string parameter of userName
+		//or a form field with name of userName
+		if (userName != null) {
+			
+			messageStore.setMessage( messageStore.getMessage() + " " + userName);
+			
+		}
+		
+		helloCount++;
+		
+		return SUCCESS;
+	}
+
+	public MessageStore getMessageStore() {
+		return messageStore;
+	}
+
+	public void setMessageStore(MessageStore messageStore) {
+		this.messageStore = messageStore;
+	}
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/form-processing/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/form-processing/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
new file mode 100644
index 0000000..b7fceeb
--- /dev/null
+++ b/form-processing/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
@@ -0,0 +1,31 @@
+package org.apache.struts.helloworld.model;
+
+/**
+ * Model class that stores a message.
+ * @author Bruce Phillips
+ *
+ */
+public class MessageStore {
+	
+	private String message;
+	
+	public MessageStore() {
+		
+		setMessage("Hello Struts User");
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+	public String toString() {
+		
+		return message + " (from toString)";
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/form-processing/src/main/java/org/apache/struts/register/action/Register.java b/form-processing/src/main/java/org/apache/struts/register/action/Register.java
new file mode 100644
index 0000000..82cde07
--- /dev/null
+++ b/form-processing/src/main/java/org/apache/struts/register/action/Register.java
@@ -0,0 +1,39 @@
+package org.apache.struts.register.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.register.model.Person;
+
+/**
+ * Acts as a controller to handle actions
+ * related to registering a user.
+ * @author bruce phillips
+ *
+ */
+public class Register extends ActionSupport {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private Person personBean;
+
+
+	public String execute() throws Exception {
+		
+		//call Service class to store personBean's state in database
+		
+		return SUCCESS;
+		
+	}
+	
+	public Person getPersonBean() {
+		
+		return personBean;
+		
+	}
+	
+	public void setPersonBean(Person person) {
+		
+		personBean = person;
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/form-processing/src/main/java/org/apache/struts/register/model/Person.java b/form-processing/src/main/java/org/apache/struts/register/model/Person.java
new file mode 100644
index 0000000..3020bbb
--- /dev/null
+++ b/form-processing/src/main/java/org/apache/struts/register/model/Person.java
@@ -0,0 +1,62 @@
+package org.apache.struts.register.model;
+
+
+/**
+ * Models a Person who registers.
+ * @author bruce phillips
+ *
+ */
+public class Person
+{
+    private String firstName;
+    private String lastName;
+    private String email;
+    private int age;
+
+    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 String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    public int getAge()
+    {
+        return age;
+    }
+
+    public void setAge( int age)
+    {
+        this.age = age;
+    }
+
+
+    public String toString()
+    {
+        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
+        " Email:      " + getEmail() + " Age:      " + getAge() ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/form-processing/src/main/resources/log4j.dtd b/form-processing/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/form-processing/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/433ea016/form-processing/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/form-processing/src/main/resources/log4j.xml b/form-processing/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/form-processing/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/433ea016/form-processing/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/form-processing/src/main/resources/struts.xml b/form-processing/src/main/resources/struts.xml
new file mode 100644
index 0000000..e46b594
--- /dev/null
+++ b/form-processing/src/main/resources/struts.xml
@@ -0,0 +1,31 @@
+<?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" />
+
+	<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>
+		
+		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
+		If the result returned by the execute method is success render the HelloWorld.jsp -->
+		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
+			<result name="success">/HelloWorld.jsp</result>
+		</action>
+		
+	  <action name="register" class="org.apache.struts.register.action.Register" 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/433ea016/form-processing/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/form-processing/src/main/webapp/HelloWorld.jsp b/form-processing/src/main/webapp/HelloWorld.jsp
new file mode 100644
index 0000000..286a6ab
--- /dev/null
+++ b/form-processing/src/main/webapp/HelloWorld.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>Hello World!</title>
+</head>
+<body>
+<h2><s:property value="messageStore.message" /></h2>
+<p>I've said hello <s:property value="helloCount" /> times!</p>
+<p><s:property value="messageStore" /></p>
+<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/form-processing/src/main/webapp/META-INF/MANIFEST.MF b/form-processing/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/form-processing/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/433ea016/form-processing/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/form-processing/src/main/webapp/WEB-INF/web.xml b/form-processing/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..84fe881
--- /dev/null
+++ b/form-processing/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>Form_Processing_Struts2_Mvn</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/433ea016/form-processing/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/form-processing/src/main/webapp/index.jsp b/form-processing/src/main/webapp/index.jsp
new file mode 100644
index 0000000..091f505
--- /dev/null
+++ b/form-processing/src/main/webapp/index.jsp
@@ -0,0 +1,30 @@
+<%@ 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>Basic Struts 2 Application - Welcome</title>
+</head>
+<body>
+<h1>Welcome To Struts 2!</h1>
+<p><a href="<s:url action='hello'/>">Hello World</a></p>
+<s:url action="hello" var="helloLink">
+  <s:param name="userName">Bruce Phillips</s:param>
+</s:url>
+<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
+
+<p>Get your own personal hello by filling out and submitting this form.</p>
+
+<s:form action="hello">
+
+	<s:textfield name="userName" label="Your name" />
+	
+	<s:submit value="Submit" />
+
+</s:form>
+
+<p><a href="register.jsp">Please register</a> for our prize drawing.</p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/form-processing/src/main/webapp/register.jsp b/form-processing/src/main/webapp/register.jsp
new file mode 100644
index 0000000..0adac76
--- /dev/null
+++ b/form-processing/src/main/webapp/register.jsp
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Register</title>
+</head>
+<body>
+<h3>Register for a prize by completing this form.</h3>
+
+<s:form action="register">
+
+ 	  <s:textfield name="personBean.firstName" label="First name" />
+ 	  <s:textfield  name="personBean.lastName" label="Last name" />
+ 	  <s:textfield name="personBean.email"  label ="Email"/>  
+ 	  <s:textfield name="personBean.age"  label="Age"  />
+ 	  
+   	  <s:submit/>
+   	  
+</s:form>	
+ 
+</body>
+</html>
\ No newline at end of file


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes_override/README.txt
----------------------------------------------------------------------
diff --git a/themes_override/README.txt b/themes_override/README.txt
deleted file mode 100644
index 2ef262e..0000000
--- a/themes_override/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-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/433ea016/themes_override/pom.xml
----------------------------------------------------------------------
diff --git a/themes_override/pom.xml b/themes_override/pom.xml
deleted file mode 100644
index 102af8d..0000000
--- a/themes_override/pom.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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>
-    <parent>
-        <groupId>struts.apache.org</groupId>
-        <artifactId>struts2examples</artifactId>
-        <version>1.0.0</version>
-    </parent>
-
-    <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>
-
-    <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/433ea016/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
deleted file mode 100644
index aa07ff2..0000000
--- a/themes_override/src/main/java/org/apache/struts/edit/action/EditAction.java
+++ /dev/null
@@ -1,96 +0,0 @@
-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/433ea016/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
deleted file mode 100644
index 392a8de..0000000
--- a/themes_override/src/main/java/org/apache/struts/edit/model/Person.java
+++ /dev/null
@@ -1,96 +0,0 @@
-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/433ea016/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
deleted file mode 100644
index bb927e1..0000000
--- a/themes_override/src/main/java/org/apache/struts/edit/model/State.java
+++ /dev/null
@@ -1,39 +0,0 @@
-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/433ea016/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
deleted file mode 100644
index 79d759a..0000000
--- a/themes_override/src/main/java/org/apache/struts/edit/service/EditService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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/433ea016/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
deleted file mode 100644
index 7638152..0000000
--- a/themes_override/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-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/433ea016/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
deleted file mode 100644
index 1aabd96..0000000
--- a/themes_override/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/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
deleted file mode 100644
index 2100cb2..0000000
--- a/themes_override/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/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
deleted file mode 100644
index 0f08667..0000000
--- a/themes_override/src/main/resources/org/apache/struts/edit/action/EditAction.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-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/433ea016/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
deleted file mode 100644
index 5c37a7b..0000000
--- a/themes_override/src/main/resources/struts.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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/433ea016/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
deleted file mode 100644
index 254272e..0000000
--- a/themes_override/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes_override/src/main/webapp/WEB-INF/template/simple/file.ftl
----------------------------------------------------------------------
diff --git a/themes_override/src/main/webapp/WEB-INF/template/simple/file.ftl b/themes_override/src/main/webapp/WEB-INF/template/simple/file.ftl
deleted file mode 100644
index c7b7a83..0000000
--- a/themes_override/src/main/webapp/WEB-INF/template/simple/file.ftl
+++ /dev/null
@@ -1,48 +0,0 @@
-<#--
-/*
- * $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


[15/16] struts-examples git commit: Remove developers section from pom.xml and add licenses, organization, scm and issueManagement instead

Posted by jo...@apache.org.
Remove developers section from pom.xml and add licenses, organization, scm and issueManagement instead


Project: http://git-wip-us.apache.org/repos/asf/struts-examples/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts-examples/commit/d75eb7af
Tree: http://git-wip-us.apache.org/repos/asf/struts-examples/tree/d75eb7af
Diff: http://git-wip-us.apache.org/repos/asf/struts-examples/diff/d75eb7af

Branch: refs/heads/master
Commit: d75eb7afb5142643bcaa85a8e3e70d55dbde4f56
Parents: 433ea01
Author: Johannes Geppert <jo...@apache.org>
Authored: Sun Jun 14 12:43:00 2015 +0200
Committer: Johannes Geppert <jo...@apache.org>
Committed: Sun Jun 14 12:43:00 2015 +0200

----------------------------------------------------------------------
 pom.xml | 38 ++++++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts-examples/blob/d75eb7af/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e3c4943..96f3ff9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,24 +12,38 @@
         go with the Struts 2 Getting Started series of tutorials.
     </description>
 
+    <licenses>
+        <license>
+            <name>The Apache Software License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+            <distribution>repo</distribution>
+            <comments/>
+        </license>
+    </licenses>
+
+    <organization>
+        <name>Apache Software Foundation</name>
+        <url>http://www.apache.org</url>
+    </organization>
+
+    <scm>
+        <connection>scm:git:git://git.apache.org/struts.git</connection>
+        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/struts-examples.git</developerConnection>
+        <url>http://git.apache.org/struts-examples.git</url>
+        <tag>HEAD</tag>
+    </scm>
+
+    <issueManagement>
+        <system>JIRA</system>
+        <url>https://issues.apache.org/jira/browse/WW</url>
+    </issueManagement>
+
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <struts2.version>2.5-SNAPSHOT</struts2.version>
         <log4j2.version>2.3</log4j2.version>
     </properties>
 
-    <developers>
-        <developer>
-            <id>bphillips</id>
-            <name>Bruce Phillips</name>
-            <email>bphillips@ku.edu</email>
-            <organization>Apache Struts 2 Committer</organization>
-            <roles>
-                <role>Committer</role>
-            </roles>
-        </developer>
-    </developers>
-
     <repositories>
         <repository>
             <id>apache.snapshots</id>


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/preparable_interface/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/webapp/edit.jsp b/preparable_interface/src/main/webapp/edit.jsp
deleted file mode 100644
index 67a9901..0000000
--- a/preparable_interface/src/main/webapp/edit.jsp
+++ /dev/null
@@ -1,30 +0,0 @@
-<%@ 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:textfield key="personBean.email" />
-<s:textfield key="personBean.phoneNumber" />
-<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/433ea016/preparable_interface/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/webapp/index.jsp b/preparable_interface/src/main/webapp/index.jsp
deleted file mode 100644
index 88209d8..0000000
--- a/preparable_interface/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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/433ea016/preparable_interface/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/preparable_interface/src/main/webapp/thankyou.jsp b/preparable_interface/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 5fa306f..0000000
--- a/preparable_interface/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/restful2actionmapper/pom.xml
----------------------------------------------------------------------
diff --git a/restful2actionmapper/pom.xml b/restful2actionmapper/pom.xml
index eadf8cc..cff5924 100644
--- a/restful2actionmapper/pom.xml
+++ b/restful2actionmapper/pom.xml
@@ -1,20 +1,26 @@
 <?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
+<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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
 
-	<artifactId>restful2actionmapper</artifactId>
-	<packaging>war</packaging>
-	<name>REST to Action Mapper Example Application</name>
-	<description>Example of using Rest style URLs for 
-  Struts 2 Getting Started tutorials</description>
-	<build>
-		<finalName>reststyleactionmapper</finalName>
-	</build>
+    <artifactId>restful2actionmapper</artifactId>
+
+    <packaging>war</packaging>
+
+    <name>REST to Action Mapper Example Application</name>
+
+    <description>Example of using Rest style URLs for
+        Struts 2 Getting Started tutorials
+    </description>
+
+    <build>
+        <finalName>reststyleactionmapper</finalName>
+    </build>
 
 </project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring-struts/README.txt
----------------------------------------------------------------------
diff --git a/spring-struts/README.txt b/spring-struts/README.txt
new file mode 100644
index 0000000..c9b1d9a
--- /dev/null
+++ b/spring-struts/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Struts 2 Spring 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/spring-struts/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring-struts/pom.xml
----------------------------------------------------------------------
diff --git a/spring-struts/pom.xml b/spring-struts/pom.xml
new file mode 100644
index 0000000..0531b3a
--- /dev/null
+++ b/spring-struts/pom.xml
@@ -0,0 +1,29 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>spring-struts</artifactId>
+
+    <name>Struts2 with Spring Integration</name>
+
+    <packaging>war</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-spring-plugin</artifactId>
+            <version>${struts2.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <finalName>spring-struts</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring-struts/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/java/org/apache/struts/edit/action/EditAction.java b/spring-struts/src/main/java/org/apache/struts/edit/action/EditAction.java
new file mode 100644
index 0000000..8cd09f5
--- /dev/null
+++ b/spring-struts/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -0,0 +1,106 @@
+package org.apache.struts.edit.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.edit.model.Person;
+import org.apache.struts.edit.model.State;
+import org.apache.struts.edit.service.EditService;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 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 ;
+	
+	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;
+	}
+
+
+	public EditService getEditService() {
+		return editService;
+	}
+
+
+	public void setEditService(EditService editService) {
+		
+		this.editService = editService;
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring-struts/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/java/org/apache/struts/edit/model/Person.java b/spring-struts/src/main/java/org/apache/struts/edit/model/Person.java
new file mode 100644
index 0000000..392a8de
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/java/org/apache/struts/edit/model/State.java b/spring-struts/src/main/java/org/apache/struts/edit/model/State.java
new file mode 100644
index 0000000..bb927e1
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/java/org/apache/struts/edit/service/EditService.java b/spring-struts/src/main/java/org/apache/struts/edit/service/EditService.java
new file mode 100644
index 0000000..a5b347b
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/spring-struts/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
new file mode 100644
index 0000000..7638152
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/resources/log4j.dtd b/spring-struts/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/resources/log4j.xml b/spring-struts/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/spring-struts/src/main/resources/org/apache/struts/edit/action/EditAction.properties
new file mode 100644
index 0000000..0f08667
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/resources/struts.xml b/spring-struts/src/main/resources/struts.xml
new file mode 100644
index 0000000..30c5e5d
--- /dev/null
+++ b/spring-struts/src/main/resources/struts.xml
@@ -0,0 +1,29 @@
+<?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" />
+
+	<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/433ea016/spring-struts/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/webapp/META-INF/MANIFEST.MF b/spring-struts/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/webapp/WEB-INF/applicationContext.xml
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/webapp/WEB-INF/applicationContext.xml b/spring-struts/src/main/webapp/WEB-INF/applicationContext.xml
new file mode 100644
index 0000000..7f3f278
--- /dev/null
+++ b/spring-struts/src/main/webapp/WEB-INF/applicationContext.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+            http://www.springframework.org/schema/beans
+            http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+<bean id="editService" class="org.apache.struts.edit.service.EditServiceInMemory" />
+
+</beans>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring-struts/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/webapp/WEB-INF/web.xml b/spring-struts/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..e8cb9ce
--- /dev/null
+++ b/spring-struts/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,25 @@
+<?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>Spring Struts 2</display-name>
+	
+	<welcome-file-list>
+		<welcome-file>index.jsp</welcome-file>
+	</welcome-file-list>
+	
+	<listener>
+		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+	</listener>
+
+	<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/433ea016/spring-struts/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/webapp/edit.jsp b/spring-struts/src/main/webapp/edit.jsp
new file mode 100644
index 0000000..0cd05e4
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/webapp/index.jsp b/spring-struts/src/main/webapp/index.jsp
new file mode 100644
index 0000000..88209d8
--- /dev/null
+++ b/spring-struts/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/433ea016/spring-struts/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/spring-struts/src/main/webapp/thankyou.jsp b/spring-struts/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..5fa306f
--- /dev/null
+++ b/spring-struts/src/main/webapp/thankyou.jsp
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring_struts/README.txt
----------------------------------------------------------------------
diff --git a/spring_struts/README.txt b/spring_struts/README.txt
deleted file mode 100644
index cb5053d..0000000
--- a/spring_struts/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Struts 2 Spring 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/spring_struts/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring_struts/pom.xml
----------------------------------------------------------------------
diff --git a/spring_struts/pom.xml b/spring_struts/pom.xml
deleted file mode 100644
index 6ba3a6b..0000000
--- a/spring_struts/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>spring_struts</artifactId>
-
-  <name>spring_struts</name>
-
-  <packaging>war</packaging>
-  
-  <dependencies>
-  		<dependency>
-			<groupId>org.apache.struts</groupId>
-			<artifactId>struts2-spring-plugin</artifactId>
-			<version>${struts2.version}</version>
-		</dependency>
-  </dependencies>
-      <build>
-		<finalName>spring_struts</finalName>
-	</build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring_struts/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/java/org/apache/struts/edit/action/EditAction.java b/spring_struts/src/main/java/org/apache/struts/edit/action/EditAction.java
deleted file mode 100644
index c157d9e..0000000
--- a/spring_struts/src/main/java/org/apache/struts/edit/action/EditAction.java
+++ /dev/null
@@ -1,108 +0,0 @@
-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 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 ;
-	
-	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;
-	}
-
-
-	public EditService getEditService() {
-		return editService;
-	}
-
-
-	public void setEditService(EditService editService) {
-		
-		this.editService = editService;
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring_struts/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/java/org/apache/struts/edit/model/Person.java b/spring_struts/src/main/java/org/apache/struts/edit/model/Person.java
deleted file mode 100644
index 392a8de..0000000
--- a/spring_struts/src/main/java/org/apache/struts/edit/model/Person.java
+++ /dev/null
@@ -1,96 +0,0 @@
-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/433ea016/spring_struts/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/java/org/apache/struts/edit/model/State.java b/spring_struts/src/main/java/org/apache/struts/edit/model/State.java
deleted file mode 100644
index bb927e1..0000000
--- a/spring_struts/src/main/java/org/apache/struts/edit/model/State.java
+++ /dev/null
@@ -1,39 +0,0 @@
-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/433ea016/spring_struts/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/java/org/apache/struts/edit/service/EditService.java b/spring_struts/src/main/java/org/apache/struts/edit/service/EditService.java
deleted file mode 100644
index f52e053..0000000
--- a/spring_struts/src/main/java/org/apache/struts/edit/service/EditService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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/433ea016/spring_struts/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/spring_struts/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
deleted file mode 100644
index 169b1d0..0000000
--- a/spring_struts/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-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/433ea016/spring_struts/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/resources/log4j.dtd b/spring_struts/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/spring_struts/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/spring_struts/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/resources/log4j.xml b/spring_struts/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/spring_struts/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/spring_struts/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/spring_struts/src/main/resources/org/apache/struts/edit/action/EditAction.properties
deleted file mode 100644
index 82869db..0000000
--- a/spring_struts/src/main/resources/org/apache/struts/edit/action/EditAction.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-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/433ea016/spring_struts/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/resources/struts.xml b/spring_struts/src/main/resources/struts.xml
deleted file mode 100644
index 30c5e5d..0000000
--- a/spring_struts/src/main/resources/struts.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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" />
-
-	<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/433ea016/spring_struts/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/webapp/META-INF/MANIFEST.MF b/spring_struts/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/spring_struts/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring_struts/src/main/webapp/WEB-INF/applicationContext.xml
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/webapp/WEB-INF/applicationContext.xml b/spring_struts/src/main/webapp/WEB-INF/applicationContext.xml
deleted file mode 100644
index 7f3f278..0000000
--- a/spring_struts/src/main/webapp/WEB-INF/applicationContext.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="
-            http://www.springframework.org/schema/beans
-            http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-<bean id="editService" class="org.apache.struts.edit.service.EditServiceInMemory" />
-
-</beans>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/spring_struts/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/webapp/WEB-INF/web.xml b/spring_struts/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index e8cb9ce..0000000
--- a/spring_struts/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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>Spring Struts 2</display-name>
-	
-	<welcome-file-list>
-		<welcome-file>index.jsp</welcome-file>
-	</welcome-file-list>
-	
-	<listener>
-		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-	</listener>
-
-	<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/433ea016/spring_struts/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/webapp/edit.jsp b/spring_struts/src/main/webapp/edit.jsp
deleted file mode 100644
index 0cd05e4..0000000
--- a/spring_struts/src/main/webapp/edit.jsp
+++ /dev/null
@@ -1,29 +0,0 @@
-<%@ 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/433ea016/spring_struts/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/webapp/index.jsp b/spring_struts/src/main/webapp/index.jsp
deleted file mode 100644
index 88209d8..0000000
--- a/spring_struts/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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/433ea016/spring_struts/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/spring_struts/src/main/webapp/thankyou.jsp b/spring_struts/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 5fa306f..0000000
--- a/spring_struts/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/themes-override/README.txt
----------------------------------------------------------------------
diff --git a/themes-override/README.txt b/themes-override/README.txt
new file mode 100644
index 0000000..2a1b48c
--- /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/433ea016/themes-override/pom.xml
----------------------------------------------------------------------
diff --git a/themes-override/pom.xml b/themes-override/pom.xml
new file mode 100644
index 0000000..d39a1c9
--- /dev/null
+++ b/themes-override/pom.xml
@@ -0,0 +1,40 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <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>
+
+    <build>
+        <finalName>themes-override</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>8.1.16.v20140903</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/433ea016/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..700b2f5
--- /dev/null
+++ b/themes-override/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -0,0 +1,95 @@
+package org.apache.struts.edit.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+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 java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 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/433ea016/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/433ea016/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/433ea016/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..a5b347b
--- /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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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/433ea016/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


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_xml_validation/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/resources/log4j.dtd b/form_xml_validation/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/form_xml_validation/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/form_xml_validation/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/resources/log4j.xml b/form_xml_validation/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/form_xml_validation/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/form_xml_validation/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml b/form_xml_validation/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
deleted file mode 100644
index bb91b97..0000000
--- a/form_xml_validation/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
-		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-<validators>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.firstName</param>
- 	<message>First name is required.</message>
- </validator>
-  <validator type="requiredstring">
- 	<param name="fieldname">personBean.lastName</param>
- 	<message>Last name is required.</message>
- </validator>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.email</param>
- 	<message>Email address is required.</message>
- </validator>
- <validator type="email">
- 	<param name="fieldname">personBean.email</param>
- 	<message>Email address not valid.</message>
- </validator>
- <validator type="requiredstring">
- 	<param name="fieldname">personBean.phoneNumber</param>
- 	<message>Phone number is required.</message>
- </validator>
-<validator type="regex">
-	<param name="fieldname">personBean.phoneNumber</param>
-	<param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>
-	<message>Phone number must be entered as 999-999-9999.</message>
-</validator>
-<validator type="fieldexpression">
-	<param name="fieldname">personBean.carModels</param>
-	<param name="expression"><![CDATA[personBean.carModels.length > 0]]></param>
-	<message>You must select at least one car model.</message>
-</validator>
-</validators>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_xml_validation/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/form_xml_validation/src/main/resources/org/apache/struts/edit/action/EditAction.properties
deleted file mode 100644
index 83f400a..0000000
--- a/form_xml_validation/src/main/resources/org/apache/struts/edit/action/EditAction.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-personBean.firstName=First name
-personBean.lastName=Last name
-personBean.email=Email address
-personBean.phoneNumber=Phone number (999-999-9999)
-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/433ea016/form_xml_validation/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/resources/struts.xml b/form_xml_validation/src/main/resources/struts.xml
deleted file mode 100644
index 893019d..0000000
--- a/form_xml_validation/src/main/resources/struts.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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" />
-
-	<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="input">/edit.jsp</result>
-	    	<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/433ea016/form_xml_validation/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/webapp/META-INF/MANIFEST.MF b/form_xml_validation/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 5e94951..0000000
--- a/form_xml_validation/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_xml_validation/src/main/webapp/META-INF/context.xml
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/webapp/META-INF/context.xml b/form_xml_validation/src/main/webapp/META-INF/context.xml
deleted file mode 100644
index 047bfdc..0000000
--- a/form_xml_validation/src/main/webapp/META-INF/context.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Context antiJARLocking="true" path="/form_xml_validation"/>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_xml_validation/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/webapp/WEB-INF/web.xml b/form_xml_validation/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 452d0d7..0000000
--- a/form_xml_validation/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>Form XML Validation</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/433ea016/form_xml_validation/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/webapp/edit.jsp b/form_xml_validation/src/main/webapp/edit.jsp
deleted file mode 100644
index 67a9901..0000000
--- a/form_xml_validation/src/main/webapp/edit.jsp
+++ /dev/null
@@ -1,30 +0,0 @@
-<%@ 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:textfield key="personBean.email" />
-<s:textfield key="personBean.phoneNumber" />
-<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/433ea016/form_xml_validation/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/webapp/index.jsp b/form_xml_validation/src/main/webapp/index.jsp
deleted file mode 100644
index 88209d8..0000000
--- a/form_xml_validation/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ 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/433ea016/form_xml_validation/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/form_xml_validation/src/main/webapp/thankyou.jsp b/form_xml_validation/src/main/webapp/thankyou.jsp
deleted file mode 100644
index 5fa306f..0000000
--- a/form_xml_validation/src/main/webapp/thankyou.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
-    pageEncoding="ISO-8859-1"%>
-<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/helloworld/README.txt
----------------------------------------------------------------------
diff --git a/helloworld/README.txt b/helloworld/README.txt
index fdbba31..19d2338 100755
--- a/helloworld/README.txt
+++ b/helloworld/README.txt
@@ -10,7 +10,7 @@ The war file is created in the target sub-folder.
 Copy the war file to your Servlet container (e.g. Tomcat) and 
 then startup the Servlet container.
 
-In a web browser go to:  http://localhost:8080/hello_world/index.action.
+In a web browser go to:  http://localhost:8080/hello-world/index.action.
 
 You should see a web page with Welcome to Struts 2!
 

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/helloworld/pom.xml
----------------------------------------------------------------------
diff --git a/helloworld/pom.xml b/helloworld/pom.xml
index a80e532..ef4ea50 100644
--- a/helloworld/pom.xml
+++ b/helloworld/pom.xml
@@ -1,19 +1,22 @@
 <?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>
-	<parent>
-		<groupId>struts.apache.org</groupId>
-		<artifactId>struts2examples</artifactId>
-		<version>1.0.0</version>
-	</parent>
-	<artifactId>helloworld</artifactId>
-	<packaging>war</packaging>
-	<name>Hello World Struts 2 Example Application</name>
-	<description>Hello world example application for the 
-  Struts 2 Getting Started tutorials</description>
-	<build>
-		<finalName>hello_world</finalName>
-	</build>
+        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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>helloworld</artifactId>
+    <packaging>war</packaging>
+
+    <name>Hello World Struts 2 Example Application</name>
+
+    <description>Hello world example application for the Struts 2 Getting Started tutorials</description>
+
+    <build>
+        <finalName>hello-world</finalName>
+    </build>
 </project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http-session/README.txt
----------------------------------------------------------------------
diff --git a/http-session/README.txt b/http-session/README.txt
new file mode 100644
index 0000000..8689b30
--- /dev/null
+++ b/http-session/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, HTTP Session 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/http-session/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http-session/pom.xml
----------------------------------------------------------------------
diff --git a/http-session/pom.xml b/http-session/pom.xml
new file mode 100644
index 0000000..f5d0a1c
--- /dev/null
+++ b/http-session/pom.xml
@@ -0,0 +1,23 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>http-session</artifactId>
+
+    <name>http-session</name>
+
+    <description>Struts 2 example application for the HTTP Session getting started tutorial</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>http-session</finalName>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http-session/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/http-session/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/http-session/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
new file mode 100644
index 0000000..37660d1
--- /dev/null
+++ b/http-session/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
@@ -0,0 +1,120 @@
+package org.apache.struts.helloworld.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.interceptor.ParameterNameAware;
+import org.apache.struts.helloworld.model.MessageStore;
+import org.apache.struts2.interceptor.SessionAware;
+
+import java.util.Map;
+
+/**
+ * Acts as a Struts 2 controller that responds
+ * to a user action by setting the value
+ * of the Message model class, and returns a String 
+ * result.
+ * @author Bruce Phillips
+ *
+ */
+public class HelloWorldAction extends ActionSupport implements SessionAware, ParameterNameAware {
+
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * The model class that stores the message
+	 * to display in the view.
+	 */
+	private MessageStore messageStore;
+	
+	private Map<String, Object> userSession ;
+	
+	private static final String HELLO_COUNT = "helloCount";
+	
+	
+	
+	private String userName;
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	/*
+	 * Creates the MessageStore model object, 
+	 * increase helloCount stored in the HTTP session by 1 and 
+	 * returns success.  The MessageStore model
+	 * object will be available to the view.
+	 * (non-Javadoc)
+	 * @see com.opensymphony.xwork2.ActionSupport#execute()
+	 */
+	public String execute() throws Exception {
+		
+		messageStore = new MessageStore() ;
+		
+		//Action included a query string parameter of userName
+		//or a form field with name of userName
+		if (userName != null) {
+			
+			messageStore.setMessage( messageStore.getMessage() + " " + userName);
+			
+		}
+		
+		increaseHelloCount();
+		
+		return SUCCESS;
+	}
+	
+	/**
+	 * Increase the value of HELLO_COUNT stored in the user's 
+	 * HTTP session.  
+	 */
+	private void increaseHelloCount() {
+			
+		Integer helloCount = (Integer) userSession.get(HELLO_COUNT);
+		
+		if (helloCount == null ) {
+		
+			helloCount = 1;
+			
+		} else {
+			
+			helloCount++;
+		}
+		
+		userSession.put(HELLO_COUNT, helloCount);
+	
+	}
+
+	public MessageStore getMessageStore() {
+		return messageStore;
+	}
+
+	public void setMessageStore(MessageStore messageStore) {
+		this.messageStore = messageStore;
+	}
+
+	
+	public void setSession(Map<String, Object> session) {
+		
+		userSession = session ;
+
+	}
+	
+	public boolean acceptableParameterName(String parameterName) {
+		
+		boolean allowedParameterName = true ;
+		
+		if ( parameterName.contains("session")  || parameterName.contains("request") ) {
+		
+			allowedParameterName = false ;
+			
+		} 
+		
+		return allowedParameterName;
+	}
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http-session/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/http-session/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/http-session/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
new file mode 100644
index 0000000..b7fceeb
--- /dev/null
+++ b/http-session/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
@@ -0,0 +1,31 @@
+package org.apache.struts.helloworld.model;
+
+/**
+ * Model class that stores a message.
+ * @author Bruce Phillips
+ *
+ */
+public class MessageStore {
+	
+	private String message;
+	
+	public MessageStore() {
+		
+		setMessage("Hello Struts User");
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+	public String toString() {
+		
+		return message + " (from toString)";
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http-session/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/http-session/src/main/resources/log4j.dtd b/http-session/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/http-session/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/433ea016/http-session/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/http-session/src/main/resources/log4j.xml b/http-session/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/http-session/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/433ea016/http-session/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/http-session/src/main/resources/struts.xml b/http-session/src/main/resources/struts.xml
new file mode 100644
index 0000000..b882764
--- /dev/null
+++ b/http-session/src/main/resources/struts.xml
@@ -0,0 +1,45 @@
+<?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" />
+
+	<package name="basicstruts2" extends="struts-default">
+	
+		<!-- setup the default-stack exception mapping interceptor 
+ 		so that any exceptions not caught by this application 
+ 		will be logged and then handled by the global exception 
+ 		mapping 
+ 		also modify the params interceptor so it excludes 
+ 		request attributes that start with session or request-->
+ 		<interceptors>
+	 		<interceptor-stack name="appDefault">
+	        	 <interceptor-ref name="defaultStack">
+	      			<param name="exception.logEnabled">true</param>
+	      			<param name="exception.logLevel">ERROR</param>
+	      			<param name="params.excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
+	   			</interceptor-ref>
+	 	    </interceptor-stack>
+		</interceptors>
+		
+		<default-interceptor-ref name="appDefault" />
+
+        <!-- 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>
+		
+		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
+		If the result returned by the execute method is success render the HelloWorld.jsp -->
+		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
+			<result name="success">/HelloWorld.jsp</result>
+		</action>
+
+	</package>
+
+</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http-session/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/http-session/src/main/webapp/HelloWorld.jsp b/http-session/src/main/webapp/HelloWorld.jsp
new file mode 100644
index 0000000..c946804
--- /dev/null
+++ b/http-session/src/main/webapp/HelloWorld.jsp
@@ -0,0 +1,17 @@
+<%@ 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>Hello World!</title>
+</head>
+<body>
+<h2><s:property value="messageStore.message" /></h2>
+<p>I've said hello to you <s:property value="#session.helloCount" /> times!</p>
+<p><s:property value="messageStore" /></p>
+<hr />
+<p><a href='<s:url action="index" />'>Return Home</a></p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http-session/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/http-session/src/main/webapp/META-INF/MANIFEST.MF b/http-session/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/http-session/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/433ea016/http-session/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/http-session/src/main/webapp/WEB-INF/web.xml b/http-session/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..c80f689
--- /dev/null
+++ b/http-session/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>HTTP Session 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/433ea016/http-session/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/http-session/src/main/webapp/index.jsp b/http-session/src/main/webapp/index.jsp
new file mode 100644
index 0000000..f1a5444
--- /dev/null
+++ b/http-session/src/main/webapp/index.jsp
@@ -0,0 +1,28 @@
+<%@ 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>Basic Struts 2 Application - Welcome</title>
+</head>
+<body>
+<h1>Welcome To Struts 2!</h1>
+<p><a href="<s:url action='hello'/>">Hello World</a></p>
+<s:url action="hello" var="helloLink">
+  <s:param name="userName">Bruce Phillips</s:param>
+</s:url>
+<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
+
+<p>Get your own personal hello by filling out and submitting this form.</p>
+
+<s:form action="hello">
+
+	<s:textfield name="userName" label="%{'Your name'}" />
+	
+	<s:submit value="%{'Submit'}" />
+
+</s:form>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http_session/README.txt
----------------------------------------------------------------------
diff --git a/http_session/README.txt b/http_session/README.txt
deleted file mode 100644
index 896890b..0000000
--- a/http_session/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, HTTP Session 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/http_session/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http_session/pom.xml
----------------------------------------------------------------------
diff --git a/http_session/pom.xml b/http_session/pom.xml
deleted file mode 100644
index 511b643..0000000
--- a/http_session/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>http_session</artifactId>
-
-  <name>http_session</name>
-
- <description>Struts 2 example application for the
-  HTTP Sesssion getting started tutorial</description>
-
-  <packaging>war</packaging>
-  
-  	<build>
-		<finalName>http_session</finalName>
-	</build>
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http_session/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/http_session/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/http_session/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
deleted file mode 100644
index 5d06792..0000000
--- a/http_session/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.apache.struts.helloworld.action;
-
-import java.util.Map;
-
-import org.apache.struts.helloworld.model.MessageStore;
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.interceptor.ParameterNameAware;
-
-/**
- * Acts as a Struts 2 controller that responds
- * to a user action by setting the value
- * of the Message model class, and returns a String 
- * result.
- * @author Bruce Phillips
- *
- */
-public class HelloWorldAction extends ActionSupport implements SessionAware, ParameterNameAware {
-
-	private static final long serialVersionUID = 1L;
-	
-	/**
-	 * The model class that stores the message
-	 * to display in the view.
-	 */
-	private MessageStore messageStore;
-	
-	private Map<String, Object> userSession ;
-	
-	private static final String HELLO_COUNT = "helloCount";
-	
-	
-	
-	private String userName;
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	/*
-	 * Creates the MessageStore model object, 
-	 * increase helloCount stored in the HTTP session by 1 and 
-	 * returns success.  The MessageStore model
-	 * object will be available to the view.
-	 * (non-Javadoc)
-	 * @see com.opensymphony.xwork2.ActionSupport#execute()
-	 */
-	public String execute() throws Exception {
-		
-		messageStore = new MessageStore() ;
-		
-		//Action included a query string parameter of userName
-		//or a form field with name of userName
-		if (userName != null) {
-			
-			messageStore.setMessage( messageStore.getMessage() + " " + userName);
-			
-		}
-		
-		increaseHelloCount();
-		
-		return SUCCESS;
-	}
-	
-	/**
-	 * Increase the value of HELLO_COUNT stored in the user's 
-	 * HTTP session.  
-	 */
-	private void increaseHelloCount() {
-			
-		Integer helloCount = (Integer) userSession.get(HELLO_COUNT);
-		
-		if (helloCount == null ) {
-		
-			helloCount = 1;
-			
-		} else {
-			
-			helloCount++;
-		}
-		
-		userSession.put(HELLO_COUNT, helloCount);
-	
-	}
-
-	public MessageStore getMessageStore() {
-		return messageStore;
-	}
-
-	public void setMessageStore(MessageStore messageStore) {
-		this.messageStore = messageStore;
-	}
-
-	
-	public void setSession(Map<String, Object> session) {
-		
-		userSession = session ;
-
-	}
-	
-	public boolean acceptableParameterName(String parameterName) {
-		
-		boolean allowedParameterName = true ;
-		
-		if ( parameterName.contains("session")  || parameterName.contains("request") ) {
-		
-			allowedParameterName = false ;
-			
-		} 
-		
-		return allowedParameterName;
-	}
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http_session/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/http_session/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/http_session/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
deleted file mode 100644
index b7fceeb..0000000
--- a/http_session/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.struts.helloworld.model;
-
-/**
- * Model class that stores a message.
- * @author Bruce Phillips
- *
- */
-public class MessageStore {
-	
-	private String message;
-	
-	public MessageStore() {
-		
-		setMessage("Hello Struts User");
-	}
-
-	public String getMessage() {
-		return message;
-	}
-
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	
-	public String toString() {
-		
-		return message + " (from toString)";
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http_session/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/http_session/src/main/resources/log4j.dtd b/http_session/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/http_session/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/http_session/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/http_session/src/main/resources/log4j.xml b/http_session/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/http_session/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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/433ea016/http_session/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/http_session/src/main/resources/struts.xml b/http_session/src/main/resources/struts.xml
deleted file mode 100644
index b882764..0000000
--- a/http_session/src/main/resources/struts.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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" />
-
-	<package name="basicstruts2" extends="struts-default">
-	
-		<!-- setup the default-stack exception mapping interceptor 
- 		so that any exceptions not caught by this application 
- 		will be logged and then handled by the global exception 
- 		mapping 
- 		also modify the params interceptor so it excludes 
- 		request attributes that start with session or request-->
- 		<interceptors>
-	 		<interceptor-stack name="appDefault">
-	        	 <interceptor-ref name="defaultStack">
-	      			<param name="exception.logEnabled">true</param>
-	      			<param name="exception.logLevel">ERROR</param>
-	      			<param name="params.excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
-	   			</interceptor-ref>
-	 	    </interceptor-stack>
-		</interceptors>
-		
-		<default-interceptor-ref name="appDefault" />
-
-        <!-- 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>
-		
-		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
-		If the result returned by the execute method is success render the HelloWorld.jsp -->
-		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
-			<result name="success">/HelloWorld.jsp</result>
-		</action>
-
-	</package>
-
-</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http_session/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/http_session/src/main/webapp/HelloWorld.jsp b/http_session/src/main/webapp/HelloWorld.jsp
deleted file mode 100644
index c946804..0000000
--- a/http_session/src/main/webapp/HelloWorld.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@ 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>Hello World!</title>
-</head>
-<body>
-<h2><s:property value="messageStore.message" /></h2>
-<p>I've said hello to you <s:property value="#session.helloCount" /> times!</p>
-<p><s:property value="messageStore" /></p>
-<hr />
-<p><a href='<s:url action="index" />'>Return Home</a></p>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http_session/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/http_session/src/main/webapp/META-INF/MANIFEST.MF b/http_session/src/main/webapp/META-INF/MANIFEST.MF
deleted file mode 100644
index 254272e..0000000
--- a/http_session/src/main/webapp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/http_session/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/http_session/src/main/webapp/WEB-INF/web.xml b/http_session/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index c80f689..0000000
--- a/http_session/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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>HTTP Session 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/433ea016/http_session/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/http_session/src/main/webapp/index.jsp b/http_session/src/main/webapp/index.jsp
deleted file mode 100644
index f1a5444..0000000
--- a/http_session/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@ 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>Basic Struts 2 Application - Welcome</title>
-</head>
-<body>
-<h1>Welcome To Struts 2!</h1>
-<p><a href="<s:url action='hello'/>">Hello World</a></p>
-<s:url action="hello" var="helloLink">
-  <s:param name="userName">Bruce Phillips</s:param>
-</s:url>
-<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
-
-<p>Get your own personal hello by filling out and submitting this form.</p>
-
-<s:form action="hello">
-
-	<s:textfield name="userName" label="%{'Your name'}" />
-	
-	<s:submit value="%{'Submit'}" />
-
-</s:form>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/interceptors/pom.xml
----------------------------------------------------------------------
diff --git a/interceptors/pom.xml b/interceptors/pom.xml
index 4e99612..955a08c 100644
--- a/interceptors/pom.xml
+++ b/interceptors/pom.xml
@@ -1,23 +1,24 @@
 <?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
+<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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
 
-  <artifactId>interceptors</artifactId>
+    <artifactId>interceptors</artifactId>
+
+    <name>Struts 2 Interceptors</name>
+
+    <description>Form XML validation example application for the Struts 2 getting started tutorials</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>interceptors</finalName>
+    </build>
 
-  <name>Struts 2 Interceptors</name>
-  
-  <description>Form XML validation example application for the 
-  Struts 2 getting started tutorials</description>
-  <packaging>war</packaging>
-  
-      <build>
-		<finalName>interceptors</finalName>
-	</build>
-	
 </project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/jboss-blank/pom.xml
----------------------------------------------------------------------
diff --git a/jboss-blank/pom.xml b/jboss-blank/pom.xml
index 6935569..3aabdf3 100644
--- a/jboss-blank/pom.xml
+++ b/jboss-blank/pom.xml
@@ -49,13 +49,6 @@
             <scope>provided</scope>
         </dependency>
 
-        <!-- Logging -->
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <version>${log4j2.version}</version>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.struts</groupId>
             <artifactId>struts2-junit-plugin</artifactId>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/mailreader/pom.xml
----------------------------------------------------------------------
diff --git a/mailreader/pom.xml b/mailreader/pom.xml
index 743bcaf..1f70592 100644
--- a/mailreader/pom.xml
+++ b/mailreader/pom.xml
@@ -51,11 +51,6 @@
         <!-- Logging -->
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <version>${log4j2.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-jcl</artifactId>
             <version>${log4j2.version}</version>
         </dependency>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/README.txt
----------------------------------------------------------------------
diff --git a/message-resource/README.txt b/message-resource/README.txt
new file mode 100644
index 0000000..299304a
--- /dev/null
+++ b/message-resource/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Message Resource 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/message-resource/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/pom.xml
----------------------------------------------------------------------
diff --git a/message-resource/pom.xml b/message-resource/pom.xml
new file mode 100644
index 0000000..ea9f2d0
--- /dev/null
+++ b/message-resource/pom.xml
@@ -0,0 +1,24 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>message-resource</artifactId>
+
+    <name>Message resource</name>
+
+    <description>Message resource example application for the Struts 2 getting started tutorials</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>message-resource</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/message-resource/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/message-resource/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
new file mode 100644
index 0000000..1285010
--- /dev/null
+++ b/message-resource/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
@@ -0,0 +1,79 @@
+package org.apache.struts.helloworld.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.helloworld.model.MessageStore;
+
+/**
+ * Acts as a Struts 2 controller that responds
+ * to a user action by setting the value
+ * of the Message model class, and returns a String 
+ * result.
+ * @author Bruce Phillips
+ *
+ */
+public class HelloWorldAction extends ActionSupport {
+
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * The model class that stores the message
+	 * to display in the view.
+	 */
+	private MessageStore messageStore;
+	
+	private static int helloCount = 0;
+	
+	public int getHelloCount() {
+		return helloCount;
+	}
+
+	public void setHelloCount(int helloCount) {
+		HelloWorldAction.helloCount = helloCount;
+	}
+	
+	private String userName;
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	/*
+	 * Creates the MessageStore model object, 
+	 * increase helloCount by 1 and 
+	 * returns success.  The MessageStore model
+	 * object will be available to the view.
+	 * (non-Javadoc)
+	 * @see com.opensymphony.xwork2.ActionSupport#execute()
+	 */
+	public String execute() throws Exception {
+		
+		messageStore = new MessageStore() ;
+		
+		//Action included a query string parameter of userName
+		//or a form field with name of userName
+		if (userName != null) {
+			
+			messageStore.setMessage( messageStore.getMessage() + " " + userName);
+			
+		}
+		
+		helloCount++;
+		
+		return SUCCESS;
+	}
+
+	public MessageStore getMessageStore() {
+		return messageStore;
+	}
+
+	public void setMessageStore(MessageStore messageStore) {
+		this.messageStore = messageStore;
+	}
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/message-resource/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/message-resource/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
new file mode 100644
index 0000000..b7fceeb
--- /dev/null
+++ b/message-resource/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
@@ -0,0 +1,31 @@
+package org.apache.struts.helloworld.model;
+
+/**
+ * Model class that stores a message.
+ * @author Bruce Phillips
+ *
+ */
+public class MessageStore {
+	
+	private String message;
+	
+	public MessageStore() {
+		
+		setMessage("Hello Struts User");
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+	public String toString() {
+		
+		return message + " (from toString)";
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/message-resource/src/main/java/org/apache/struts/register/action/Register.java b/message-resource/src/main/java/org/apache/struts/register/action/Register.java
new file mode 100644
index 0000000..8cc4716
--- /dev/null
+++ b/message-resource/src/main/java/org/apache/struts/register/action/Register.java
@@ -0,0 +1,64 @@
+package org.apache.struts.register.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.register.model.Person;
+
+/**
+ * Acts as a controller to handle actions
+ * related to registering a user.
+ * @author bruce phillips
+ *
+ */
+public class Register extends ActionSupport {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private Person personBean;
+
+	
+	public String execute() throws Exception {
+		
+		//call Service class to store personBean's state in database
+		
+		return SUCCESS;
+		
+	}
+	
+	public void validate(){
+		
+		if ( personBean.getFirstName().length() == 0 ){	
+
+			addFieldError( "personBean.firstName", "First name is required." );
+			
+		}
+		
+				
+		if ( personBean.getEmail().length() == 0 ){	
+
+			addFieldError( "personBean.email", "Email is required." );
+			
+		}
+		
+		if ( personBean.getAge() < 18 ){	
+
+			addFieldError( "personBean.age", "Age is required and must be 18 or older" );
+			
+		}
+		
+		
+	}
+
+	
+	public Person getPersonBean() {
+		
+		return personBean;
+		
+	}
+	
+	public void setPersonBean(Person person) {
+		
+		personBean = person;
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/message-resource/src/main/java/org/apache/struts/register/model/Person.java b/message-resource/src/main/java/org/apache/struts/register/model/Person.java
new file mode 100644
index 0000000..3020bbb
--- /dev/null
+++ b/message-resource/src/main/java/org/apache/struts/register/model/Person.java
@@ -0,0 +1,62 @@
+package org.apache.struts.register.model;
+
+
+/**
+ * Models a Person who registers.
+ * @author bruce phillips
+ *
+ */
+public class Person
+{
+    private String firstName;
+    private String lastName;
+    private String email;
+    private int age;
+
+    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 String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    public int getAge()
+    {
+        return age;
+    }
+
+    public void setAge( int age)
+    {
+        this.age = age;
+    }
+
+
+    public String toString()
+    {
+        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
+        " Email:      " + getEmail() + " Age:      " + getAge() ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/resources/global.properties
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/global.properties b/message-resource/src/main/resources/global.properties
new file mode 100644
index 0000000..6b21b29
--- /dev/null
+++ b/message-resource/src/main/resources/global.properties
@@ -0,0 +1 @@
+contact=For assistance contact <a href='mailto:contact@email.com'>contact@email.com</a>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/resources/global_es.properties
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/global_es.properties b/message-resource/src/main/resources/global_es.properties
new file mode 100644
index 0000000..fa01513
--- /dev/null
+++ b/message-resource/src/main/resources/global_es.properties
@@ -0,0 +1 @@
+contact=Para asistencia, comun�quese <a href='mailto:comun�quese@email.com'>comun�quese@email.com</a>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/log4j.dtd b/message-resource/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/message-resource/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/433ea016/message-resource/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/log4j.xml b/message-resource/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/message-resource/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/433ea016/message-resource/src/main/resources/org/apache/struts/package.properties
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/org/apache/struts/package.properties b/message-resource/src/main/resources/org/apache/struts/package.properties
new file mode 100644
index 0000000..4ac5698
--- /dev/null
+++ b/message-resource/src/main/resources/org/apache/struts/package.properties
@@ -0,0 +1,2 @@
+greeting=Welcome to The Wonderful World of Struts 2
+instructions=Register for a prize by completing this form.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/resources/org/apache/struts/package_es.properties
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/org/apache/struts/package_es.properties b/message-resource/src/main/resources/org/apache/struts/package_es.properties
new file mode 100644
index 0000000..8f0857c
--- /dev/null
+++ b/message-resource/src/main/resources/org/apache/struts/package_es.properties
@@ -0,0 +1,2 @@
+greeting=Bienvenido al maravilloso mundo de Struts 2
+instructions=Reg�strese para obtener un premio por completar este formulario.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/resources/org/apache/struts/register/action/Register.properties
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/org/apache/struts/register/action/Register.properties b/message-resource/src/main/resources/org/apache/struts/register/action/Register.properties
new file mode 100644
index 0000000..767e5db
--- /dev/null
+++ b/message-resource/src/main/resources/org/apache/struts/register/action/Register.properties
@@ -0,0 +1,6 @@
+personBean.firstName=First name
+personBean.lastName=Last name
+personBean.age=Age
+personBean.email=Email
+thankyou=Thank you for registering %{personBean.firstName}.
+submit=Register
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/message-resource/src/main/resources/org/apache/struts/register/action/Register_es.properties
----------------------------------------------------------------------
diff --git a/message-resource/src/main/resources/org/apache/struts/register/action/Register_es.properties b/message-resource/src/main/resources/org/apache/struts/register/action/Register_es.properties
new file mode 100644
index 0000000..b72712f
--- /dev/null
+++ b/message-resource/src/main/resources/org/apache/struts/register/action/Register_es.properties
@@ -0,0 +1,6 @@
+personBean.firstName=Nombre
+personBean.lastName=Apellidos
+personBean.age=Edad
+personBean.email=Correo
+thankyou=Gracias por registrarse %{personBean.firstName}.
+submit=someter
\ No newline at end of file


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

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-processing/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/form-processing/src/main/webapp/thankyou.jsp b/form-processing/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..3c845bc
--- /dev/null
+++ b/form-processing/src/main/webapp/thankyou.jsp
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Registration Successful</title>
+</head>
+<body>
+<h3>Thank you for registering for a prize.</h3>
+
+<p>Your registration 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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-tags/README.txt
----------------------------------------------------------------------
diff --git a/form-tags/README.txt b/form-tags/README.txt
new file mode 100644
index 0000000..ca309b2
--- /dev/null
+++ b/form-tags/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Form Tags 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/form-tags/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-tags/pom.xml
----------------------------------------------------------------------
diff --git a/form-tags/pom.xml b/form-tags/pom.xml
new file mode 100644
index 0000000..f529e18
--- /dev/null
+++ b/form-tags/pom.xml
@@ -0,0 +1,24 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>form-tags</artifactId>
+
+    <name>Form Tags</name>
+
+    <description>Form tags example application for the Struts 2 getting started tutorials</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>form-tags</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-tags/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/form-tags/src/main/java/org/apache/struts/edit/action/EditAction.java b/form-tags/src/main/java/org/apache/struts/edit/action/EditAction.java
new file mode 100644
index 0000000..700b2f5
--- /dev/null
+++ b/form-tags/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -0,0 +1,95 @@
+package org.apache.struts.edit.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+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 java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 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/433ea016/form-tags/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/form-tags/src/main/java/org/apache/struts/edit/model/Person.java b/form-tags/src/main/java/org/apache/struts/edit/model/Person.java
new file mode 100644
index 0000000..392a8de
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/form-tags/src/main/java/org/apache/struts/edit/model/State.java b/form-tags/src/main/java/org/apache/struts/edit/model/State.java
new file mode 100644
index 0000000..bb927e1
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/form-tags/src/main/java/org/apache/struts/edit/service/EditService.java b/form-tags/src/main/java/org/apache/struts/edit/service/EditService.java
new file mode 100644
index 0000000..79d759a
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/form-tags/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/form-tags/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
new file mode 100644
index 0000000..7638152
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/form-tags/src/main/resources/log4j.dtd b/form-tags/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/form-tags/src/main/resources/log4j.xml b/form-tags/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/form-tags/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/form-tags/src/main/resources/org/apache/struts/edit/action/EditAction.properties
new file mode 100644
index 0000000..0f08667
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/form-tags/src/main/resources/struts.xml b/form-tags/src/main/resources/struts.xml
new file mode 100644
index 0000000..30c5e5d
--- /dev/null
+++ b/form-tags/src/main/resources/struts.xml
@@ -0,0 +1,29 @@
+<?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" />
+
+	<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/433ea016/form-tags/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/form-tags/src/main/webapp/META-INF/MANIFEST.MF b/form-tags/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/form-tags/src/main/webapp/WEB-INF/web.xml b/form-tags/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..7edd933
--- /dev/null
+++ b/form-tags/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>Form Tags</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/433ea016/form-tags/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/form-tags/src/main/webapp/edit.jsp b/form-tags/src/main/webapp/edit.jsp
new file mode 100644
index 0000000..948f63e
--- /dev/null
+++ b/form-tags/src/main/webapp/edit.jsp
@@ -0,0 +1,28 @@
+<%@ 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/433ea016/form-tags/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/form-tags/src/main/webapp/index.jsp b/form-tags/src/main/webapp/index.jsp
new file mode 100644
index 0000000..88209d8
--- /dev/null
+++ b/form-tags/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/433ea016/form-tags/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/form-tags/src/main/webapp/thankyou.jsp b/form-tags/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..5fa306f
--- /dev/null
+++ b/form-tags/src/main/webapp/thankyou.jsp
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/README.txt
----------------------------------------------------------------------
diff --git a/form-validation/README.txt b/form-validation/README.txt
new file mode 100644
index 0000000..2dabeb0
--- /dev/null
+++ b/form-validation/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Form Validation 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/form-validation/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/pom.xml
----------------------------------------------------------------------
diff --git a/form-validation/pom.xml b/form-validation/pom.xml
new file mode 100644
index 0000000..8f8a2e1
--- /dev/null
+++ b/form-validation/pom.xml
@@ -0,0 +1,24 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>form-validation</artifactId>
+
+    <name>Form validation</name>
+
+    <description>Form validation example application for the Struts 2 getting started tutorials</description>
+
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>form_validation</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/form-validation/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/form-validation/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
new file mode 100644
index 0000000..1285010
--- /dev/null
+++ b/form-validation/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
@@ -0,0 +1,79 @@
+package org.apache.struts.helloworld.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.helloworld.model.MessageStore;
+
+/**
+ * Acts as a Struts 2 controller that responds
+ * to a user action by setting the value
+ * of the Message model class, and returns a String 
+ * result.
+ * @author Bruce Phillips
+ *
+ */
+public class HelloWorldAction extends ActionSupport {
+
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * The model class that stores the message
+	 * to display in the view.
+	 */
+	private MessageStore messageStore;
+	
+	private static int helloCount = 0;
+	
+	public int getHelloCount() {
+		return helloCount;
+	}
+
+	public void setHelloCount(int helloCount) {
+		HelloWorldAction.helloCount = helloCount;
+	}
+	
+	private String userName;
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	/*
+	 * Creates the MessageStore model object, 
+	 * increase helloCount by 1 and 
+	 * returns success.  The MessageStore model
+	 * object will be available to the view.
+	 * (non-Javadoc)
+	 * @see com.opensymphony.xwork2.ActionSupport#execute()
+	 */
+	public String execute() throws Exception {
+		
+		messageStore = new MessageStore() ;
+		
+		//Action included a query string parameter of userName
+		//or a form field with name of userName
+		if (userName != null) {
+			
+			messageStore.setMessage( messageStore.getMessage() + " " + userName);
+			
+		}
+		
+		helloCount++;
+		
+		return SUCCESS;
+	}
+
+	public MessageStore getMessageStore() {
+		return messageStore;
+	}
+
+	public void setMessageStore(MessageStore messageStore) {
+		this.messageStore = messageStore;
+	}
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/form-validation/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/form-validation/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
new file mode 100644
index 0000000..b7fceeb
--- /dev/null
+++ b/form-validation/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
@@ -0,0 +1,31 @@
+package org.apache.struts.helloworld.model;
+
+/**
+ * Model class that stores a message.
+ * @author Bruce Phillips
+ *
+ */
+public class MessageStore {
+	
+	private String message;
+	
+	public MessageStore() {
+		
+		setMessage("Hello Struts User");
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+	public String toString() {
+		
+		return message + " (from toString)";
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/form-validation/src/main/java/org/apache/struts/register/action/Register.java b/form-validation/src/main/java/org/apache/struts/register/action/Register.java
new file mode 100644
index 0000000..8cc4716
--- /dev/null
+++ b/form-validation/src/main/java/org/apache/struts/register/action/Register.java
@@ -0,0 +1,64 @@
+package org.apache.struts.register.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.register.model.Person;
+
+/**
+ * Acts as a controller to handle actions
+ * related to registering a user.
+ * @author bruce phillips
+ *
+ */
+public class Register extends ActionSupport {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private Person personBean;
+
+	
+	public String execute() throws Exception {
+		
+		//call Service class to store personBean's state in database
+		
+		return SUCCESS;
+		
+	}
+	
+	public void validate(){
+		
+		if ( personBean.getFirstName().length() == 0 ){	
+
+			addFieldError( "personBean.firstName", "First name is required." );
+			
+		}
+		
+				
+		if ( personBean.getEmail().length() == 0 ){	
+
+			addFieldError( "personBean.email", "Email is required." );
+			
+		}
+		
+		if ( personBean.getAge() < 18 ){	
+
+			addFieldError( "personBean.age", "Age is required and must be 18 or older" );
+			
+		}
+		
+		
+	}
+
+	
+	public Person getPersonBean() {
+		
+		return personBean;
+		
+	}
+	
+	public void setPersonBean(Person person) {
+		
+		personBean = person;
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/form-validation/src/main/java/org/apache/struts/register/model/Person.java b/form-validation/src/main/java/org/apache/struts/register/model/Person.java
new file mode 100644
index 0000000..3020bbb
--- /dev/null
+++ b/form-validation/src/main/java/org/apache/struts/register/model/Person.java
@@ -0,0 +1,62 @@
+package org.apache.struts.register.model;
+
+
+/**
+ * Models a Person who registers.
+ * @author bruce phillips
+ *
+ */
+public class Person
+{
+    private String firstName;
+    private String lastName;
+    private String email;
+    private int age;
+
+    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 String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    public int getAge()
+    {
+        return age;
+    }
+
+    public void setAge( int age)
+    {
+        this.age = age;
+    }
+
+
+    public String toString()
+    {
+        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
+        " Email:      " + getEmail() + " Age:      " + getAge() ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/form-validation/src/main/resources/log4j.dtd b/form-validation/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/form-validation/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/433ea016/form-validation/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/form-validation/src/main/resources/log4j.xml b/form-validation/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/form-validation/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/433ea016/form-validation/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/form-validation/src/main/resources/struts.xml b/form-validation/src/main/resources/struts.xml
new file mode 100644
index 0000000..b631d42
--- /dev/null
+++ b/form-validation/src/main/resources/struts.xml
@@ -0,0 +1,32 @@
+<?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" />
+
+	<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>
+		
+		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
+		If the result returned by the execute method is success render the HelloWorld.jsp -->
+		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
+			<result name="success">/HelloWorld.jsp</result>
+		</action>
+		
+	  <action name="register" class="org.apache.struts.register.action.Register" method="execute">
+		<result name="success">/thankyou.jsp</result>
+		<result name="input">/register.jsp</result>
+	  </action>
+
+	</package>
+
+</struts>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/form-validation/src/main/webapp/HelloWorld.jsp b/form-validation/src/main/webapp/HelloWorld.jsp
new file mode 100644
index 0000000..286a6ab
--- /dev/null
+++ b/form-validation/src/main/webapp/HelloWorld.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>Hello World!</title>
+</head>
+<body>
+<h2><s:property value="messageStore.message" /></h2>
+<p>I've said hello <s:property value="helloCount" /> times!</p>
+<p><s:property value="messageStore" /></p>
+<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/form-validation/src/main/webapp/META-INF/MANIFEST.MF b/form-validation/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/form-validation/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/433ea016/form-validation/src/main/webapp/META-INF/context.xml
----------------------------------------------------------------------
diff --git a/form-validation/src/main/webapp/META-INF/context.xml b/form-validation/src/main/webapp/META-INF/context.xml
new file mode 100644
index 0000000..a4f8a97
--- /dev/null
+++ b/form-validation/src/main/webapp/META-INF/context.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Context antiJARLocking="true" path="/form_validation"/>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/form-validation/src/main/webapp/WEB-INF/web.xml b/form-validation/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..90c6644
--- /dev/null
+++ b/form-validation/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>Form Validation</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/433ea016/form-validation/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/form-validation/src/main/webapp/index.jsp b/form-validation/src/main/webapp/index.jsp
new file mode 100644
index 0000000..091f505
--- /dev/null
+++ b/form-validation/src/main/webapp/index.jsp
@@ -0,0 +1,30 @@
+<%@ 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>Basic Struts 2 Application - Welcome</title>
+</head>
+<body>
+<h1>Welcome To Struts 2!</h1>
+<p><a href="<s:url action='hello'/>">Hello World</a></p>
+<s:url action="hello" var="helloLink">
+  <s:param name="userName">Bruce Phillips</s:param>
+</s:url>
+<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
+
+<p>Get your own personal hello by filling out and submitting this form.</p>
+
+<s:form action="hello">
+
+	<s:textfield name="userName" label="Your name" />
+	
+	<s:submit value="Submit" />
+
+</s:form>
+
+<p><a href="register.jsp">Please register</a> for our prize drawing.</p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/form-validation/src/main/webapp/register.jsp b/form-validation/src/main/webapp/register.jsp
new file mode 100644
index 0000000..a4acb15
--- /dev/null
+++ b/form-validation/src/main/webapp/register.jsp
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Register</title>
+<s:head />
+</head>
+<body>
+<h3>Register for a prize by completing this form.</h3>
+
+<s:form action="register">
+
+ 	  <s:textfield name="personBean.firstName" label="First name" />
+ 	  <s:textfield  name="personBean.lastName" label="Last name" />
+ 	  <s:textfield name="personBean.email"  label ="Email"/>  
+ 	  <s:textfield name="personBean.age"  label="Age"  />
+ 	  
+   	  <s:submit/>
+   	  
+</s:form>	
+ 
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-validation/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/form-validation/src/main/webapp/thankyou.jsp b/form-validation/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..3c845bc
--- /dev/null
+++ b/form-validation/src/main/webapp/thankyou.jsp
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Registration Successful</title>
+</head>
+<body>
+<h3>Thank you for registering for a prize.</h3>
+
+<p>Your registration 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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-xml-validation/README.txt
----------------------------------------------------------------------
diff --git a/form-xml-validation/README.txt b/form-xml-validation/README.txt
new file mode 100644
index 0000000..067681c
--- /dev/null
+++ b/form-xml-validation/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Form XML Validation 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/form-xml-validation/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-xml-validation/pom.xml
----------------------------------------------------------------------
diff --git a/form-xml-validation/pom.xml b/form-xml-validation/pom.xml
new file mode 100644
index 0000000..adc063d
--- /dev/null
+++ b/form-xml-validation/pom.xml
@@ -0,0 +1,23 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>form-xml-validation</artifactId>
+
+    <name>XML based form validation</name>
+
+    <description>Form XML validation example application for the Struts 2 getting started tutorials</description>
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>form-xml-validation</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-xml-validation/src/main/java/org/apache/struts/edit/action/EditAction.java
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/java/org/apache/struts/edit/action/EditAction.java b/form-xml-validation/src/main/java/org/apache/struts/edit/action/EditAction.java
new file mode 100644
index 0000000..700b2f5
--- /dev/null
+++ b/form-xml-validation/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -0,0 +1,95 @@
+package org.apache.struts.edit.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+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 java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 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/433ea016/form-xml-validation/src/main/java/org/apache/struts/edit/model/Person.java
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/java/org/apache/struts/edit/model/Person.java b/form-xml-validation/src/main/java/org/apache/struts/edit/model/Person.java
new file mode 100644
index 0000000..2d127eb
--- /dev/null
+++ b/form-xml-validation/src/main/java/org/apache/struts/edit/model/Person.java
@@ -0,0 +1,121 @@
+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;
+    private String email;
+    private String phoneNumber;
+   
+ 
+
+    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() ) + " | " +
+        " Email: " + getEmail() + " | " +
+        " Phone: " + getPhoneNumber();
+        
+        
+    }
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setPhoneNumber(String phoneNumber) {
+		this.phoneNumber = phoneNumber;
+	}
+
+	public String getPhoneNumber() {
+		return phoneNumber;
+	}
+
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-xml-validation/src/main/java/org/apache/struts/edit/model/State.java
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/java/org/apache/struts/edit/model/State.java b/form-xml-validation/src/main/java/org/apache/struts/edit/model/State.java
new file mode 100644
index 0000000..bb927e1
--- /dev/null
+++ b/form-xml-validation/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/433ea016/form-xml-validation/src/main/java/org/apache/struts/edit/service/EditService.java
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/java/org/apache/struts/edit/service/EditService.java b/form-xml-validation/src/main/java/org/apache/struts/edit/service/EditService.java
new file mode 100644
index 0000000..79d759a
--- /dev/null
+++ b/form-xml-validation/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/433ea016/form-xml-validation/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java b/form-xml-validation/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
new file mode 100644
index 0000000..b0821fb
--- /dev/null
+++ b/form-xml-validation/src/main/java/org/apache/struts/edit/service/EditServiceInMemory.java
@@ -0,0 +1,60 @@
+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.setEmail("bphillips@ku.edu");
+		person.setSport("basketball");
+		person.setGender("not sure");
+		person.setResidency("KS");
+		person.setOver21(true);		
+		person.setCarModels( carModels);	
+		person.setPhoneNumber("123-456-9999");
+
+		
+
+	}
+
+	
+	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() );
+		EditServiceInMemory.person.setEmail( personBean.getEmail() );
+		EditServiceInMemory.person.setPhoneNumber( personBean.getPhoneNumber() );
+
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-xml-validation/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/resources/log4j.dtd b/form-xml-validation/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/form-xml-validation/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/433ea016/form-xml-validation/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/resources/log4j.xml b/form-xml-validation/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/form-xml-validation/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/433ea016/form-xml-validation/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml b/form-xml-validation/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
new file mode 100644
index 0000000..bb91b97
--- /dev/null
+++ b/form-xml-validation/src/main/resources/org/apache/struts/edit/action/EditAction-validation.xml
@@ -0,0 +1,34 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
+<validators>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.firstName</param>
+ 	<message>First name is required.</message>
+ </validator>
+  <validator type="requiredstring">
+ 	<param name="fieldname">personBean.lastName</param>
+ 	<message>Last name is required.</message>
+ </validator>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.email</param>
+ 	<message>Email address is required.</message>
+ </validator>
+ <validator type="email">
+ 	<param name="fieldname">personBean.email</param>
+ 	<message>Email address not valid.</message>
+ </validator>
+ <validator type="requiredstring">
+ 	<param name="fieldname">personBean.phoneNumber</param>
+ 	<message>Phone number is required.</message>
+ </validator>
+<validator type="regex">
+	<param name="fieldname">personBean.phoneNumber</param>
+	<param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>
+	<message>Phone number must be entered as 999-999-9999.</message>
+</validator>
+<validator type="fieldexpression">
+	<param name="fieldname">personBean.carModels</param>
+	<param name="expression"><![CDATA[personBean.carModels.length > 0]]></param>
+	<message>You must select at least one car model.</message>
+</validator>
+</validators>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-xml-validation/src/main/resources/org/apache/struts/edit/action/EditAction.properties
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/resources/org/apache/struts/edit/action/EditAction.properties b/form-xml-validation/src/main/resources/org/apache/struts/edit/action/EditAction.properties
new file mode 100644
index 0000000..1b36d51
--- /dev/null
+++ b/form-xml-validation/src/main/resources/org/apache/struts/edit/action/EditAction.properties
@@ -0,0 +1,10 @@
+personBean.firstName=First name
+personBean.lastName=Last name
+personBean.email=Email address
+personBean.phoneNumber=Phone number (999-999-9999)
+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/433ea016/form-xml-validation/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/resources/struts.xml b/form-xml-validation/src/main/resources/struts.xml
new file mode 100644
index 0000000..893019d
--- /dev/null
+++ b/form-xml-validation/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" />
+
+	<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="input">/edit.jsp</result>
+	    	<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/433ea016/form-xml-validation/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/webapp/META-INF/MANIFEST.MF b/form-xml-validation/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/form-xml-validation/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/433ea016/form-xml-validation/src/main/webapp/META-INF/context.xml
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/webapp/META-INF/context.xml b/form-xml-validation/src/main/webapp/META-INF/context.xml
new file mode 100644
index 0000000..047bfdc
--- /dev/null
+++ b/form-xml-validation/src/main/webapp/META-INF/context.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Context antiJARLocking="true" path="/form_xml_validation"/>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form-xml-validation/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/webapp/WEB-INF/web.xml b/form-xml-validation/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..452d0d7
--- /dev/null
+++ b/form-xml-validation/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>Form XML Validation</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/433ea016/form-xml-validation/src/main/webapp/edit.jsp
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/webapp/edit.jsp b/form-xml-validation/src/main/webapp/edit.jsp
new file mode 100644
index 0000000..67a9901
--- /dev/null
+++ b/form-xml-validation/src/main/webapp/edit.jsp
@@ -0,0 +1,30 @@
+<%@ 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:textfield key="personBean.email" />
+<s:textfield key="personBean.phoneNumber" />
+<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/433ea016/form-xml-validation/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/webapp/index.jsp b/form-xml-validation/src/main/webapp/index.jsp
new file mode 100644
index 0000000..88209d8
--- /dev/null
+++ b/form-xml-validation/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/433ea016/form-xml-validation/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/form-xml-validation/src/main/webapp/thankyou.jsp b/form-xml-validation/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..5fa306f
--- /dev/null
+++ b/form-xml-validation/src/main/webapp/thankyou.jsp
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/README.txt
----------------------------------------------------------------------
diff --git a/form_processing/README.txt b/form_processing/README.txt
deleted file mode 100644
index fb7495b..0000000
--- a/form_processing/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Processing Forms 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/form_processing/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/pom.xml
----------------------------------------------------------------------
diff --git a/form_processing/pom.xml b/form_processing/pom.xml
deleted file mode 100644
index c4c77cb..0000000
--- a/form_processing/pom.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-  <artifactId>form_processing</artifactId>
-
-  <name>Form Processing</name>
- 
-  <description>Form processing example application for the 
-  Struts 2 getting started tutorials</description>
-  <packaging>war</packaging>
-  
-      <build>
-		<finalName>form_processing</finalName>
-	</build>
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/form_processing/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/form_processing/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
deleted file mode 100644
index 92fda49..0000000
--- a/form_processing/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.struts.helloworld.action;
-
-import org.apache.struts.helloworld.model.MessageStore;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a Struts 2 controller that responds
- * to a user action by setting the value
- * of the Message model class, and returns a String 
- * result.
- * @author Bruce Phillips
- *
- */
-public class HelloWorldAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-	
-	/**
-	 * The model class that stores the message
-	 * to display in the view.
-	 */
-	private MessageStore messageStore;
-	
-	private static int helloCount = 0;
-	
-	public int getHelloCount() {
-		return helloCount;
-	}
-
-	public void setHelloCount(int helloCount) {
-		HelloWorldAction.helloCount = helloCount;
-	}
-	
-	private String userName;
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	/*
-	 * Creates the MessageStore model object, 
-	 * increase helloCount by 1 and 
-	 * returns success.  The MessageStore model
-	 * object will be available to the view.
-	 * (non-Javadoc)
-	 * @see com.opensymphony.xwork2.ActionSupport#execute()
-	 */
-	public String execute() throws Exception {
-		
-		messageStore = new MessageStore() ;
-		
-		//Action included a query string parameter of userName
-		//or a form field with name of userName
-		if (userName != null) {
-			
-			messageStore.setMessage( messageStore.getMessage() + " " + userName);
-			
-		}
-		
-		helloCount++;
-		
-		return SUCCESS;
-	}
-
-	public MessageStore getMessageStore() {
-		return messageStore;
-	}
-
-	public void setMessageStore(MessageStore messageStore) {
-		this.messageStore = messageStore;
-	}
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/form_processing/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/form_processing/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/form_processing/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
deleted file mode 100644
index b7fceeb..0000000
--- a/form_processing/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.struts.helloworld.model;
-
-/**
- * Model class that stores a message.
- * @author Bruce Phillips
- *
- */
-public class MessageStore {
-	
-	private String message;
-	
-	public MessageStore() {
-		
-		setMessage("Hello Struts User");
-	}
-
-	public String getMessage() {
-		return message;
-	}
-
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	
-	public String toString() {
-		
-		return message + " (from toString)";
-		
-	}
-
-}


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

Posted by jo...@apache.org.
Unify artifact names and use "-" instead of "_"


Project: http://git-wip-us.apache.org/repos/asf/struts-examples/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts-examples/commit/433ea016
Tree: http://git-wip-us.apache.org/repos/asf/struts-examples/tree/433ea016
Diff: http://git-wip-us.apache.org/repos/asf/struts-examples/diff/433ea016

Branch: refs/heads/master
Commit: 433ea016258c4928b214ad3d99933abb9df211bb
Parents: 33bf8f2
Author: Johannes Geppert <jo...@apache.org>
Authored: Sun Jun 14 12:38:45 2015 +0200
Committer: Johannes Geppert <jo...@apache.org>
Committed: Sun Jun 14 12:38:46 2015 +0200

----------------------------------------------------------------------
 blank/pom.xml                                   |   7 -
 exception-handling/README.txt                   |  16 +
 exception-handling/pom.xml                      |  23 ++
 .../helloworld/action/HelloWorldAction.java     |  79 +++++
 .../struts/helloworld/model/MessageStore.java   |  31 ++
 .../apache/struts/register/action/Register.java |  60 ++++
 .../exceptions/SecurityBreachException.java     |  19 ++
 .../apache/struts/register/model/Person.java    |  62 ++++
 exception-handling/src/main/resources/log4j.dtd | 227 ++++++++++++++
 exception-handling/src/main/resources/log4j.xml |  28 ++
 .../src/main/resources/struts.xml               |  78 +++++
 .../src/main/webapp/HelloWorld.jsp              |  16 +
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 .../src/main/webapp/WEB-INF/web.xml             |  19 ++
 exception-handling/src/main/webapp/error.jsp    |  24 ++
 exception-handling/src/main/webapp/index.jsp    |  39 +++
 exception-handling/src/main/webapp/login.jsp    |  17 ++
 exception-handling/src/main/webapp/register.jsp |  26 ++
 .../src/main/webapp/securityerror.jsp           |  24 ++
 exception-handling/src/main/webapp/thankyou.jsp |  19 ++
 exception_handling/README.txt                   |  16 -
 exception_handling/pom.xml                      |  23 --
 .../helloworld/action/HelloWorldAction.java     |  80 -----
 .../struts/helloworld/model/MessageStore.java   |  31 --
 .../apache/struts/register/action/Register.java |  61 ----
 .../exceptions/SecurityBreachException.java     |  19 --
 .../apache/struts/register/model/Person.java    |  62 ----
 exception_handling/src/main/resources/log4j.dtd | 227 --------------
 exception_handling/src/main/resources/log4j.xml |  28 --
 .../src/main/resources/struts.xml               |  78 -----
 .../src/main/webapp/HelloWorld.jsp              |  16 -
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 .../src/main/webapp/WEB-INF/web.xml             |  19 --
 exception_handling/src/main/webapp/error.jsp    |  24 --
 exception_handling/src/main/webapp/index.jsp    |  39 ---
 exception_handling/src/main/webapp/login.jsp    |  17 --
 exception_handling/src/main/webapp/register.jsp |  26 --
 .../src/main/webapp/securityerror.jsp           |  24 --
 exception_handling/src/main/webapp/thankyou.jsp |  19 --
 exclude-parameters/README.txt                   |  19 ++
 exclude-parameters/pom.xml                      |  24 ++
 .../apache/struts/edit/action/EditAction.java   |  95 ++++++
 .../org/apache/struts/edit/model/Person.java    | 121 ++++++++
 .../org/apache/struts/edit/model/State.java     |  39 +++
 .../struts/edit/service/CarModelsService.java   |  18 ++
 .../edit/service/CarModelsServiceHardCoded.java |  22 ++
 .../apache/struts/edit/service/EditService.java |  12 +
 .../edit/service/EditServiceInMemory.java       |  60 ++++
 .../src/main/resources/log4j2.xml               |  16 +
 .../edit/action/EditAction-validation.xml       |  35 +++
 .../struts/edit/action/EditAction.properties    |  10 +
 .../src/main/resources/struts.xml               |  42 +++
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 .../src/main/webapp/WEB-INF/web.xml             |  19 ++
 exclude-parameters/src/main/webapp/edit.jsp     |  30 ++
 exclude-parameters/src/main/webapp/index.jsp    |  16 +
 exclude-parameters/src/main/webapp/thankyou.jsp |  21 ++
 exclude_parameters/README.txt                   |  19 --
 exclude_parameters/pom.xml                      |  24 --
 .../apache/struts/edit/action/EditAction.java   |  95 ------
 .../org/apache/struts/edit/model/Person.java    | 121 --------
 .../org/apache/struts/edit/model/State.java     |  39 ---
 .../struts/edit/service/CarModelsService.java   |  18 --
 .../edit/service/CarModelsServiceHardCoded.java |  22 --
 .../apache/struts/edit/service/EditService.java |  12 -
 .../edit/service/EditServiceInMemory.java       |  60 ----
 .../src/main/resources/log4j2.xml               |  16 -
 .../edit/action/EditAction-validation.xml       |  35 ---
 .../struts/edit/action/EditAction.properties    |  10 -
 .../src/main/resources/struts.xml               |  42 ---
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 .../src/main/webapp/WEB-INF/web.xml             |  19 --
 exclude_parameters/src/main/webapp/edit.jsp     |  30 --
 exclude_parameters/src/main/webapp/index.jsp    |  16 -
 exclude_parameters/src/main/webapp/thankyou.jsp |  21 --
 form-processing/README.txt                      |  16 +
 form-processing/pom.xml                         |  22 ++
 .../helloworld/action/HelloWorldAction.java     |  79 +++++
 .../struts/helloworld/model/MessageStore.java   |  31 ++
 .../apache/struts/register/action/Register.java |  39 +++
 .../apache/struts/register/model/Person.java    |  62 ++++
 form-processing/src/main/resources/log4j.dtd    | 227 ++++++++++++++
 form-processing/src/main/resources/log4j.xml    |  28 ++
 form-processing/src/main/resources/struts.xml   |  31 ++
 form-processing/src/main/webapp/HelloWorld.jsp  |  16 +
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 form-processing/src/main/webapp/WEB-INF/web.xml |  19 ++
 form-processing/src/main/webapp/index.jsp       |  30 ++
 form-processing/src/main/webapp/register.jsp    |  26 ++
 form-processing/src/main/webapp/thankyou.jsp    |  19 ++
 form-tags/README.txt                            |  16 +
 form-tags/pom.xml                               |  24 ++
 .../apache/struts/edit/action/EditAction.java   |  95 ++++++
 .../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 ++++
 form-tags/src/main/resources/log4j.dtd          | 227 ++++++++++++++
 form-tags/src/main/resources/log4j.xml          |  28 ++
 .../struts/edit/action/EditAction.properties    |   8 +
 form-tags/src/main/resources/struts.xml         |  29 ++
 form-tags/src/main/webapp/META-INF/MANIFEST.MF  |   3 +
 form-tags/src/main/webapp/WEB-INF/web.xml       |  19 ++
 form-tags/src/main/webapp/edit.jsp              |  28 ++
 form-tags/src/main/webapp/index.jsp             |  16 +
 form-tags/src/main/webapp/thankyou.jsp          |  21 ++
 form-validation/README.txt                      |  16 +
 form-validation/pom.xml                         |  24 ++
 .../helloworld/action/HelloWorldAction.java     |  79 +++++
 .../struts/helloworld/model/MessageStore.java   |  31 ++
 .../apache/struts/register/action/Register.java |  64 ++++
 .../apache/struts/register/model/Person.java    |  62 ++++
 form-validation/src/main/resources/log4j.dtd    | 227 ++++++++++++++
 form-validation/src/main/resources/log4j.xml    |  28 ++
 form-validation/src/main/resources/struts.xml   |  32 ++
 form-validation/src/main/webapp/HelloWorld.jsp  |  16 +
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 .../src/main/webapp/META-INF/context.xml        |   2 +
 form-validation/src/main/webapp/WEB-INF/web.xml |  19 ++
 form-validation/src/main/webapp/index.jsp       |  30 ++
 form-validation/src/main/webapp/register.jsp    |  27 ++
 form-validation/src/main/webapp/thankyou.jsp    |  19 ++
 form-xml-validation/README.txt                  |  16 +
 form-xml-validation/pom.xml                     |  23 ++
 .../apache/struts/edit/action/EditAction.java   |  95 ++++++
 .../org/apache/struts/edit/model/Person.java    | 121 ++++++++
 .../org/apache/struts/edit/model/State.java     |  39 +++
 .../apache/struts/edit/service/EditService.java |  12 +
 .../edit/service/EditServiceInMemory.java       |  60 ++++
 .../src/main/resources/log4j.dtd                | 227 ++++++++++++++
 .../src/main/resources/log4j.xml                |  28 ++
 .../edit/action/EditAction-validation.xml       |  34 +++
 .../struts/edit/action/EditAction.properties    |  10 +
 .../src/main/resources/struts.xml               |  30 ++
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 .../src/main/webapp/META-INF/context.xml        |   2 +
 .../src/main/webapp/WEB-INF/web.xml             |  19 ++
 form-xml-validation/src/main/webapp/edit.jsp    |  30 ++
 form-xml-validation/src/main/webapp/index.jsp   |  16 +
 .../src/main/webapp/thankyou.jsp                |  21 ++
 form_processing/README.txt                      |  16 -
 form_processing/pom.xml                         |  21 --
 .../helloworld/action/HelloWorldAction.java     |  80 -----
 .../struts/helloworld/model/MessageStore.java   |  31 --
 .../apache/struts/register/action/Register.java |  40 ---
 .../apache/struts/register/model/Person.java    |  62 ----
 form_processing/src/main/resources/log4j.dtd    | 227 --------------
 form_processing/src/main/resources/log4j.xml    |  28 --
 form_processing/src/main/resources/struts.xml   |  31 --
 form_processing/src/main/webapp/HelloWorld.jsp  |  16 -
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 form_processing/src/main/webapp/WEB-INF/web.xml |  19 --
 form_processing/src/main/webapp/index.jsp       |  30 --
 form_processing/src/main/webapp/register.jsp    |  26 --
 form_processing/src/main/webapp/thankyou.jsp    |  19 --
 form_tags/README.txt                            |  16 -
 form_tags/pom.xml                               |  22 --
 .../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 ----
 form_tags/src/main/resources/log4j.dtd          | 227 --------------
 form_tags/src/main/resources/log4j.xml          |  28 --
 .../struts/edit/action/EditAction.properties    |   8 -
 form_tags/src/main/resources/struts.xml         |  29 --
 form_tags/src/main/webapp/META-INF/MANIFEST.MF  |   3 -
 form_tags/src/main/webapp/WEB-INF/web.xml       |  19 --
 form_tags/src/main/webapp/edit.jsp              |  28 --
 form_tags/src/main/webapp/index.jsp             |  16 -
 form_tags/src/main/webapp/thankyou.jsp          |  21 --
 form_validation/README.txt                      |  16 -
 form_validation/pom.xml                         |  23 --
 .../helloworld/action/HelloWorldAction.java     |  80 -----
 .../struts/helloworld/model/MessageStore.java   |  31 --
 .../apache/struts/register/action/Register.java |  65 ----
 .../apache/struts/register/model/Person.java    |  62 ----
 form_validation/src/main/resources/log4j.dtd    | 227 --------------
 form_validation/src/main/resources/log4j.xml    |  28 --
 form_validation/src/main/resources/struts.xml   |  32 --
 form_validation/src/main/webapp/HelloWorld.jsp  |  16 -
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 .../src/main/webapp/META-INF/context.xml        |   2 -
 form_validation/src/main/webapp/WEB-INF/web.xml |  19 --
 form_validation/src/main/webapp/index.jsp       |  30 --
 form_validation/src/main/webapp/register.jsp    |  27 --
 form_validation/src/main/webapp/thankyou.jsp    |  19 --
 form_xml_validation/README.txt                  |  16 -
 form_xml_validation/pom.xml                     |  23 --
 .../apache/struts/edit/action/EditAction.java   |  96 ------
 .../org/apache/struts/edit/model/Person.java    | 121 --------
 .../org/apache/struts/edit/model/State.java     |  39 ---
 .../apache/struts/edit/service/EditService.java |  12 -
 .../edit/service/EditServiceInMemory.java       |  60 ----
 .../src/main/resources/log4j.dtd                | 227 --------------
 .../src/main/resources/log4j.xml                |  28 --
 .../edit/action/EditAction-validation.xml       |  34 ---
 .../struts/edit/action/EditAction.properties    |  10 -
 .../src/main/resources/struts.xml               |  30 --
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 .../src/main/webapp/META-INF/context.xml        |   2 -
 .../src/main/webapp/WEB-INF/web.xml             |  19 --
 form_xml_validation/src/main/webapp/edit.jsp    |  30 --
 form_xml_validation/src/main/webapp/index.jsp   |  16 -
 .../src/main/webapp/thankyou.jsp                |  21 --
 helloworld/README.txt                           |   2 +-
 helloworld/pom.xml                              |  35 ++-
 http-session/README.txt                         |  16 +
 http-session/pom.xml                            |  23 ++
 .../helloworld/action/HelloWorldAction.java     | 120 ++++++++
 .../struts/helloworld/model/MessageStore.java   |  31 ++
 http-session/src/main/resources/log4j.dtd       | 227 ++++++++++++++
 http-session/src/main/resources/log4j.xml       |  28 ++
 http-session/src/main/resources/struts.xml      |  45 +++
 http-session/src/main/webapp/HelloWorld.jsp     |  17 ++
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 http-session/src/main/webapp/WEB-INF/web.xml    |  19 ++
 http-session/src/main/webapp/index.jsp          |  28 ++
 http_session/README.txt                         |  16 -
 http_session/pom.xml                            |  23 --
 .../helloworld/action/HelloWorldAction.java     | 121 --------
 .../struts/helloworld/model/MessageStore.java   |  31 --
 http_session/src/main/resources/log4j.dtd       | 227 --------------
 http_session/src/main/resources/log4j.xml       |  28 --
 http_session/src/main/resources/struts.xml      |  45 ---
 http_session/src/main/webapp/HelloWorld.jsp     |  17 --
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 http_session/src/main/webapp/WEB-INF/web.xml    |  19 --
 http_session/src/main/webapp/index.jsp          |  28 --
 interceptors/pom.xml                            |  39 +--
 jboss-blank/pom.xml                             |   7 -
 mailreader/pom.xml                              |   5 -
 message-resource/README.txt                     |  16 +
 message-resource/pom.xml                        |  24 ++
 .../helloworld/action/HelloWorldAction.java     |  79 +++++
 .../struts/helloworld/model/MessageStore.java   |  31 ++
 .../apache/struts/register/action/Register.java |  64 ++++
 .../apache/struts/register/model/Person.java    |  62 ++++
 .../src/main/resources/global.properties        |   1 +
 .../src/main/resources/global_es.properties     |   1 +
 message-resource/src/main/resources/log4j.dtd   | 227 ++++++++++++++
 message-resource/src/main/resources/log4j.xml   |  28 ++
 .../org/apache/struts/package.properties        |   2 +
 .../org/apache/struts/package_es.properties     |   2 +
 .../struts/register/action/Register.properties  |   6 +
 .../register/action/Register_es.properties      |   6 +
 message-resource/src/main/resources/struts.xml  |  37 +++
 message-resource/src/main/webapp/HelloWorld.jsp |  19 ++
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 .../src/main/webapp/WEB-INF/web.xml             |  19 ++
 message-resource/src/main/webapp/index.jsp      |  43 +++
 message-resource/src/main/webapp/register.jsp   |  29 ++
 message-resource/src/main/webapp/thankyou.jsp   |  20 ++
 message_resource/README.txt                     |  16 -
 message_resource/pom.xml                        |  23 --
 .../helloworld/action/HelloWorldAction.java     |  80 -----
 .../struts/helloworld/model/MessageStore.java   |  31 --
 .../apache/struts/register/action/Register.java |  65 ----
 .../apache/struts/register/model/Person.java    |  62 ----
 .../src/main/resources/global.properties        |   1 -
 .../src/main/resources/global_es.properties     |   1 -
 message_resource/src/main/resources/log4j.dtd   | 227 --------------
 message_resource/src/main/resources/log4j.xml   |  28 --
 .../org/apache/struts/package.properties        |   2 -
 .../org/apache/struts/package_es.properties     |   2 -
 .../struts/register/action/Register.properties  |   6 -
 .../register/action/Register_es.properties      |   6 -
 message_resource/src/main/resources/struts.xml  |  37 ---
 message_resource/src/main/webapp/HelloWorld.jsp |  19 --
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 .../src/main/webapp/WEB-INF/web.xml             |  19 --
 message_resource/src/main/webapp/index.jsp      |  42 ---
 message_resource/src/main/webapp/register.jsp   |  29 --
 message_resource/src/main/webapp/thankyou.jsp   |  20 --
 pom.xml                                         |  28 +-
 preparable-interface/README.txt                 |  16 +
 preparable-interface/pom.xml                    |  24 ++
 .../apache/struts/edit/action/EditAction.java   |  96 ++++++
 .../org/apache/struts/edit/model/Person.java    | 121 ++++++++
 .../org/apache/struts/edit/model/State.java     |  35 +++
 .../struts/edit/service/CarModelsService.java   |  18 ++
 .../edit/service/CarModelsServiceHardCoded.java |  22 ++
 .../apache/struts/edit/service/EditService.java |  12 +
 .../edit/service/EditServiceInMemory.java       |  60 ++++
 .../src/main/resources/log4j2.xml               |  16 +
 .../edit/action/EditAction-validation.xml       |  35 +++
 .../struts/edit/action/EditAction.properties    |  10 +
 .../src/main/resources/struts.xml               |  30 ++
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 .../src/main/webapp/WEB-INF/web.xml             |  19 ++
 preparable-interface/src/main/webapp/edit.jsp   |  30 ++
 preparable-interface/src/main/webapp/index.jsp  |  16 +
 .../src/main/webapp/thankyou.jsp                |  21 ++
 preparable_interface/README.txt                 |  16 -
 preparable_interface/pom.xml                    |  24 --
 .../apache/struts/edit/action/EditAction.java   |  96 ------
 .../org/apache/struts/edit/model/Person.java    | 121 --------
 .../org/apache/struts/edit/model/State.java     |  35 ---
 .../struts/edit/service/CarModelsService.java   |  18 --
 .../edit/service/CarModelsServiceHardCoded.java |  22 --
 .../apache/struts/edit/service/EditService.java |  12 -
 .../edit/service/EditServiceInMemory.java       |  60 ----
 .../src/main/resources/log4j2.xml               |  16 -
 .../edit/action/EditAction-validation.xml       |  35 ---
 .../struts/edit/action/EditAction.properties    |  10 -
 .../src/main/resources/struts.xml               |  30 --
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 .../src/main/webapp/WEB-INF/web.xml             |  19 --
 preparable_interface/src/main/webapp/edit.jsp   |  30 --
 preparable_interface/src/main/webapp/index.jsp  |  16 -
 .../src/main/webapp/thankyou.jsp                |  21 --
 restful2actionmapper/pom.xml                    |  38 ++-
 spring-struts/README.txt                        |  16 +
 spring-struts/pom.xml                           |  29 ++
 .../apache/struts/edit/action/EditAction.java   | 106 +++++++
 .../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 ++++
 spring-struts/src/main/resources/log4j.dtd      | 227 ++++++++++++++
 spring-struts/src/main/resources/log4j.xml      |  28 ++
 .../struts/edit/action/EditAction.properties    |   8 +
 spring-struts/src/main/resources/struts.xml     |  29 ++
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 .../main/webapp/WEB-INF/applicationContext.xml  |  10 +
 spring-struts/src/main/webapp/WEB-INF/web.xml   |  25 ++
 spring-struts/src/main/webapp/edit.jsp          |  29 ++
 spring-struts/src/main/webapp/index.jsp         |  16 +
 spring-struts/src/main/webapp/thankyou.jsp      |  21 ++
 spring_struts/README.txt                        |  16 -
 spring_struts/pom.xml                           |  28 --
 .../apache/struts/edit/action/EditAction.java   | 108 -------
 .../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 ----
 spring_struts/src/main/resources/log4j.dtd      | 227 --------------
 spring_struts/src/main/resources/log4j.xml      |  28 --
 .../struts/edit/action/EditAction.properties    |   8 -
 spring_struts/src/main/resources/struts.xml     |  29 --
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 .../main/webapp/WEB-INF/applicationContext.xml  |  10 -
 spring_struts/src/main/webapp/WEB-INF/web.xml   |  25 --
 spring_struts/src/main/webapp/edit.jsp          |  29 --
 spring_struts/src/main/webapp/index.jsp         |  16 -
 spring_struts/src/main/webapp/thankyou.jsp      |  21 --
 themes-override/README.txt                      |  16 +
 themes-override/pom.xml                         |  40 +++
 .../apache/struts/edit/action/EditAction.java   |  95 ++++++
 .../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 ++
 themes_override/README.txt                      |  16 -
 themes_override/pom.xml                         |  42 ---
 .../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 --
 unit-testing/README.txt                         |  18 ++
 unit-testing/pom.xml                            |  45 +++
 .../apache/struts/register/action/Register.java |  64 ++++
 .../apache/struts/register/model/Person.java    |  62 ++++
 unit-testing/src/main/resources/log4j.dtd       | 227 ++++++++++++++
 unit-testing/src/main/resources/log4j.xml       |  28 ++
 unit-testing/src/main/resources/struts.xml      |  27 ++
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 unit-testing/src/main/webapp/WEB-INF/web.xml    |  19 ++
 unit-testing/src/main/webapp/index.jsp          |  17 ++
 unit-testing/src/main/webapp/register.jsp       |  27 ++
 unit-testing/src/main/webapp/thankyou.jsp       |  19 ++
 .../struts/register/action/RegisterTest.java    |  80 +++++
 unit_testing/README.txt                         |  18 --
 unit_testing/pom.xml                            |  45 ---
 .../apache/struts/register/action/Register.java |  65 ----
 .../apache/struts/register/model/Person.java    |  62 ----
 unit_testing/src/main/resources/log4j.dtd       | 227 --------------
 unit_testing/src/main/resources/log4j.xml       |  28 --
 unit_testing/src/main/resources/struts.xml      |  27 --
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 unit_testing/src/main/webapp/WEB-INF/web.xml    |  19 --
 unit_testing/src/main/webapp/index.jsp          |  17 --
 unit_testing/src/main/webapp/register.jsp       |  27 --
 unit_testing/src/main/webapp/thankyou.jsp       |  19 --
 .../struts/register/action/RegisterTest.java    |  82 -----
 using-tags/README.txt                           |  16 +
 using-tags/pom.xml                              |  23 ++
 .../helloworld/action/HelloWorldAction.java     |  62 ++++
 .../helloworld/model/MessageStore.java          |  31 ++
 using-tags/src/main/resources/log4j.dtd         | 227 ++++++++++++++
 using-tags/src/main/resources/log4j.xml         |  28 ++
 using-tags/src/main/resources/struts.xml        |  27 ++
 using-tags/src/main/webapp/HelloWorld.jsp       |  15 +
 using-tags/src/main/webapp/WEB-INF/web.xml      |  19 ++
 using-tags/src/main/webapp/index.jsp            |  28 ++
 using_tags/README.txt                           |  16 -
 using_tags/pom.xml                              |  21 --
 .../helloworld/action/HelloWorldAction.java     |  64 ----
 .../helloworld/model/MessageStore.java          |  31 --
 using_tags/src/main/resources/log4j.dtd         | 227 --------------
 using_tags/src/main/resources/log4j.xml         |  28 --
 using_tags/src/main/resources/struts.xml        |  27 --
 using_tags/src/main/webapp/HelloWorld.jsp       |  15 -
 using_tags/src/main/webapp/WEB-INF/web.xml      |  19 --
 using_tags/src/main/webapp/index.jsp            |  28 --
 wildcard-method-selection/README.txt            |  16 +
 wildcard-method-selection/pom.xml               |  39 +++
 .../wildcardmethod/action/PersonAction.java     |  93 ++++++
 .../tutorials/wildcardmethod/model/Person.java  |  55 ++++
 .../wildcardmethod/service/PersonService.java   |  88 ++++++
 .../src/main/resources/log4j2.xml               |  16 +
 .../src/main/resources/struts.xml               |  26 ++
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 +
 .../src/main/webapp/WEB-INF/web.xml             |  20 ++
 .../src/main/webapp/index.jsp                   |   1 +
 .../src/main/webapp/input.jsp                   |  40 +++
 .../src/main/webapp/view.jsp                    |  60 ++++
 wildcard_method_selection/README.txt            |  16 -
 wildcard_method_selection/pom.xml               |  40 ---
 .../wildcardmethod/action/PersonAction.java     |  93 ------
 .../tutorials/wildcardmethod/model/Person.java  |  55 ----
 .../wildcardmethod/service/PersonService.java   |  88 ------
 .../src/main/resources/log4j2.xml               |  16 -
 .../src/main/resources/struts.xml               |  26 --
 .../src/main/webapp/META-INF/MANIFEST.MF        |   3 -
 .../src/main/webapp/WEB-INF/web.xml             |  20 --
 .../src/main/webapp/index.jsp                   |   1 -
 .../src/main/webapp/input.jsp                   |  40 ---
 .../src/main/webapp/view.jsp                    |  60 ----
 592 files changed, 13116 insertions(+), 13138 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/blank/pom.xml
----------------------------------------------------------------------
diff --git a/blank/pom.xml b/blank/pom.xml
index 0f51076..78f467c 100644
--- a/blank/pom.xml
+++ b/blank/pom.xml
@@ -49,13 +49,6 @@
             <scope>provided</scope>
         </dependency>
 
-        <!-- Logging -->
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <version>${log4j2.version}</version>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.struts</groupId>
             <artifactId>struts2-junit-plugin</artifactId>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/README.txt
----------------------------------------------------------------------
diff --git a/exception-handling/README.txt b/exception-handling/README.txt
new file mode 100644
index 0000000..de86365
--- /dev/null
+++ b/exception-handling/README.txt
@@ -0,0 +1,16 @@
+This is the example project referred to in the
+Struts 2 documentation, Exception Handling 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/exception-handling/index.action.
+
+You should see a web page with Welcome to Struts 2!
+

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/pom.xml
----------------------------------------------------------------------
diff --git a/exception-handling/pom.xml b/exception-handling/pom.xml
new file mode 100644
index 0000000..86a555d
--- /dev/null
+++ b/exception-handling/pom.xml
@@ -0,0 +1,23 @@
+<?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>
+    <parent>
+        <groupId>struts.apache.org</groupId>
+        <artifactId>struts2examples</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>exception-handling</artifactId>
+
+    <name>Exception handling</name>
+
+    <description>Exception handling example application for the Struts 2 getting started tutorials</description>
+    <packaging>war</packaging>
+
+    <build>
+        <finalName>exception-handling</finalName>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/exception-handling/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
new file mode 100644
index 0000000..1285010
--- /dev/null
+++ b/exception-handling/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
@@ -0,0 +1,79 @@
+package org.apache.struts.helloworld.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.helloworld.model.MessageStore;
+
+/**
+ * Acts as a Struts 2 controller that responds
+ * to a user action by setting the value
+ * of the Message model class, and returns a String 
+ * result.
+ * @author Bruce Phillips
+ *
+ */
+public class HelloWorldAction extends ActionSupport {
+
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * The model class that stores the message
+	 * to display in the view.
+	 */
+	private MessageStore messageStore;
+	
+	private static int helloCount = 0;
+	
+	public int getHelloCount() {
+		return helloCount;
+	}
+
+	public void setHelloCount(int helloCount) {
+		HelloWorldAction.helloCount = helloCount;
+	}
+	
+	private String userName;
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	/*
+	 * Creates the MessageStore model object, 
+	 * increase helloCount by 1 and 
+	 * returns success.  The MessageStore model
+	 * object will be available to the view.
+	 * (non-Javadoc)
+	 * @see com.opensymphony.xwork2.ActionSupport#execute()
+	 */
+	public String execute() throws Exception {
+		
+		messageStore = new MessageStore() ;
+		
+		//Action included a query string parameter of userName
+		//or a form field with name of userName
+		if (userName != null) {
+			
+			messageStore.setMessage( messageStore.getMessage() + " " + userName);
+			
+		}
+		
+		helloCount++;
+		
+		return SUCCESS;
+	}
+
+	public MessageStore getMessageStore() {
+		return messageStore;
+	}
+
+	public void setMessageStore(MessageStore messageStore) {
+		this.messageStore = messageStore;
+	}
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/exception-handling/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
new file mode 100644
index 0000000..b7fceeb
--- /dev/null
+++ b/exception-handling/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
@@ -0,0 +1,31 @@
+package org.apache.struts.helloworld.model;
+
+/**
+ * Model class that stores a message.
+ * @author Bruce Phillips
+ *
+ */
+public class MessageStore {
+	
+	private String message;
+	
+	public MessageStore() {
+		
+		setMessage("Hello Struts User");
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+	public String toString() {
+		
+		return message + " (from toString)";
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/java/org/apache/struts/register/action/Register.java b/exception-handling/src/main/java/org/apache/struts/register/action/Register.java
new file mode 100644
index 0000000..991416b
--- /dev/null
+++ b/exception-handling/src/main/java/org/apache/struts/register/action/Register.java
@@ -0,0 +1,60 @@
+package org.apache.struts.register.action;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts.register.exceptions.SecurityBreachException;
+import org.apache.struts.register.model.Person;
+
+
+
+/**
+ * Acts as a controller to handle actions related to registering a user.
+ * 
+ * @author bruce phillips
+ * 
+ */
+public class Register extends ActionSupport {
+
+	private static final long serialVersionUID = 1L;
+
+	private Person personBean;
+
+	@Override
+	public String execute() throws Exception {
+
+		// call Service class to store personBean's state in database
+
+		return SUCCESS;
+
+	}
+
+	public void throwException() throws Exception {
+
+		throw new Exception("Exception thrown from throwException");
+
+	}
+
+	public void throwNullPointerException() throws NullPointerException {
+
+		throw new NullPointerException("Null Pointer Exception thrown from "
+				+ Register.class.toString());
+	}
+
+	public void throwSecurityException() throws SecurityBreachException {
+
+		throw new SecurityBreachException(
+				"Security breach exception thrown from throwSecurityException");
+	}
+
+	public Person getPersonBean() {
+
+		return personBean;
+
+	}
+
+	public void setPersonBean(Person person) {
+
+		personBean = person;
+
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/java/org/apache/struts/register/exceptions/SecurityBreachException.java
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/java/org/apache/struts/register/exceptions/SecurityBreachException.java b/exception-handling/src/main/java/org/apache/struts/register/exceptions/SecurityBreachException.java
new file mode 100644
index 0000000..127c3bd
--- /dev/null
+++ b/exception-handling/src/main/java/org/apache/struts/register/exceptions/SecurityBreachException.java
@@ -0,0 +1,19 @@
+package org.apache.struts.register.exceptions;
+
+public class SecurityBreachException extends Exception {
+
+	private static final long serialVersionUID = -1232121594261703341L;
+
+	public SecurityBreachException() {
+		
+		super("Security Exception");
+		
+		
+	}
+	
+	public SecurityBreachException(String message) {
+		
+		super(message);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/java/org/apache/struts/register/model/Person.java b/exception-handling/src/main/java/org/apache/struts/register/model/Person.java
new file mode 100644
index 0000000..3020bbb
--- /dev/null
+++ b/exception-handling/src/main/java/org/apache/struts/register/model/Person.java
@@ -0,0 +1,62 @@
+package org.apache.struts.register.model;
+
+
+/**
+ * Models a Person who registers.
+ * @author bruce phillips
+ *
+ */
+public class Person
+{
+    private String firstName;
+    private String lastName;
+    private String email;
+    private int age;
+
+    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 String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    public int getAge()
+    {
+        return age;
+    }
+
+    public void setAge( int age)
+    {
+        this.age = age;
+    }
+
+
+    public String toString()
+    {
+        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
+        " Email:      " + getEmail() + " Age:      " + getAge() ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/resources/log4j.dtd b/exception-handling/src/main/resources/log4j.dtd
new file mode 100644
index 0000000..1aabd96
--- /dev/null
+++ b/exception-handling/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/433ea016/exception-handling/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/resources/log4j.xml b/exception-handling/src/main/resources/log4j.xml
new file mode 100644
index 0000000..2100cb2
--- /dev/null
+++ b/exception-handling/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/433ea016/exception-handling/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/resources/struts.xml b/exception-handling/src/main/resources/struts.xml
new file mode 100644
index 0000000..c77b0de
--- /dev/null
+++ b/exception-handling/src/main/resources/struts.xml
@@ -0,0 +1,78 @@
+<?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" />
+
+	<package name="basicstruts2" extends="struts-default">
+	
+	<!-- setup the default-stack exception mapping interceptor 
+ 		so that any exceptions not caught by this application 
+ 		will be logged and then handled by the global exception 
+ 		mapping -->
+ 		<interceptors>
+ 		<interceptor-stack name="appDefault">
+        	 <interceptor-ref name="defaultStack">
+      			<param name="exception.logEnabled">true</param>
+      			<param name="exception.logLevel">ERROR</param>
+   			</interceptor-ref>
+ 	    </interceptor-stack>
+		</interceptors>
+		
+		<default-interceptor-ref name="appDefault" />
+		
+        <global-results>
+  		  <result name="error">/error.jsp</result>
+  		  <result name="securityerror">/securityerror.jsp</result>
+  	    </global-results>
+  		
+
+	    <global-exception-mappings>
+	        <exception-mapping exception="org.apache.struts.register.exceptions.SecurityBreachException" result="securityerror" />
+	        <exception-mapping exception="java.lang.Exception" result="error" />
+	   	</global-exception-mappings>
+	  
+	    
+         
+        <action name="causesecurityexception" class="org.apache.struts.register.action.Register" method="throwSecurityException">
+        	<result>/register.jsp</result>
+        </action>
+        
+        <action name="causeexception" class="org.apache.struts.register.action.Register" method="throwException">
+        	<result>/register.jsp</result>
+        </action>
+        
+        <action name="causenullpointerexception" class="org.apache.struts.register.action.Register" method="throwNullPointerException">
+        	<result>/register.jsp</result>
+        </action>
+        
+        <action name="actionspecificexception" class="org.apache.struts.register.action.Register" method="throwSecurityException">
+        	<exception-mapping exception="org.apache.struts.register.exceptions.SecurityBreachException" 
+        	   result="login" />
+        	<result>/register.jsp</result>
+        	<result name="login">/login.jsp</result>
+        </action>
+
+        <!-- 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>
+		
+		<!-- If the URL is hello.action the call the execute method of class HelloWorldAction.
+		If the result returned by the execute method is success render the HelloWorld.jsp -->
+		<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
+			<result name="success">/HelloWorld.jsp</result>
+		</action>
+		
+  <action name="register" class="org.apache.struts.register.action.Register" 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/433ea016/exception-handling/src/main/webapp/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/HelloWorld.jsp b/exception-handling/src/main/webapp/HelloWorld.jsp
new file mode 100644
index 0000000..286a6ab
--- /dev/null
+++ b/exception-handling/src/main/webapp/HelloWorld.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>Hello World!</title>
+</head>
+<body>
+<h2><s:property value="messageStore.message" /></h2>
+<p>I've said hello <s:property value="helloCount" /> times!</p>
+<p><s:property value="messageStore" /></p>
+<p><a href="<s:url action='index' />" >Return to home page</a>.</p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/webapp/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/META-INF/MANIFEST.MF b/exception-handling/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/exception-handling/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/433ea016/exception-handling/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/WEB-INF/web.xml b/exception-handling/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..abfd1f4
--- /dev/null
+++ b/exception-handling/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>Exception Handling</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/433ea016/exception-handling/src/main/webapp/error.jsp
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/error.jsp b/exception-handling/src/main/webapp/error.jsp
new file mode 100644
index 0000000..d33d2e4
--- /dev/null
+++ b/exception-handling/src/main/webapp/error.jsp
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<html>
+
+	<head>
+    <title>Error</title>
+	</head>
+
+	<body>
+		<h4>The application has malfunctioned.</h4>
+		<p>  Please contact technical support with the following information:</p> 
+		
+		<!-- the exception and exceptionStack bean properties
+		were created by Struts2's Exception Intercepter  -->
+		<h4>Exception Name: <s:property value="exception" /> </h4>
+		<h4>Exception Details: <s:property value="exceptionStack" /></h4> 
+		
+	
+	    <p><a href="index.jsp">Return to the home page.</a></p>
+	  
+		
+	</body>
+	
+</html>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/index.jsp b/exception-handling/src/main/webapp/index.jsp
new file mode 100644
index 0000000..0e38bcc
--- /dev/null
+++ b/exception-handling/src/main/webapp/index.jsp
@@ -0,0 +1,39 @@
+<%@ 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>Exception Handling Struts 2 Application - Welcome</title>
+</head>
+<body>
+<h1>Welcome To Struts 2!</h1>
+<p><a href="<s:url action='hello'/>">Hello World</a></p>
+<s:url action="hello" var="helloLink">
+  <s:param name="userName">Bruce Phillips</s:param>
+</s:url>
+<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
+
+<p>Get your own personal hello by filling out and submitting this form.</p>
+
+<s:form action="hello">
+
+	<s:textfield name="userName" label="Your name" />
+	
+	<s:submit value="Submit" />
+
+</s:form>
+
+<p><a href="register.jsp">Please register</a> for our prize drawing.</p>
+
+<p><a href='<s:url action="causeexception" />' >Cause Exception</a></p> 
+
+<p><a href='<s:url action="causenullpointerexception" />' >Cause Null Pointer Exception</a></p> 
+
+<p><a href='<s:url action="causesecurityexception" />' >Cause Global Security Exception</a></p> 
+
+<p><a href='<s:url action="actionspecificexception" />' >Cause ActionSpecific Security Exception</a></p>
+  
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/webapp/login.jsp
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/login.jsp b/exception-handling/src/main/webapp/login.jsp
new file mode 100644
index 0000000..1b59392
--- /dev/null
+++ b/exception-handling/src/main/webapp/login.jsp
@@ -0,0 +1,17 @@
+<%@ 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>Exception Handling Struts 2 Application - Login</title>
+</head>
+<body>
+<h1>You Must Login</h1>
+<p>Please login</p>
+
+<p><a href="index.jsp">Return to the home page.</a></p>
+	  
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/webapp/register.jsp
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/register.jsp b/exception-handling/src/main/webapp/register.jsp
new file mode 100644
index 0000000..0adac76
--- /dev/null
+++ b/exception-handling/src/main/webapp/register.jsp
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Register</title>
+</head>
+<body>
+<h3>Register for a prize by completing this form.</h3>
+
+<s:form action="register">
+
+ 	  <s:textfield name="personBean.firstName" label="First name" />
+ 	  <s:textfield  name="personBean.lastName" label="Last name" />
+ 	  <s:textfield name="personBean.email"  label ="Email"/>  
+ 	  <s:textfield name="personBean.age"  label="Age"  />
+ 	  
+   	  <s:submit/>
+   	  
+</s:form>	
+ 
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/webapp/securityerror.jsp
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/securityerror.jsp b/exception-handling/src/main/webapp/securityerror.jsp
new file mode 100644
index 0000000..ed6204d
--- /dev/null
+++ b/exception-handling/src/main/webapp/securityerror.jsp
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<html>
+
+	<head>
+    <title>Security Error</title>
+	</head>
+
+	<body>
+		<h4>There has been a security error.</h4>
+		<p>  Please contact technical support with the following information:</p> 
+		
+		<!-- the exception and exceptionStack bean properties
+		were created by Struts2's Exception Intercepter -->
+		<h4>Exception Name: <s:property value="exception" /> </h4>
+		<h4>Exception Details: <s:property value="exceptionStack" /></h4> 
+		
+	
+	    <p><a href="index.jsp">Return to the home page.</a></p>
+	  
+		
+	</body>
+	
+</html>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception-handling/src/main/webapp/thankyou.jsp
----------------------------------------------------------------------
diff --git a/exception-handling/src/main/webapp/thankyou.jsp b/exception-handling/src/main/webapp/thankyou.jsp
new file mode 100644
index 0000000..3c845bc
--- /dev/null
+++ b/exception-handling/src/main/webapp/thankyou.jsp
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<!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>Registration Successful</title>
+</head>
+<body>
+<h3>Thank you for registering for a prize.</h3>
+
+<p>Your registration 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

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/README.txt
----------------------------------------------------------------------
diff --git a/exception_handling/README.txt b/exception_handling/README.txt
deleted file mode 100644
index ad79377..0000000
--- a/exception_handling/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the example project referred to in the
-Struts 2 documentation, Exception Handling 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/exception_handling/index.action.
-
-You should see a web page with Welcome to Struts 2!
-

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/pom.xml
----------------------------------------------------------------------
diff --git a/exception_handling/pom.xml b/exception_handling/pom.xml
deleted file mode 100644
index 3456b62..0000000
--- a/exception_handling/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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>
-  <parent>
-    <groupId>struts.apache.org</groupId>
-    <artifactId>struts2examples</artifactId>
-    <version>1.0.0</version>
-  </parent>
-
-  <artifactId>exception_handling</artifactId>
-
-  <name>Exception handling</name>
-
-<description>Exception handling example application for the 
-  Struts 2 getting started tutorials</description>
-  <packaging>war</packaging>
-  
-      <build>
-		<finalName>exception_handling</finalName>
-	</build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java b/exception_handling/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
deleted file mode 100644
index 92fda49..0000000
--- a/exception_handling/src/main/java/org/apache/struts/helloworld/action/HelloWorldAction.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.struts.helloworld.action;
-
-import org.apache.struts.helloworld.model.MessageStore;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Acts as a Struts 2 controller that responds
- * to a user action by setting the value
- * of the Message model class, and returns a String 
- * result.
- * @author Bruce Phillips
- *
- */
-public class HelloWorldAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-	
-	/**
-	 * The model class that stores the message
-	 * to display in the view.
-	 */
-	private MessageStore messageStore;
-	
-	private static int helloCount = 0;
-	
-	public int getHelloCount() {
-		return helloCount;
-	}
-
-	public void setHelloCount(int helloCount) {
-		HelloWorldAction.helloCount = helloCount;
-	}
-	
-	private String userName;
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	/*
-	 * Creates the MessageStore model object, 
-	 * increase helloCount by 1 and 
-	 * returns success.  The MessageStore model
-	 * object will be available to the view.
-	 * (non-Javadoc)
-	 * @see com.opensymphony.xwork2.ActionSupport#execute()
-	 */
-	public String execute() throws Exception {
-		
-		messageStore = new MessageStore() ;
-		
-		//Action included a query string parameter of userName
-		//or a form field with name of userName
-		if (userName != null) {
-			
-			messageStore.setMessage( messageStore.getMessage() + " " + userName);
-			
-		}
-		
-		helloCount++;
-		
-		return SUCCESS;
-	}
-
-	public MessageStore getMessageStore() {
-		return messageStore;
-	}
-
-	public void setMessageStore(MessageStore messageStore) {
-		this.messageStore = messageStore;
-	}
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/java/org/apache/struts/helloworld/model/MessageStore.java b/exception_handling/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
deleted file mode 100644
index b7fceeb..0000000
--- a/exception_handling/src/main/java/org/apache/struts/helloworld/model/MessageStore.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.struts.helloworld.model;
-
-/**
- * Model class that stores a message.
- * @author Bruce Phillips
- *
- */
-public class MessageStore {
-	
-	private String message;
-	
-	public MessageStore() {
-		
-		setMessage("Hello Struts User");
-	}
-
-	public String getMessage() {
-		return message;
-	}
-
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	
-	public String toString() {
-		
-		return message + " (from toString)";
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/java/org/apache/struts/register/action/Register.java
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/java/org/apache/struts/register/action/Register.java b/exception_handling/src/main/java/org/apache/struts/register/action/Register.java
deleted file mode 100644
index 698f0e2..0000000
--- a/exception_handling/src/main/java/org/apache/struts/register/action/Register.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.apache.struts.register.action;
-
-import org.apache.struts.register.exceptions.SecurityBreachException;
-import org.apache.struts.register.model.Person;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-
-
-/**
- * Acts as a controller to handle actions related to registering a user.
- * 
- * @author bruce phillips
- * 
- */
-public class Register extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-
-	private Person personBean;
-
-	@Override
-	public String execute() throws Exception {
-
-		// call Service class to store personBean's state in database
-
-		return SUCCESS;
-
-	}
-
-	public void throwException() throws Exception {
-
-		throw new Exception("Exception thrown from throwException");
-
-	}
-
-	public void throwNullPointerException() throws NullPointerException {
-
-		throw new NullPointerException("Null Pointer Exception thrown from "
-				+ Register.class.toString());
-	}
-
-	public void throwSecurityException() throws SecurityBreachException {
-
-		throw new SecurityBreachException(
-				"Security breach exception thrown from throwSecurityException");
-	}
-
-	public Person getPersonBean() {
-
-		return personBean;
-
-	}
-
-	public void setPersonBean(Person person) {
-
-		personBean = person;
-
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/java/org/apache/struts/register/exceptions/SecurityBreachException.java
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/java/org/apache/struts/register/exceptions/SecurityBreachException.java b/exception_handling/src/main/java/org/apache/struts/register/exceptions/SecurityBreachException.java
deleted file mode 100644
index a22152d..0000000
--- a/exception_handling/src/main/java/org/apache/struts/register/exceptions/SecurityBreachException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.struts.register.exceptions;
-
-public class SecurityBreachException extends Exception {
-
-	private static final long serialVersionUID = -1232121594261703341L;
-
-	public SecurityBreachException() {
-		
-		super("Security Exception");
-		
-		
-	}
-	
-	public SecurityBreachException(String message) {
-		
-		super(message);
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/java/org/apache/struts/register/model/Person.java
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/java/org/apache/struts/register/model/Person.java b/exception_handling/src/main/java/org/apache/struts/register/model/Person.java
deleted file mode 100644
index 3020bbb..0000000
--- a/exception_handling/src/main/java/org/apache/struts/register/model/Person.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.struts.register.model;
-
-
-/**
- * Models a Person who registers.
- * @author bruce phillips
- *
- */
-public class Person
-{
-    private String firstName;
-    private String lastName;
-    private String email;
-    private int age;
-
-    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 String getEmail()
-    {
-        return email;
-    }
-
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    public int getAge()
-    {
-        return age;
-    }
-
-    public void setAge( int age)
-    {
-        this.age = age;
-    }
-
-
-    public String toString()
-    {
-        return "First Name: " + getFirstName() + " Last Name:  " + getLastName() + 
-        " Email:      " + getEmail() + " Age:      " + getAge() ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/struts-examples/blob/433ea016/exception_handling/src/main/resources/log4j.dtd
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/resources/log4j.dtd b/exception_handling/src/main/resources/log4j.dtd
deleted file mode 100644
index 1aabd96..0000000
--- a/exception_handling/src/main/resources/log4j.dtd
+++ /dev/null
@@ -1,227 +0,0 @@
-<?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/433ea016/exception_handling/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/exception_handling/src/main/resources/log4j.xml b/exception_handling/src/main/resources/log4j.xml
deleted file mode 100644
index 2100cb2..0000000
--- a/exception_handling/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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> 
-