struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lukaszlen...@apache.org
Subject [4/9] struts-site git commit: Converts Core Developers guide into MD
Date Mon, 12 Jun 2017 19:03:30 GMT
http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/multiselect-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/multiselect-interceptor.md b/source/core-developers/multiselect-interceptor.md
new file mode 100644
index 0000000..e25a7e5
--- /dev/null
+++ b/source/core-developers/multiselect-interceptor.md
@@ -0,0 +1,36 @@
+---
+layout: core-developers
+title: Multiselect Interceptor
+---
+
+# Multiselect Interceptor
+
+
+
+~~~~~~~
+org.apache.struts2.interceptor.MultiselectInterceptor
+~~~~~~~
+ is in the 
+
+~~~~~~~
+defaultStack
+~~~~~~~
+\. It checks each form parameter submitted to the action and if it finds one with a prefix of 
+
+~~~~~~~
+__multiselect_
+~~~~~~~
+ it inserts a value for a parameter whose name is derived from the suffix to 
+
+~~~~~~~
+__multiselect_
+~~~~~~~
+ if it does not exist\. The default value inserted is an empty String array\.
+
+This means that a a field that can have multiple selected values(select, checkboxlist, etc) can be accompanied by a hidden input with the same name but a prefix of 
+
+~~~~~~~
+__multiselect_
+~~~~~~~
+ so that if the no value is selected on the form the action will still receive a value(empty collection) rather than the default HTML action of not providing a value for unselected elements,
+ 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/namespace-annotation.md
----------------------------------------------------------------------
diff --git a/source/core-developers/namespace-annotation.md b/source/core-developers/namespace-annotation.md
new file mode 100644
index 0000000..13fddbd
--- /dev/null
+++ b/source/core-developers/namespace-annotation.md
@@ -0,0 +1,30 @@
+---
+layout: core-developers
+title: Namespace Annotation
+---
+
+# Namespace Annotation
+
+####Namespace Annotation####
+
+The 
+
+~~~~~~~
+@Namespace
+~~~~~~~
+ annotation allows the definition of an Action's namespace in the 
+
+~~~~~~~
+Action
+~~~~~~~
+ class rather than based on [Zero Configuration](zero-configuration.html)'s conventions\.
+
+#####Usage#####
+
+This annotation is placed at the class level\.
+
+#####Parameters#####
+
+| Name | Type | Required | Description |
+|------|------|----------|-------------|
+| value | String | true | The namespace to use for the annotated action class\. |

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/namespace-configuration.md
----------------------------------------------------------------------
diff --git a/source/core-developers/namespace-configuration.md b/source/core-developers/namespace-configuration.md
new file mode 100644
index 0000000..efcbf90
--- /dev/null
+++ b/source/core-developers/namespace-configuration.md
@@ -0,0 +1,142 @@
+---
+layout: core-developers
+title: Namespace Configuration
+---
+
+# Namespace Configuration
+
+The namespace attribute subdivides action configurations into logical modules, each with its own identifying prefix\. Namespaces avoid conflicts between action names\. Each namespace can have its own "menu" or "help" action, each with its own implementation\. While the prefix appears in the browser URI, the tags are "namespace aware", so the namespace prefix does not need to be embedded in forms and links\.
+
+
+
+| Struts 2 Namespaces are the equivalent of Struts Action 1 modules, but more convenient and flexible\.
+
+| 
+
+#####Default Namespace#####
+
+The default namespace is 
+
+~~~~~~~
+""
+~~~~~~~
+ \- an empty string\. The default namespace is used as a "catch\-all" namespace\. If an action configuration is not found in a specified namespace, the default namespace is also be searched\. The local/global strategy allows an application to have global action configurations outside of the action element "extends" hierarchy\.
+
+The namespace prefix can be registered with Java declarative security, to ensure only authorized users can access the actions in a given namespace\.
+
+#####Root Namespace#####
+
+A root namespace ("/") is also supported\. The root is the namespace when a request directly under the context path is received\. As with other namespaces, it will fall back to the default ("") namespace if a local action is not found\.
+
+#####Namespace Example#####
+
+
+
+~~~~~~~
+
+<package name="default">
+    <action name="foo" class="mypackage.simpleAction">
+        <result name="success" type="dispatcher">greeting.jsp</result>
+    </action>
+
+    <action name="bar" class="mypackage.simpleAction">
+        <result name="success" type="dispatcher">bar1.jsp</result>
+    </action>
+</package>
+
+<package name="mypackage1" namespace="/">
+    <action name="moo" class="mypackage.simpleAction">
+        <result name="success" type="dispatcher">moo.jsp</result>
+    </action>
+</package>
+
+<package name="mypackage2" namespace="/barspace">
+    <action name="bar" class="mypackage.simpleAction">
+        <result name="success" type="dispatcher">bar2.jsp</result>
+    </action>
+</package>
+
+~~~~~~~
+
+#####How the Code Works#####
+
+If a request for 
+
+~~~~~~~
+/barspace/bar.action
+~~~~~~~
+ is made, the 
+
+~~~~~~~
+/barspace
+~~~~~~~
+ namespace is searched for the 
+
+~~~~~~~
+bar
+~~~~~~~
+ action\. If found, the 
+
+~~~~~~~
+bar
+~~~~~~~
+ action is executed, else it will fall back to the default namespace\. In the Namespace Example, the 
+
+~~~~~~~
+bar
+~~~~~~~
+ action does exist in the 
+
+~~~~~~~
+/barspace
+~~~~~~~
+ namespace, so the 
+
+~~~~~~~
+bar
+~~~~~~~
+ action will be executed, and if "success" is returned, the request will be forwarded to 
+
+~~~~~~~
+bar2.jsp
+~~~~~~~
+\.
+
+
+
+| If a request is made to /barspace/foo\.action, the namespace /barspace will be checked for action foo\. If a local action is not found, the default namespace is checked\. In the Namespace Example, there is no action foo in the namespace /barspace, therefore the default will be checked and /foo\.action will be executed\.
+
+| 
+
+In the Namespace Example, if a request for 
+
+~~~~~~~
+moo.action
+~~~~~~~
+ is made, the root namespace ('/') is searched for a 
+
+~~~~~~~
+moo
+~~~~~~~
+ action; if a root action is not found, the default namespace is checked\. In this case, the 
+
+~~~~~~~
+moo
+~~~~~~~
+ action does exist and will be executed\. Upon success, the request would be forwarded to 
+
+~~~~~~~
+bar2.jsp
+~~~~~~~
+\.
+
+
+
+| If a request is made for /foo\.action, the root / namespace will be checked\. If foo is found, the root action will be selected\. Otherwise, the framework will check the default namespace\. In the Namespace Example, the foo action does not exist in the root namespace, so the default namespace is  checked, and the default foo action is executed\.
+
+| 
+
+
+Namespace are not hierarchical like a file system path\. There is one namespace level\. For example if the URL /barspace/myspace/bar\.action is requested, the framework will first look for namespace /barspace/myspace\. If the action does not exist at /barspace/myspace, the search will immediately fall back to the default namespace ""\. The framework will not parse the namespace into a series of "folders"\. In the Namespace Example, the bar action in the default namespace would be selected\.
+
+| 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/no-op-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/no-op-interceptor.md b/source/core-developers/no-op-interceptor.md
new file mode 100644
index 0000000..6fd62c6
--- /dev/null
+++ b/source/core-developers/no-op-interceptor.md
@@ -0,0 +1,18 @@
+---
+layout: core-developers
+title: NoOp Interceptor
+---
+
+# NoOp Interceptor
+
+
+
+~~~~~~~
+org.apache.struts2.interceptor.NoOpInterceptor
+~~~~~~~
+ is in the 
+
+~~~~~~~
+emptyStack
+~~~~~~~
+ and it performs no computation, it is there to allow create an empty stack that can be used with actions that do not required receiving request parameters or are fully stateless, i\.e\. when producing a JSON response on public endpoints\.

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/nutshell.md
----------------------------------------------------------------------
diff --git a/source/core-developers/nutshell.md b/source/core-developers/nutshell.md
new file mode 100644
index 0000000..d780136
--- /dev/null
+++ b/source/core-developers/nutshell.md
@@ -0,0 +1,150 @@
+---
+layout: core-developers
+title: Nutshell
+---
+
+# Nutshell
+
+ The framework documentation is written for active web developers and assumes a working knowledge about how Java web applications are built\. For more about the underlying nuts and bolts, see the [Key Technologies Primer](http://struts\.apache\.org/primer\.html)^[http://struts\.apache\.org/primer\.html]\.
+
+> 
+
+####Apache Struts 2 Architecture in a Nutshell####
+
+![struts2-arch.png](attachments/struts2-arch.png)
+
+1. The web browser requests a resource (/mypage.action, /reports/myreport.pdf, et cetera)\
+2. The Filter Dispatcher looks at the request and determines the appropriate Action\
+3. The Interceptors automatically apply common functionality to the request, like workflow, validation, and file upload handling\
+4. The Action method executes, usually storing and/or retrieving information from a database\
+5. The Result renders the output to the browser, be it HTML, images, PDF, or something else\
+
+|
+|------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+
+####Struts Tags in a nutshell####
+
+The Struts Tags help you create rich web applications with a minimum of coding\. Often, much of the coding effort in a web application goes into the pages\. The Struts Tags reduce effort by reducing code\.
+
+
+~~~~~~~
+
+<% User user = ... %>
+<form action="Profile_update.action" method="post">
+    <table>
+        <tr>
+            <td align="right"><label>First name:</label></td>
+            <td><input type="text" name="user.firstname" value="<%=user.getFirstname() %> /></td>
+        </tr>
+        <tr>
+            <td><input type="radio" name="user.gender" value="0" id="user.gender0" 
+                <% if (user.getGender()==0) { %> checked="checked" %> } %> />
+            <label for="user.gender0">Female</label>
+        </tr>
+    </table>
+</form>
+...
+
+~~~~~~~
+
+Looking over the markup, it's easy to see why Java web development without the aid from a modern framework is hard\!  So far, we've only coded two controls, and there are six more to go\! Let's rewrite and finish the form using Struts Tags\.
+
+|\
+\
+![nutshell\.GIF](/Users/lukaszlenart/Projects/Apache/struts\-site/target/md/attachments/att1846\_nutshell\.GIF)
+|\
+\<s:actionerror/\>\
+\<s:form action="Profile\_update" validate="true"\>\
+    \<s:textfield label="Username" name="username"/\>\
+    \<s:password label="Password" name="password"/\>\
+    \<s:password label="(Repeat) Password" name="password2"/\>\
+    \<s:textfield label="Full Name" name="fullName"/\>\
+    \<s:textfield label="From Address" name="fromAddress"/\>\
+    \<s:textfield label="Reply To Address" name="replyToAddress"/\>\
+    \<s:submit value="Save" name="Save"/\>\
+    \<s:submit action="Register\_cancel" value="Cancel" name="Cancel"  onclick="form\.onsubmit=null"/\>\
+\</s:form\>\
+ The Struts Tags also support validation and localization as first\-class features\. So not only is there less code, but there is _more_  utility\. \
+In about the same amount of code as two conventional controls, the Struts Tags can create an entire data\-input form with eight controls\. Not only is there less code, but the code is easier to read and maintain\. |
+|--------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 ----------------------------------------------------------------------------------|
+
+####Struts Configuration in a Nutshell####
+
+A web application uses a deployment descriptor to initialize resources like filters and listeners\. The web deployment descriptor is formatted as a XML document and named 
+
+~~~~~~~
+web.xml
+~~~~~~~
+\. Struts can either initialize its resources by scanning your classes using Java packages declared in this 
+
+~~~~~~~
+web.xml
+~~~~~~~
+ file, or you can have full control over the configuration via a configuration file, named 
+
+~~~~~~~
+struts.xml
+~~~~~~~
+\. These resources include action mappings, to direct input to server\-side Action classes, and result types, to select output pages\. 
+
+Here's a typical configuration (
+
+~~~~~~~
+struts.xml
+~~~~~~~
+) for a login workflow:
+
+
+~~~~~~~
+
+<struts>
+    <package name="default" extends="struts-default">
+        <action name="Logon" class="mailreader2.Logon">
+            <result name="input">/pages/Logon.jsp</result>
+            <result name="cancel" type="redirectAction">Welcome</result>
+            <result type="redirectAction">MainMenu</result>
+            <result name="expired" type="chain">ChangePassword</result>
+        </action>
+
+        <action name="Logoff" class="mailreader2.Logoff">
+            <result type="redirectAction">Welcome</result>
+        </action>
+    </package>
+</struts>
+
+~~~~~~~
+
+(light\-on) The framework provides general\-purpose defaults, so we can start using Struts right away, "out of the box"\. Any factory defaults can be overridden in an application's configuration, as needed\.
+
+####Struts MVC in a Nutshell####
+
+Struts is a [Model View Controller](http://struts\.apache\.org/primer\.html\#mvc)^[http://struts\.apache\.org/primer\.html\#mvc] framework\. Struts provides Controller and View components, and integrates with other technologies to provide the Model\. The framework's Controller acts as a bridge between the application's Model and the web View\. 
+
+To make it easier to present dynamic data, the framework includes a library of markup tags\. The tags interact with the framework's validation and internationalization features, to ensure that input is correct and output is localized\. The tag library can be used with JSP, FreeMarker, or Velocity\. Of course, other tag libraries, JSTL, and AJAX can also be used, with or without the Struts tags\. JavaServer Faces components are also supported\.
+
+When a request is received, the Controller invokes an Action class\. The Action class examines or updates the application's state by consulting the Model (or, preferably, an interface representing the Model)\. To transfer data between the Model and the View, properties can be placed on the Action class, or on a plain old JavaBean\. 
+
+Most often, the Model is represented as a graph of JavaBean objects\. The Model should do the "heavy lifting", and the Action will act as a "traffic cop" or adapter\. The framework provides sophisticated, automatic type conversion to simplify transfering data between rich domain objects and text\-only HTTP requests\. 
+
+Struts is extensible\. _Very_  extensible\. Every class deployed by the framework is based on an interface\. We provide all the base classes an application may ever need, but if we missed something, it's easy to add your own\. We provide the general\-purpose framework, but you can still write _your_  application _your_  way\.
+
+####Is Struts the best choice for every project?####
+
+Apache Struts 2 helps you create an extensible development environment for enterprise\-grade applications, based on industry standards and proven design patterns\. If you need to write a very simple application, with a handful of pages, then you might consider a "Model 1" solution that uses only server pages\.
+
+But, if you are writing a more complicated application, with dozens of pages, that need to be maintained over time, then Struts can help\. For more about whether Model 1 or MVC/Model 2 is right for you, see [Understanding JavaServer Pages Model 2 architecture](http://www\.javaworld\.com/javaworld/jw\-12\-1999/jw\-12\-ssj\-jspmvc\.html)^[http://www\.javaworld\.com/javaworld/jw\-12\-1999/jw\-12\-ssj\-jspmvc\.html]\. 
+
+####Platform Requirements####
+
+Struts 2 requires 
+
++ Servlet API 2\.4
+
++ JSP API 2\.0
+
++ Java 5
+
+For a full list of requirements, including dependencies used by optional plugins, see [Project Dependencies](http://struts\.apache\.org/2\.x/struts2\-core/dependencies\.html)^[http://struts\.apache\.org/2\.x/struts2\-core/dependencies\.html]
+
+ (ok)  An alternate set of JARs for Java 4 are also available\. See the "J4" distribution\. 
+

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/object-factory.md
----------------------------------------------------------------------
diff --git a/source/core-developers/object-factory.md b/source/core-developers/object-factory.md
new file mode 100644
index 0000000..21c2175
--- /dev/null
+++ b/source/core-developers/object-factory.md
@@ -0,0 +1,105 @@
+---
+layout: core-developers
+title: ObjectFactory
+---
+
+# ObjectFactory
+
+All objects created by the framework are instantiated by the ObjectFactory\. The ObjectFactory provides the means of integrating the framework with IoC containers like Spring, Pico, Plexus, and so forth\.
+
+####Customize####
+
+#####Extend ObjectFactory#####
+
+
+Customized ObjectFactory must extend ObjectFactory or any of its descendants and have a default, no\-argument constructor\.
+
+| 
+
+To register a customized ObjectFactory, add or edit an entry in 
+
+~~~~~~~
+struts.properties
+~~~~~~~
+
+
+
+~~~~~~~
+ struts.objectFactory=foo.bar.MyCustomObjectFactory
+
+~~~~~~~
+
+where foo\.bar\.MyCustomObjectFactory is the custom object factory\.
+
+
+~~~~~~~
+public class MyObjectFactory extends ObjectFactory {
+    .....
+}
+
+~~~~~~~
+
+#####Define dedicated factory#####
+
+If you want to just extend one part of ObjectFactory, ie\. to change how [Result Types](result-types.html) are build, you can implement 
+
+~~~~~~~
+ResultFactory
+~~~~~~~
+ interface and register it with dedicated name, see _Extension Points_  for more details\. Original ObjectFactory will use these dedicated factories to do the work\. It's already done this way \- the original functionality of ObjectFactory was extracted to separated classes which implements the interfaces below\. Check the source of ObjectFactory to see more details\. All these factories are available as from version 2\.3\.16\.
+
+List of Factory interfaces:
+
++ 
+
+~~~~~~~
+ResultFactory
+~~~~~~~
+ \- dedicated interfaces used by  to create [Result Types](result-types.html)
+
+  + 
+
+~~~~~~~
+StrutsResultFactory
+~~~~~~~
+ it's internal implementation which checks if Result implements 
+
+~~~~~~~
+ParamNameAwareResult
+~~~~~~~
+ interface to restrict names of parameters set on the instance of Result, see [Result Types](result-types.html) for more info\.
+
++ 
+
+~~~~~~~
+ActionFactory
+~~~~~~~
+ \- dedicated interface used by  to actions
+
++ 
+
+~~~~~~~
+InterceptorFactory
+~~~~~~~
+ \- dedicated interface used by  to create interceptors
+
++ 
+
+~~~~~~~
+ValidatorFactory
+~~~~~~~
+ \- dedicated interface used by  to create validators
+
++ 
+
+~~~~~~~
+ConverterFactory
+~~~~~~~
+ \- dedicated interface used by  to create instances of _TypeConverter_ 
+
++ 
+
+~~~~~~~
+UnknownHandlerFactory
+~~~~~~~
+ \- dedicated interfaces used by  to create instances of [Unknown Handlers](unknown-handlers.html) (as from version 2\.3\.18)

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/package-configuration.md
----------------------------------------------------------------------
diff --git a/source/core-developers/package-configuration.md b/source/core-developers/package-configuration.md
new file mode 100644
index 0000000..d1ec9ed
--- /dev/null
+++ b/source/core-developers/package-configuration.md
@@ -0,0 +1,98 @@
+---
+layout: core-developers
+title: Package Configuration
+---
+
+# Package Configuration
+
+Packages are a way to group actions, results, result types, interceptors, and interceptor\-stacks into a logical configuration unit\. Conceptually, packages are similiar to objects in that they can be extended and have individual parts that can be overridden by "sub" packages\.
+
+#####Packages#####
+
+The package element has one required attribute, 
+
+~~~~~~~
+name
+~~~~~~~
+, which acts as the key for later reference to the package\. The 
+
+~~~~~~~
+extends
+~~~~~~~
+ attribute is optional and allows one package to inherit the configuration of one or more previous packages \- including all interceptor, interceptor\-stack, and action configurations\.
+
+ (\!)  Note that the configuration file is processed sequentially down the document, so the package referenced by an "extends" should be defined _above_  the package which extends it\.
+
+The optional 
+
+~~~~~~~
+abstract
+~~~~~~~
+ attribute creates a base package that can omit the action configuration\.
+
+| Attribute | Required | Description |
+|-----------|----------|-------------|
+| name |**yes**| key to for other packages to reference |
+| extends | no | inherits package behavior of the package it extends |
+| namespace | no | see [Namespace Configuration](#PAGE_14276)|
+| abstract | no | declares package to be abstract (no action configurations required in package) |
+
+__Simple usage__
+
+**Package Example (struts\.xml)**
+
+
+~~~~~~~
+
+<struts>
+  <package name="employee" extends="struts-default" namespace="/employee">
+    <default-interceptor-ref name="crudStack"/>
+
+    <action name="list" method="list"
+      class="org.apache.struts2.showcase.action.EmployeeAction" >
+        <result>/empmanager/listEmployees.jsp</result>
+        <interceptor-ref name="basicStack"/>
+    </action>
+    <action name="edit-*" class="org.apache.struts2.showcase.action.EmployeeAction">
+      <param name="empId">{1}</param>
+      <result>/empmanager/editEmployee.jsp</result>
+        <interceptor-ref name="crudStack">
+          <param name="validation.excludeMethods">execute</param>
+        </interceptor-ref>
+      </action>
+      <action name="save" method="save"
+          class="org.apache.struts2.showcase.action.EmployeeAction" >
+        <result name="input">/empmanager/editEmployee.jsp</result>
+        <result type="redirect">edit-${currentEmployee.empId}.action</result>
+      </action>
+      <action name="delete" method="delete"
+        class="org.apache.struts2.showcase.action.EmployeeAction" >
+        <result name="error">/empmanager/editEmployee.jsp</result>
+        <result type="redirect">edit-${currentEmployee.empId}.action</result>
+      </action>
+  </package>
+</struts>
+
+~~~~~~~
+
+__Inherit from more than one package__
+
+**Multi package Example (struts\.xml)**
+
+
+~~~~~~~
+
+<struts>
+  <package name="employee" extends="struts-default, json-default" namespace="/employee">
+
+    <action name="list" method="list" class="org.apache.struts2.showcase.action.EmployeeAction" >
+        <result>/empmanager/listEmployees.jsp</result>
+        <result type="json">
+            <param name="root">employees</param>
+        </result>
+    </action>
+
+  </package>
+</struts>
+
+~~~~~~~
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/parameter-filter-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/parameter-filter-interceptor.md b/source/core-developers/parameter-filter-interceptor.md
new file mode 100644
index 0000000..be7d0c5
--- /dev/null
+++ b/source/core-developers/parameter-filter-interceptor.md
@@ -0,0 +1,43 @@
+---
+layout: core-developers
+title: Parameter Filter Interceptor
+---
+
+# Parameter Filter Interceptor
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=com.opensymphony.xwork2.interceptor.ParameterFilterInterceptor}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.interceptor.ParameterFilterInterceptor}
+~~~~~~~
+
+#####Example#####
+
+
+
+~~~~~~~
+
+<interceptors>
+    ... 
+    <interceptor name="parameterFilter" class="com.opensymphony.xwork2.interceptor.ParameterFilterInterceptor"/>
+    ... 
+</interceptors>
+
+<action ....> 
+     ... 
+     <interceptor-ref name="parameterFilter"> 
+          <param name="blocked">person,person.address.createDate,personDao</param> 
+     </interceptor-ref> 
+     ... 
+</action>
+
+~~~~~~~
+

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/parameters-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/parameters-interceptor.md b/source/core-developers/parameters-interceptor.md
new file mode 100644
index 0000000..7f50afa
--- /dev/null
+++ b/source/core-developers/parameters-interceptor.md
@@ -0,0 +1,228 @@
+---
+layout: core-developers
+title: Parameters Interceptor
+---
+
+# Parameters Interceptor
+
+This interceptor sets all parameters on the value stack\.
+
+This interceptor gets all parameters from \{@link ActionContext\#getParameters()\} and sets them on the value stack by calling 
+
+~~~~~~~
+ValueStack#setValue(String, Object)
+~~~~~~~
+, typically resulting in the values submitted in a form request being applied to an action in the value stack\. Note that the parameter map must contain a String key and often containers a String\[\] for the value\.
+
+The interceptor takes one parameter named 'ordered'\. When set to true action properties are guaranteed to be set top\-down which means that top action's properties are set first\. Then it's subcomponents properties are set\. The reason for this order is to enable a 'factory' pattern\. For example, let's assume that one has an action that contains a property named 
+
+~~~~~~~
+modelClass
+~~~~~~~
+ that allows to choose what is the underlying implementation of model\. By assuring that 
+
+~~~~~~~
+modelClass
+~~~~~~~
+ property is set before any model properties are set, it's possible to choose model implementation during 
+
+~~~~~~~
+action.setModelClass()
+~~~~~~~
+ call\. Similarly it's possible to use 
+
+~~~~~~~
+action.setPrimaryKey() 
+~~~~~~~
+property set call to actually load the model class from persistent storage\. Without any assumption on parameter order you have to use patterns like _Preparable Interface_ \.
+
+Because parameter names are effectively OGNL statements, it is important that security be taken in to account\. This interceptor will not apply any values in the parameters map if the expression contains an assignment (=), multiple expressions (,), or references any objects in the context (\#)\. This is all done in the 
+
+~~~~~~~
+#acceptableName(String)
+~~~~~~~
+ method\. In addition to this method, if the action being invoked implements the 
+
+~~~~~~~
+ParameterNameAware
+~~~~~~~
+ interface, the action will be consulted to determine if the parameter should be set\.
+In addition to these restrictions, a flag ( 
+
+~~~~~~~
+ReflectionContextState#DENY_METHOD_EXECUTION
+~~~~~~~
+ ) is set such that no methods are allowed to be invoked\. That means that any expression such as 
+
+~~~~~~~
+person.doSomething()
+~~~~~~~
+ or 
+
+~~~~~~~
+person.getName()
+~~~~~~~
+ will be explicitly forbidden\. This is needed to make sure that your application is not exposed to attacks by malicious users\.
+
+While this interceptor is being invoked, a flag ( 
+
+~~~~~~~
+ReflectionContextState#CREATE_NULL_OBJECTS
+~~~~~~~
+ ) is turned on to ensure that any null reference is automatically created \- if possible\. See the type conversion documentation and the 
+
+~~~~~~~
+InstantiatingNullHandler
+~~~~~~~
+ javadocs for more information\.
+
+Finally, a third flag ( 
+
+~~~~~~~
+XWorkConverter#REPORT_CONVERSION_ERRORS
+~~~~~~~
+ ) is set that indicates any errors when converting the the values to their final data type (String\[\] \-&gt; int) an unrecoverable error occurred\. With this flag set, the type conversion errors will be reported in the action context\. See the type conversion documentation and the 
+
+~~~~~~~
+XWorkConverter
+~~~~~~~
+ javadocs for more information\.
+
+If you are looking for detailed logging information about your parameters, turn on 
+
+~~~~~~~
+DEBUG
+~~~~~~~
+ level logging for this interceptor\. A detailed log of all the parameter keys and values will be reported\.
+
+
+
+Since XWork 2\.0\.2, this interceptor extends MethodFilterInterceptor, therefore being able to deal with excludeMethods / includeMethods parameters\. See [Default Workflow Interceptor](default-workflow-interceptor.html) for documentation and examples on how to use this feature\.
+
+| 
+
+For more information on ways to restrict the parameter names allowed, see the 
+
+~~~~~~~
+ParameterNameAware
+~~~~~~~
+ javadocs\.
+
+#####Parameters#####
+
++ 
+
+~~~~~~~
+ordered
+~~~~~~~
+ \- set to true if you want the top\-down property setter behaviour
+
++ 
+
+~~~~~~~
+acceptParamNames
+~~~~~~~
+ \- a comma delimited list of regular expressions to describe a whitelist of accepted parameter names\. Don't change the default unless you know what you are doing in terms of security implications
+
++ 
+
+~~~~~~~
+excludeParams
+~~~~~~~
+ \- a comma delimited list of regular expressions to describe a blacklist of not allowed parameter names
+
++ 
+
+~~~~~~~
+paramNameMaxLength
+~~~~~~~
+ \- the maximum length of parameter names; parameters with longer names will be ignored; the default is 100 characters
+
+#####Excluding parameters#####
+
+This interceptor can be forced to ignore parameters, by setting its _excludeParams_  attribute\. This attribute accepts a comma separated list of regular expressions\. When any of these expressions match the name of a parameter, such parameter will be ignored by the interceptor\. Interceptor stacks defined by Struts already exclude some parameters:
+
+**Default List of Parameters Excluded**
+
+
+~~~~~~~
+dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*
+
+~~~~~~~
+
+Below is an example of adding a parameter named submit to the list of parameters that should be excluded\.
+
+**Setup Interceptor Stack To Exclude submit Parameter**
+
+
+~~~~~~~
+<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" />
+
+~~~~~~~
+
+#####Extending the Interceptor#####
+
+The best way to add behavior to this interceptor is to utilize the 
+
+~~~~~~~
+ParameterNameAware
+~~~~~~~
+ interface in your actions\. However, if you wish to apply a global rule that isn't implemented in your action, then you could extend this interceptor and override the 
+
+~~~~~~~
+#acceptableName(String)
+~~~~~~~
+ method\.
+
+
+> 
+
+> 
+
+> Using ParameterNameAware could be dangerous as ParameterNameAware\#acceptableParameterName(String) takes precedence over ParametersInterceptor which means if ParametersInterceptor excluded given parameter name you can accept it with ParameterNameAware\#acceptableParameterName(String)\.
+
+> 
+
+> 
+
+> The best idea is to define very tight restrictions with ParametersInterceptor and relax them per action with ParameterNameAware\#acceptableParameterName(String)
+
+> 
+
+#####Warning on missing parameters#####
+
+When there is no setter for given parameter name, a warning message like below will be logged in devMode:
+
+
+~~~~~~~
+SEVERE: Developer Notification (set struts.devMode to false to disable this message):
+Unexpected Exception caught setting 'search' on 'class demo.ItemSearchAction: Error setting expression 'search' with value ['search', ]
+Error setting expression 'search' with value ['search', ] - [unknown location]
+	at com.opensymphony.xwork2.ognl.OgnlValueStack.handleRuntimeException(OgnlValueStack.java:201)
+	at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:178)
+	at com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:152)
+
+~~~~~~~
+
+Thus is expected behaviour to allow developer to spot missing setter or typo in either parameter name or setter\.
+
+#####Examples#####
+
+
+
+~~~~~~~
+<action name="someAction" class="com.examples.SomeAction">
+  <interceptor-ref name="params"/>
+  <result name="success">good_result.ftl</result>
+</action>
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/parent-package-annotation.md
----------------------------------------------------------------------
diff --git a/source/core-developers/parent-package-annotation.md b/source/core-developers/parent-package-annotation.md
new file mode 100644
index 0000000..fd4a8c8
--- /dev/null
+++ b/source/core-developers/parent-package-annotation.md
@@ -0,0 +1,28 @@
+---
+layout: core-developers
+title: ParentPackage Annotation
+---
+
+# ParentPackage Annotation
+
+The 
+
+~~~~~~~
+@ParentPackage
+~~~~~~~
+ annotation allows the definition of 
+
+~~~~~~~
+Action
+~~~~~~~
+'s package for an action found via [Zero Configuration](zero-configuration.html)\.
+
+#####Usage#####
+
+This annotation is placed at the class level\.
+
+#####Parameters#####
+
+| Name | Type | Required | Description |
+|------|------|----------|-------------|
+| value | String | true | Names the package the action will inherit\. |

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/performance-tuning.md
----------------------------------------------------------------------
diff --git a/source/core-developers/performance-tuning.md b/source/core-developers/performance-tuning.md
new file mode 100644
index 0000000..42de03c
--- /dev/null
+++ b/source/core-developers/performance-tuning.md
@@ -0,0 +1,73 @@
+---
+layout: core-developers
+title: Performance Tuning
+---
+
+# Performance Tuning
+
+####Performance tuning####
+
+The following are some tips and tricks to squeeze the most performance out of Struts 2\.
+
+
+
+| For Struts 2 versions before 2\.3: the OGNL version 3\.0\.3 library is a drop\-in replacement for older OGNL jars, and provides **much** better performance\. See the following Jira issue for more information: [https://issues\.apache\.org/jira/browse/WW\-3580](https://issues\.apache\.org/jira/browse/WW\-3580)
+
+| 
+
+#####Turn off logging and devMode\.#####
+
+[devMode](development-mode.html) allows reloading of configuration and validation related files, but because they happen on each request, this setting will totally kill your performance\.
+ When using logging, make sure to turn off logging (esp\. Freemarker generates a LOT of logging), and check if a level is enabled before printing it, or you will get the cost of the String parsing/concatination anyways\.
+
+#####Use the Java Templates#####
+
+If you use the simple theme, and do not overwrite any of the FreeMarker templates, consider using the _java templates_ , which provide a drop in replacement for most tags, and are a lot faster than the regular tags\.
+
+#####Do not use interceptors you do not need\.#####
+
+If you do not require a full stack of interceptors for an Action, then try using a different one (basicStack), or remove interceptors you do not need\. Remove the I18nInterceptor interceptor if you don't need it, as it can cause a session to be created\.
+
+#####Use the correct HTTP headers (Cache\-Control & Expires)\.#####
+
+When returning HTML views, make sure to add the correct headers so browsers know how to cache them\.
+
+#####Copy the static content from the Struts 2 jar when using the Ajax theme (Dojo) or the Calendar tag\.#####
+
+Struts 2 uses some external javascript libraries and cascading stylesheets for certain themes and tags\. These by default are located inside the Struts 2 jar, and a special filter returns them when requesting a special path (/struts)\. Although Struts 2 can handle these requests, an application/servlet container is not optimized for these kind of requests\. Consider moving these \.js and \.css files to a seperated server (Lighttpd, Apache HTTPD, \.\.)\.
+
+#####Create a freemarker\.properties file in your WEB\-INF/classes directory\.#####
+
+Create the freemarker\.properties file and add the following setting (or whatever value you deem fitting):
+
+
+~~~~~~~
+template_update_delay=60000
+
+~~~~~~~
+
+This value determines how often Freemarker checks if it needs to reloads the templates from disk\. The default value is 500 ms\. Since there is no reason to check if a template needs reloading, it is best to set this to a very large value\. Note that this value is in seconds and freemarker will convert this value to milliseconds\.
+
+You can also use _struts\.freemarker\.templatesCache\.updateDelay_  constant to achieve the same effect\.
+
+See also: [Freemarker configuration properties](http://freemarker\.sourceforge\.net/docs/api/freemarker/template/Configuration\.html\#setSetting(java\.lang\.String,%20java\.lang\.String))^[http://freemarker\.sourceforge\.net/docs/api/freemarker/template/Configuration\.html\#setSetting(java\.lang\.String,%20java\.lang\.String)]
+
+#####Enable Freemarker template caching#####
+
+As of Struts 2\.0\.10, setting the property _struts\.freemarker\.templatesCache_  to true will enable the Struts internal caching of Freemarker templates\. This property is set to false by default\.
+
+In Struts versions prior to 2\.0\.10, you had to copy the /template directory from the Struts 2 jar in your WEB\_APP root to utilize Freemarker's built in chaching mechanism in order to achieve similar results\.
+
+The built in Freemarker caching mechanism fails to properly cache templates when they are retrieved from the classpath\. Copying them to the WEB\_APP root allows Freemarker to cache them correctly\. Freemarker looks at the last modified time of the template to determine if it needs to reload the templates\. Resources retrieved from the classpath have no last modified time, so Freemarker will reload them on every request\.
+
+#####When overriding a theme, copy all necessary templates to the theme directory\.#####
+
+There's a performance cost when a template cannot be found in the current directory\. The reason for this is that Struts 2 must check for a template in the current theme first before falling back to the parent theme\. In the future, this penalty could be eliminated by implementing a missing template cache in Struts 2\.
+
+#####Do not create sessions unless you need them\.#####
+
+Struts 2 does not create sessions unless asked to (for example, by having the createSession interceptor in your interceptor stack)\. Note that when you use SiteMesh however, a session will **always** be created (See [http://forums\.opensymphony\.com/thread\.jspa?messageID=5688](http://forums\.opensymphony\.com/thread\.jspa?messageID=5688) for details)\. The I18nInterceptor interceptor can create sessions, so make sure you remove it, if you don't need it\.
+
+#####When using Freemarker, try to use the Freemarker equivalent rather than using the JSP tags\.#####
+
+Freemarker has support for iterating lists, displaying properties, including other templates, macro's, and so on\. There is a small performance cost when using the S2 tags instead of the Freemarker equivalent (eg\. \<s:property value="foo"/\> should be replaced by \$\{foo\})\.

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/plaintext-result.md
----------------------------------------------------------------------
diff --git a/source/core-developers/plaintext-result.md b/source/core-developers/plaintext-result.md
new file mode 100644
index 0000000..74777fe
--- /dev/null
+++ b/source/core-developers/plaintext-result.md
@@ -0,0 +1,28 @@
+---
+layout: core-developers
+title: PlainText Result
+---
+
+# PlainText Result
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=org.apache.struts2.dispatcher.PlainTextResult}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=params|javadoc=true|url=org.apache.struts2.dispatcher.PlainTextResult}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.dispatcher.PlainTextResult}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/postback-result.md
----------------------------------------------------------------------
diff --git a/source/core-developers/postback-result.md b/source/core-developers/postback-result.md
new file mode 100644
index 0000000..baae824
--- /dev/null
+++ b/source/core-developers/postback-result.md
@@ -0,0 +1,30 @@
+---
+layout: core-developers
+title: Postback Result
+---
+
+# Postback Result
+
+####Description####
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=org.apache.struts2.dispatcher.PostbackResult}
+~~~~~~~
+
+####Parameters####
+
+
+
+~~~~~~~
+{snippet:id=params|javadoc=true|url=org.apache.struts2.dispatcher.PostbackResult}
+~~~~~~~
+
+####Examples####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.dispatcher.PostbackResult}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/pre-result-listener.md
----------------------------------------------------------------------
diff --git a/source/core-developers/pre-result-listener.md b/source/core-developers/pre-result-listener.md
new file mode 100644
index 0000000..44d106c
--- /dev/null
+++ b/source/core-developers/pre-result-listener.md
@@ -0,0 +1,55 @@
+---
+layout: core-developers
+title: PreResultListener
+---
+
+# PreResultListener
+
+A PreResultListener can affect an action invocation between the interceptor/action phase and the result phase\. Typical uses include switching to a different Result or somehow modifying the Result or Action objects before the Result executes\. 
+
+####Examples####
+
+A PreResultListener can be added by an Action or an Interceptor\.
+
+#####By an Action#####
+
+
+
+~~~~~~~
+
+  public class MyAction extends ActionSupport {
+     ...
+     public String execute() throws Exception {
+         ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
+         invocation.addPreResultListener(new PreResultListener() {
+              public void beforeResult(ActionInvocation invocation, 
+                                       String resultCode) {
+                  // perform operation necessary before Result execution
+              }
+         });
+     }
+     ...
+  }
+
+~~~~~~~
+
+#####By an Interceptor#####
+
+
+
+~~~~~~~
+
+  public class MyInterceptor extends AbstractInterceptor {
+     ...
+      public String intercept(ActionInvocation invocation) throws Exception {
+         invocation.addPreResultListener(new PreResultListener() {
+              public void beforeResult(ActionInvocation invocation, 
+                                       String resultCode) {
+                  // perform operation necessary before Result execution
+              }
+         });
+      }
+     ...
+  }
+
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/prepare-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/prepare-interceptor.md b/source/core-developers/prepare-interceptor.md
new file mode 100644
index 0000000..8114096
--- /dev/null
+++ b/source/core-developers/prepare-interceptor.md
@@ -0,0 +1,41 @@
+---
+layout: core-developers
+title: Prepare Interceptor
+---
+
+# Prepare Interceptor
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=com.opensymphony.xwork2.interceptor.PrepareInterceptor}
+~~~~~~~
+
+
+~~~~~~~
+{snippet:id=javadocPrepareInterceptor|javadoc=true|url=com.opensymphony.xwork2.interceptor.PrefixMethodInvocationUtil}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.interceptor.PrepareInterceptor}
+~~~~~~~
+
+#####Extending the Interceptor#####
+
+
+
+~~~~~~~
+{snippet:id=extending|javadoc=true|url=com.opensymphony.xwork2.interceptor.PrepareInterceptor}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=com.opensymphony.xwork2.interceptor.PrepareInterceptor}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/pure-java-script-client-side-validation.md
----------------------------------------------------------------------
diff --git a/source/core-developers/pure-java-script-client-side-validation.md b/source/core-developers/pure-java-script-client-side-validation.md
new file mode 100644
index 0000000..6bb74b9
--- /dev/null
+++ b/source/core-developers/pure-java-script-client-side-validation.md
@@ -0,0 +1,49 @@
+---
+layout: core-developers
+title: Pure JavaScript Client Side Validation
+---
+
+# Pure JavaScript Client Side Validation#### {#PAGE_14262}
+
+Pure JavaScript client side validation is the simplest but least feature\-rich type of [Client Side Validation](client-side-validation.html). 
+This type of validation uses 100% client\-side JavaScript code to try to validate the values entered by the user. 
+Because the validation logic is actually repeated in the JavaScript code, it is important to understand that 
+some values will be considered acceptable by the JavaScript code but will be marked as unacceptable by the server\-side [Validation](validation.html).
+
+
+~~~~~~~
+{snippet:id=supported-validators|url=struts2/core/src/main/resources/template/xhtml/form-close-validate.ftl}
+~~~~~~~
+
+
+> 
+
+> 
+
+> JavaScript client validation is not available for visitor validations\.
+
+> 
+
+__Error reporting__
+
+Because client side validation does not talk to the server, the theme (_xhtml theme_  or _css\_xhtml theme_ ) is responsible for properly manipulating the HTML DOM to display the error message inline\. The JavaScript that is responsible for doing this logic is 
+
+~~~~~~~
+validation.js
+~~~~~~~
+ and can be found in each theme\.
+
+
+
+| Errors are reported using the default validation message, not the internationalized version that the server\-side might be aware of\. This is a known issue\. You may want to try the [AJAX Client Side Validation](ajax-client-side-validation.html) for messages that are fully internationalized\.
+
+| 
+
+__Additional Validator Support__
+
+If you wish to add additional validator support beyond those listed, you may override the _xhtml theme_  teamplte 
+
+~~~~~~~
+form-close-validate.ftl
+~~~~~~~
+\. This file contains the JavaScript that tries to validate each user\-entered value from within the browswer\. The _css\_xhtml theme_  extends the _xhtml theme_  and therefore doesn't have it's own form\-close\-validate\.ftl template\.

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/redirect-action-result.md
----------------------------------------------------------------------
diff --git a/source/core-developers/redirect-action-result.md b/source/core-developers/redirect-action-result.md
new file mode 100644
index 0000000..ed7a123
--- /dev/null
+++ b/source/core-developers/redirect-action-result.md
@@ -0,0 +1,57 @@
+---
+layout: core-developers
+title: Redirect Action Result
+---
+
+# Redirect Action Result
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=org.apache.struts2.result.ServletActionRedirectResult}
+~~~~~~~
+
+
+See [ActionMapper](action-mapper.html) for more details
+
+| 
+
+####Parameters####
+
+
+
+~~~~~~~
+{snippet:id=params|javadoc=true|url=org.apache.struts2.result.ServletActionRedirectResult}
+~~~~~~~
+
+####Examples####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.result.ServletActionRedirectResult}
+~~~~~~~
+
+
+
+~~~~~~~
+<!--
+	Example of "anchor" param usage in conjunction with "redirectAction" result-type.
+
+	Generated URL: /displayReport.action#SUMMARY
+-->
+
+<action name="displayReport">
+	<result>/jsp/displayReport.jsp</result>
+</action>
+
+<action name="financeReport" class="com.mycompany.reports.FinanceReportAction"> 
+	<result name="input">/jsp/index.jsp</result>            
+	<result name="success" type="redirectAction">
+		<param name="actionName">displayReport</param>
+		<param name="parse">false</param>
+		<param name="anchor">SUMMARY</param>
+	</result>
+</action>
+
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/redirect-result.md
----------------------------------------------------------------------
diff --git a/source/core-developers/redirect-result.md b/source/core-developers/redirect-result.md
new file mode 100644
index 0000000..82d3d59
--- /dev/null
+++ b/source/core-developers/redirect-result.md
@@ -0,0 +1,51 @@
+---
+layout: core-developers
+title: Redirect Result
+---
+
+# Redirect Result
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=org.apache.struts2.result.ServletRedirectResult}
+~~~~~~~
+
+####Parameters####
+
+
+
+~~~~~~~
+{snippet:id=params|javadoc=true|url=org.apache.struts2.result.ServletRedirectResult}
+~~~~~~~
+
+####Examples####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.result.ServletRedirectResult}
+~~~~~~~
+
+
+
+~~~~~~~
+<package name="passingRequestParameters" extends="struts-default" namespace="/passingRequestParameters">
+   <-- Pass parameters (reportType, width and height) -->
+   <!--
+   The redirect url generated will be - the namespace of current acction will be appended as location doesn't start with "/":
+   /passingRequestParameters/generateReport.jsp?reportType=pie&width=100&height=100#summary
+   -->
+   <action name="gatherReportInfo" class="...">
+      <result name="showReportResult" type="redirect">
+         <param name="location">generateReport.jsp</param>
+         <param name="reportType">pie</param>
+         <param name="width">100</param>
+         <param name="height">100</param>
+         <param name="parse">false</param>
+         <param name="anchor">summary</param>
+      </result>
+   </action>
+</package>
+
+~~~~~~~
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/regex-field-validator-annotation.md
----------------------------------------------------------------------
diff --git a/source/core-developers/regex-field-validator-annotation.md b/source/core-developers/regex-field-validator-annotation.md
new file mode 100644
index 0000000..8b16b3c
--- /dev/null
+++ b/source/core-developers/regex-field-validator-annotation.md
@@ -0,0 +1,36 @@
+---
+layout: core-developers
+title: RegexFieldValidator Annotation
+---
+
+# RegexFieldValidator Annotation
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RegexFieldValidator}
+~~~~~~~
+
+#####Usage#####
+
+
+
+~~~~~~~
+{snippet:id=usage|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RegexFieldValidator}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RegexFieldValidator}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|javadoc=true|lang=java|url=com.opensymphony.xwork2.validator.annotations.RegexFieldValidator}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/regex-validator.md
----------------------------------------------------------------------
diff --git a/source/core-developers/regex-validator.md b/source/core-developers/regex-validator.md
new file mode 100644
index 0000000..17018a7
--- /dev/null
+++ b/source/core-developers/regex-validator.md
@@ -0,0 +1,35 @@
+---
+layout: core-developers
+title: regex validator
+---
+
+# regex validator
+
+####Description####
+
+
+
+~~~~~~~
+{snippet:id=javadoc|javadoc=true|url=com.opensymphony.xwork2.validator.validators.RegexFieldValidator}
+~~~~~~~
+
+####Parameters####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.validator.validators.RegexFieldValidator}
+~~~~~~~
+
+**(\!) Warning**
+
+
+> \{snippet:id=parameters\-warning|javadoc=true|url=com\.opensymphony\.xwork2\.validator\.validators\.RegexFieldValidator\}
+
+####Examples####
+
+
+
+~~~~~~~
+{snippet:id=example|javadoc=true|lang=xml|url=com.opensymphony.xwork2.validator.validators.RegexFieldValidator}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/reloading-configuration.md
----------------------------------------------------------------------
diff --git a/source/core-developers/reloading-configuration.md b/source/core-developers/reloading-configuration.md
new file mode 100644
index 0000000..55f91b7
--- /dev/null
+++ b/source/core-developers/reloading-configuration.md
@@ -0,0 +1,19 @@
+---
+layout: core-developers
+title: Reloading configuration
+---
+
+# Reloading configuration
+
+Struts allows for dynamic reloading of xml configuration file (ie, reloading actions\.xml)\.
+
+This allows you to reconfigure your action mapping during development\. There may be a slight performance penalty, so this is not recommended for production use\.
+
+In order to enable this feature, add the following to your struts\.properties file:
+
+
+~~~~~~~
+
+struts.configuration.xml.reload=true
+
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/required-field-validator-annotation.md
----------------------------------------------------------------------
diff --git a/source/core-developers/required-field-validator-annotation.md b/source/core-developers/required-field-validator-annotation.md
new file mode 100644
index 0000000..fc1886c
--- /dev/null
+++ b/source/core-developers/required-field-validator-annotation.md
@@ -0,0 +1,35 @@
+---
+layout: core-developers
+title: RequiredFieldValidator Annotation
+---
+
+# RequiredFieldValidator Annotation
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator}
+~~~~~~~
+
+#####Usage#####
+
+
+
+~~~~~~~
+{snippet:id=usage|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|javadoc=true|lang=java|url=com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/required-string-validator-annotation.md
----------------------------------------------------------------------
diff --git a/source/core-developers/required-string-validator-annotation.md b/source/core-developers/required-string-validator-annotation.md
new file mode 100644
index 0000000..d7554a7
--- /dev/null
+++ b/source/core-developers/required-string-validator-annotation.md
@@ -0,0 +1,36 @@
+---
+layout: core-developers
+title: RequiredStringValidator Annotation
+---
+
+# RequiredStringValidator Annotation
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RequiredStringValidator}
+~~~~~~~
+
+#####Usage#####
+
+
+
+~~~~~~~
+{snippet:id=usage|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RequiredStringValidator}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.validator.annotations.RequiredStringValidator}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|javadoc=true|lang=java|url=com.opensymphony.xwork2.validator.annotations.RequiredStringValidator}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/required-validator.md
----------------------------------------------------------------------
diff --git a/source/core-developers/required-validator.md b/source/core-developers/required-validator.md
new file mode 100644
index 0000000..ede31e0
--- /dev/null
+++ b/source/core-developers/required-validator.md
@@ -0,0 +1,30 @@
+---
+layout: core-developers
+title: required validator
+---
+
+# required validator
+
+####Description####
+
+
+
+~~~~~~~
+{snippet:id=javadoc|javadoc=true|url=com.opensymphony.xwork2.validator.validators.RequiredFieldValidator}
+~~~~~~~
+
+####Parameters####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.validator.validators.RequiredFieldValidator}
+~~~~~~~
+
+####Examples####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=com.opensymphony.xwork2.validator.validators.RequiredFieldValidator}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/requiredstring-validator.md
----------------------------------------------------------------------
diff --git a/source/core-developers/requiredstring-validator.md b/source/core-developers/requiredstring-validator.md
new file mode 100644
index 0000000..bb6c7d8
--- /dev/null
+++ b/source/core-developers/requiredstring-validator.md
@@ -0,0 +1,30 @@
+---
+layout: core-developers
+title: requiredstring validator
+---
+
+# requiredstring validator
+
+####Description####
+
+
+
+~~~~~~~
+{snippet:id=javadoc|javadoc=true|url=com.opensymphony.xwork2.validator.validators.RequiredStringValidator}
+~~~~~~~
+
+####Parameters####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.validator.validators.RequiredStringValidator}
+~~~~~~~
+
+####Examples####
+
+
+
+~~~~~~~
+{snippet:id=examples|lang=xml|javadoc=true|url=com.opensymphony.xwork2.validator.validators.RequiredStringValidator}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/restful-action-mapper.md
----------------------------------------------------------------------
diff --git a/source/core-developers/restful-action-mapper.md b/source/core-developers/restful-action-mapper.md
new file mode 100644
index 0000000..67147ca
--- /dev/null
+++ b/source/core-developers/restful-action-mapper.md
@@ -0,0 +1,184 @@
+---
+layout: core-developers
+title: RestfulActionMapper
+---
+
+# RestfulActionMapper
+
+
+A custom action mapper using the following format:
+
+
+~~~~~~~
+http://HOST/ACTION_NAME/PARAM_NAME1/PARAM_VALUE1/PARAM_NAME2/PARAM_VALUE2
+~~~~~~~
+
+You can have as many parameters you'd like to use\. Alternatively the URL can be shortened to the following:
+
+
+~~~~~~~
+http://HOST/ACTION_NAME/PARAM_VALUE1/PARAM_NAME2/PARAM_VALUE2
+~~~~~~~
+
+This is the same as:
+
+
+~~~~~~~
+http://HOST/ACTION_NAME/ACTION_NAME + "Id"/PARAM_VALUE1/PARAM_NAME2/PARAM_VALUE2
+~~~~~~~
+
+Suppose for example we would like to display some articles by id at using the following URL sheme:
+
+
+~~~~~~~
+http://HOST/article/Id
+~~~~~~~
+
+Your action just needs a setArticleId() method, and requests such as /article/1, /article/2, etc will all map to that URL pattern\.
+
+#####Restful2ActionMapper#####
+
+Improved restful action mapper that adds several ReST\-style improvements to action mapping, but supports fully\-customized URL's via XML\. The two primary REST enhancements are:
+
++ If the method is not specified (via '\!' or 'method:' prefix), the method is "guessed" at using ReST\-style conventions that examine the URL and the HTTP method\.
+
++ Parameters are extracted from the action name, if parameter name/value pairs are specified using PARAM\_NAME/PARAM\_VALUE syntax\.
+
+These two improvements allow a GET request for 'category/action/movie/Thrillers' to be mapped to the action name 'movie' with an id of 'Thrillers' with an extra parameter named 'category' with a value of 'action'\.  A single action mapping can then handle all CRUD operations using wildcards, e\.g\.
+
+
+~~~~~~~
+
+<action name="movie/*" className="app.MovieAction">
+    <param name="id">{1}</param>
+    ...
+</action>
+
+~~~~~~~
+
+This mapper supports the following parameters:
+
++ _struts\.mapper\.idParameterName_  \- if set, this value will be the name of the parameter under which the id is stored\.  The id will then be removed from the action name\.  This allows restful actions to not require wildcards\.
+
+The following URL's will invoke its methods:
+
+|Request                    |method called|
+|---------------------------|-------------|
+| GET: /movie/               |method="index" |
+| GET: /movie/Thrillers      | method="view", id="Thrillers" |
+| GET: /movie/Thrillers\!edit | method="edit", id="Thrillers" |
+| GET: /movie/new            | method="editNew" |
+| POST: /movie/              | method="create" |
+| PUT: /movie/Thrillers      | method="update", id="Thrillers" |
+| DELETE: /movie/Thrillers   | method="remove", id="Thrillers" |
+
+To simulate the HTTP methods PUT and DELETE, since they aren't supported by HTML, the HTTP parameter "\_\_http\_method" will be used\.
+
+The syntax and design for this feature was inspired by the REST support in Ruby on Rails\. See [Simple RESTful support](http://ryandaigle\.com/articles/2006/08/01/whats\-new\-in\-edge\-rails\-simply\-restful\-support\-and\-how\-to\-use\-it)^[http://ryandaigle\.com/articles/2006/08/01/whats\-new\-in\-edge\-rails\-simply\-restful\-support\-and\-how\-to\-use\-it]
+
+__Example__
+
+To use the Restful2ActionMapper in an existing struts application we have to change the strus\.mapper\.class constant and let it point to the Restful2ActionMapper
+
+
+~~~~~~~
+
+<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" />
+
+~~~~~~~
+
+The problem with the above approach is that we may break existing actions because the Restful2ActionMapper tries to guess the method name using conventions that aren't applicable to normal action classes\.
+
+To overcome the above problem, we have to use a different action mapper depending on the url we want to process\. REST actions will be processed by the Restful2ActionMapper and non\-REST actions by the DefaultActionMapper
+
+To achieve that we have to rely on namespaces and the PrefixBasedActionMapper that can choose which action mapper to use for a particular url based on a prefix (the action namespace)\.
+
+To put everything together, we create a package for our rest actions
+
+
+~~~~~~~
+
+<package name="rest" namespace="/rest" extends="struts-default">
+    ....interceptor config
+    <action name="movie/*" class="app.MovieAction">
+        <param name="id">{1}</param>
+        ....results
+    </action>
+    ....
+</package>
+
+~~~~~~~
+
+All other actions remain in their existing packages and namespaces we use the PrefixBasedActionMapper telling it to use the Restful2ActionMapper for actions in the /rest namespace and the DefaultActionMapper for all other actions
+
+
+~~~~~~~
+
+<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper" />
+<constant name="struts.mapper.prefixMapping" value="/rest:restful2,:struts" />
+
+~~~~~~~
+
+For the Restful2ActionMapper to work we also have to set
+
+
+~~~~~~~
+
+<constant name="struts.enable.SlashesInActionNames" value="true" />
+<constant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
+
+~~~~~~~
+
+__Unit testing__
+
+Below you will find a simple unit test to test how to test actions when 
+
+~~~~~~~
+Restful2ActionMapper
+~~~~~~~
+ is used\.
+
+
+~~~~~~~
+
+public class MovieActionTest extends StrutsJUnit4TestCase<MovieActionTest>{
+    
+    @Before
+    public void setUp() throws Exception {
+        //assumes Basic authentication
+        super.setUp();
+        String credentials = "username:password";
+        request.addHeader("authorization", "BASIC " + Base64.encodeBase64String(credentials.getBytes()));
+    }
+        
+    @Test
+    public void testIndex() throws Exception {
+        request.setMethod("get"); //Http method should be set
+        
+        ActionProxy proxy = getActionProxy("/rest/movie/");                        
+      
+        proxy.setExecuteResult(false);
+        String result = proxy.execute();
+        
+       //assertions ...        
+    }
+    
+    @Test
+    public void testView() throws Exception {
+        request.setMethod("get"); //Http method should be set
+              
+        ActionProxy proxy = getActionProxy("/rest/movie/1");                        
+        MovieAction movieAction = MovieAction.class.cast(proxy.getAction());
+           
+        proxy.setExecuteResult(false);
+        
+        String result = proxy.execute();
+        //assertions ...
+        assertEquals("1", movieAction.getId());         
+    }
+}
+
+~~~~~~~
+
+Thanks to Antonios Gkogkakis for the examples\!
+

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/result-annotation.md
----------------------------------------------------------------------
diff --git a/source/core-developers/result-annotation.md b/source/core-developers/result-annotation.md
new file mode 100644
index 0000000..15d49ae
--- /dev/null
+++ b/source/core-developers/result-annotation.md
@@ -0,0 +1,197 @@
+---
+layout: core-developers
+title: Result Annotation
+---
+
+# Result Annotation
+
+The 
+
+~~~~~~~
+@Result
+~~~~~~~
+ annotation allows the definition of 
+
+~~~~~~~
+Action
+~~~~~~~
+ results in the 
+
+~~~~~~~
+Action
+~~~~~~~
+ class rather than an XML file\.
+
+
+
+| The @Result annotation lives at the Action_class_  level and not the method level\. This matches what is found in an XML\-based Action configuration\. **Do not be tempted to annotate your Action's methods; it will not work\.**
+
+| 
+
+In order for 
+
+~~~~~~~
+@Result
+~~~~~~~
+ and 
+
+~~~~~~~
+@Results
+~~~~~~~
+ annotations to be configured correctly you must set the 
+
+~~~~~~~
+actionPackages
+~~~~~~~
+ filter 
+
+~~~~~~~
+init-param
+~~~~~~~
+ to a comma\-separated list of packages containing the annotated 
+
+~~~~~~~
+Action
+~~~~~~~
+ classes\. See [Zero Configuration](zero-configuration.html) for further information; there are 
+
+~~~~~~~
+Action
+~~~~~~~
+ class naming conventions if you don't implement the 
+
+~~~~~~~
+Action
+~~~~~~~
+ interface and other tidbits there\.
+
+#####@Result Annotation Parameters#####
+
+
+
+~~~~~~~
+{float:right|width=300px}
+  {info}
+    See org.apache.struts2.config.Result annotation JavaDocs.
+  {info}
+{float}
+~~~~~~~
+
++ name \- Result name; default 
+
+~~~~~~~
+Action.SUCCESS
+~~~~~~~
+
++ value \- Value of result (result destination)
+
++ type \- Type of result; default 
+
+~~~~~~~
+NullResult
+~~~~~~~
+\. For example:
+	
+
+  + 
+
+~~~~~~~
+NullResult.class
+~~~~~~~
+
+  + 
+
+~~~~~~~
+FreemarkerResult.class
+~~~~~~~
+
+  + 
+
+~~~~~~~
+PlainTextResult.class
+~~~~~~~
+
+  + 
+
+~~~~~~~
+VelocityResult.class
+~~~~~~~
+
+  + 
+
+~~~~~~~
+ServletDispatcherResult.class
+~~~~~~~
+
+  + 
+
+~~~~~~~
+ServletRedirectResult.class
+~~~~~~~
+
+  + 
+
+~~~~~~~
+ServletActionRedirectResult.class
+~~~~~~~
+ \- equivalent to the 
+
+~~~~~~~
+redirectAction
+~~~~~~~
+ type in XML config
+
+  + 
+
+~~~~~~~
+TilesResult.class
+~~~~~~~
+
+  + \.\. (for more result, please consult the API docs, and look for implementations of the XWork 
+
+~~~~~~~
+Result
+~~~~~~~
+ interface)
+
++ params \- An Array of the parameters in the form \{key1, value1, key2, value2\}
+
+#####@Result – Defining a Single Result#####
+
+Map the "success" result (explicitly named) to a Tile definition named "/home\.page"\.
+
+**Defining a Single Result**
+
+
+~~~~~~~
+
+@Result(name="success", value="/home.page", type=TilesResult.class)
+public class HomeAction extends ActionSupport {
+    // ...
+}
+
+~~~~~~~
+
+#####@Results – Defining Multiple Results#####
+
+Defines a set of results for an 
+
+~~~~~~~
+Action
+~~~~~~~
+\.
+
+**Defining Multiple Results**
+
+
+~~~~~~~
+
+@Results({
+    @Result(name="success", value="/home.page", type=TilesResult.class),
+    @Result(name="homeError", value="/homeError.page", type=TilesResult.class)
+})
+public class HomeAction extends ActionSupport {
+    // ....
+}
+
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/result-configuration.md
----------------------------------------------------------------------
diff --git a/source/core-developers/result-configuration.md b/source/core-developers/result-configuration.md
new file mode 100644
index 0000000..64b14bf
--- /dev/null
+++ b/source/core-developers/result-configuration.md
@@ -0,0 +1,272 @@
+---
+layout: core-developers
+title: Result Configuration
+---
+
+# Result Configuration
+
+
+When an _action_  class method completes, it returns a String\. The value of the String is used to select a result element\. An action mapping will often have a set of results representing different possible outcomes\. A standard set of result tokens are defined by the 
+
+~~~~~~~
+ActionSupport
+~~~~~~~
+ base class\.
+
+**Predefined result names**
+
+
+~~~~~~~
+String SUCCESS = "success";
+String NONE    = "none";
+String ERROR   = "error";
+String INPUT   = "input";
+String LOGIN   = "login";
+
+~~~~~~~
+
+Of course, applications can define other result tokens to match specific cases\.
+
+(information) Returning 
+
+~~~~~~~
+ActionSupport.NONE
+~~~~~~~
+ (or 
+
+~~~~~~~
+null
+~~~~~~~
+) from an _action_  class method causes the results processing to be skipped\. This is useful if the action fully handles the result processing such as writing directly to the HttpServletResponse OutputStream\.
+
+#####Result Elements#####
+
+The result element has two jobs\. First, it provides a logical name\. An 
+
+~~~~~~~
+Action
+~~~~~~~
+ can pass back a token like "success" or "error" without knowing any other implementation details\. Second, the result element provides a result type\. Most results simply forward to a server page or template, but other [Result Types](result-types.html) can be used to do more interesting things\.
+
+__Intelligent Defaults__
+
+Each package may set a default result type to be used if none is specified in a result element\. If one package extends another, the "child" package can set its own default result, or inherit one from the parent\.
+
+**Setting a default Result Type**
+
+
+~~~~~~~
+<result-types>
+   <result-type name="dispatcher" default="true"
+                class="org.apache.struts2.dispatcher.ServletDispatcherResult" />
+</result-types>
+~~~~~~~
+
+If a 
+
+~~~~~~~
+type
+~~~~~~~
+ attribute is not specified, the framework will use the default 
+
+~~~~~~~
+dispatcher
+~~~~~~~
+ type, which forwards to another web resource\. If the resource is a JavaServer Page, then the container will render it, using its JSP engine\.
+
+Likewise if the 
+
+~~~~~~~
+name
+~~~~~~~
+ attribute is not specified, the framework will give it the name "success"\.
+
+Using these intelligent defaults, the most often used result types also become the simplest\.
+
+**Result element without defaults**
+
+
+~~~~~~~
+<result name="success" type="dispatcher">
+    <param name="location">/ThankYou.jsp</param>
+</result>
+
+~~~~~~~
+
+**A Result element using some defaults**
+
+
+~~~~~~~
+<result>
+    <param name="location">/ThankYou.jsp</param>
+</result>
+
+~~~~~~~
+
+The 
+
+~~~~~~~
+param
+~~~~~~~
+ tag sets a property on the Result object\. The most commonly\-set property is 
+
+~~~~~~~
+location
+~~~~~~~
+, which usually specifies the path to a web resources\. The 
+
+~~~~~~~
+param
+~~~~~~~
+ attribute is another intelligent default\.
+
+**Result element using more defaults**
+
+
+~~~~~~~
+<result>/ThankYou.jsp</result>
+
+~~~~~~~
+
+Mixing results with intelligent defaults with other results makes it easier to see the "critical path"\.
+
+**Multiple Results**
+
+
+~~~~~~~
+<action name="Hello">
+    <result>/hello/Result.jsp</result>
+    <result name="error">/hello/Error.jsp</result>
+    <result name="input">/hello/Input.jsp</result>
+</action>
+
+~~~~~~~
+
+A special 'other' result can be configured by adding a result with name="\*"\. This result will only be selected if no result is found with a matching name\.
+
+**'\*' Other Result**
+
+
+~~~~~~~
+<action name="Hello">
+    <result>/hello/Result.jsp</result>
+    <result name="error">/hello/Error.jsp</result>
+    <result name="input">/hello/Input.jsp</result>
+    <result name="*">/hello/Other.jsp</result>
+</action>
+
+~~~~~~~
+
+(information) The name="\*" is **not** a wildcard pattern, it is a special name that is only selected if an exact match is not found\.
+
+ (\!)  In most cases if an action returns an unrecognized result name this would be a programming error and should be fixed\.
+
+__Multiple names__
+
+It is possible to define multiple names for the same result:
+
+
+~~~~~~~
+<action name="save">
+    <result>success.jsp</result>
+    <result name="error, input">input-form.jsp</result>
+</action>
+~~~~~~~
+
+Such functionality was added in Struts 2\.5
+
+#####Global Results#####
+
+Most often, results are nested with the action element\. But some results apply to multiple actions\. In a secure application, a client might try to access a page without being authorized, and many actions may need access to a "logon" result\.
+
+If actions need to share results, a set of global results can be defined for each package\. The framework will first look for a local result nested in the action\. If a local match is not found, then the global results are checked\.
+
+**Defining global results**
+
+
+~~~~~~~
+<global-results>
+    <result name="error">/Error.jsp</result>
+    <result name="invalid.token">/Error.jsp</result>
+    <result name="login" type="redirectAction">Logon!input</result>
+</global-results>
+
+~~~~~~~
+
+(light\-on) For more about results, see [Result Types](result-types.html).
+
+#####Dynamic Results#####
+
+A result may not be known until execution time\. Consider the implementation of a state\-machine\-based execution flow; the next state might depend on any combination of form input elements, session attributes, user roles, moon phase, etc\. In other words, determining the next action, input page, etc\. may not be known at configuration time\.
+
+Result values may be retrieved from its corresponding Action implementation by using EL expressions that access the Action's properties, just like the Struts 2 tag libraries\. So given the following Action fragment:
+
+**FragmentAction implementation**
+
+
+~~~~~~~
+private String nextAction;
+
+public String getNextAction() {
+    return nextAction;
+}
+
+~~~~~~~
+
+you might define a result like this:
+
+**FragmentAction configuration**
+
+
+~~~~~~~
+<action name="fragment" class="FragmentAction">
+    <result name="next" type="redirectAction">${nextAction}</result>
+</action>
+
+~~~~~~~
+
+If a 
+
+~~~~~~~
+FragmentAction
+~~~~~~~
+ method returns "next" the actual _value_  of that result will be whatever is in 
+
+~~~~~~~
+FragmentAction
+~~~~~~~
+'s 
+
+~~~~~~~
+nextAction
+~~~~~~~
+ property\. So 
+
+~~~~~~~
+nextAction
+~~~~~~~
+ may be computed based on whatever state information necessary then passed at runtime to "next"'s 
+
+~~~~~~~
+redirectAction
+~~~~~~~
+\.
+
+See _Parameters in configuration results_  for an expanded discussion\.
+
+ 
+
+#####Returning Result Objects#####
+
+Instead of configuring results and returning the name, it is possible to return a result object:
+
+
+~~~~~~~
+public Result runAction() {
+	ServletDispatcherResult result = new ServletDispatcherResult();
+	result.setLocation("input-form.jsp");
+	return result;
+}
+~~~~~~~
+
+ 

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/result-types.md
----------------------------------------------------------------------
diff --git a/source/core-developers/result-types.md b/source/core-developers/result-types.md
new file mode 100644
index 0000000..08880ff
--- /dev/null
+++ b/source/core-developers/result-types.md
@@ -0,0 +1,111 @@
+---
+layout: core-developers
+title: Result Types
+---
+
+# Result Types
+
+Most use cases can be divided into two phases\. First, we need to change or query the application's state, and then we need to present an updated view of the application\. The Action class manages the application's state, and the Result Type manages the view\.
+
+####Predefined Result Types####
+
+The framework provides several implementations of the 
+
+~~~~~~~
+com.opensymphony.xwork2.Result
+~~~~~~~
+ interface, ready to use in your own applications\.
+
+|[Chain Result](chain-result.html)|Used for [Action Chaining](action-chaining.html)|
+|---------------------------|---------------------------------------|
+|[Dispatcher Result](dispatcher-reult.html)|Used for web resource integration, including _JSP_  integration|
+|[FreeMarker Result](freemarker-result.html)|Used for _FreeMarker_  integration|
+|[HttpHeader Result](httpheader-result.html)|Used to control special HTTP behaviors|
+|[Redirect Result](redirect-result.html)|Used to redirect to another URL (web resource)|
+|[Redirect Action Result](redirect-action-result.html)|Used to redirect to another action mapping|
+|[Stream Result](stream-result.html)|Used to stream an InputStream back to the browser (usually for file downloads)|
+|[Velocity Result](velocity-result.html)|Used for _Velocity_  integration|
+|[XSL Result](xsl-result.html)|Used for XML/XSLT integration|
+|[PlainText Result](plaintext-result.html)|Used to display the raw content of a particular page (i\.e jsp, HTML)|
+|_Tiles 2 Result_ |Used to provide Tiles 2 integration|
+|_Tiles 3 Result_ |Used to provide Tiles 3 integration|
+|[Postback Result](postback-result.html)|Used to postback request parameters as a form to the specified destination|
+|_JSON Result_ |Used to serialize actions into JSON|
+
+#####Optional#####
+
+|_JasperReports Plugin_ |Used for _JasperReports Tutorial_  integration|Optional, third\-party plugin|
+|-----------------------|----------------------------------------------|-----------------------------|
+
+Additional Result Types can be created and plugged into an application by implementing the 
+
+~~~~~~~
+com.opensymphony.xwork2.Result
+~~~~~~~
+ interface\. Custom Result Types might include generating an email or JMS message, generating images, and so forth\.
+
+####Default Parameters####
+
+To minimize configuration, Results can be configured with a single value, which will be converted into a parameter, and each Result can specify which parameter this value should be set as\. For example, here is a result defined in XML that uses a default parameter:
+
+
+~~~~~~~
+<result type="freemarker">foo.fm</result>
+
+~~~~~~~
+
+That is the equivalent to this:
+
+
+~~~~~~~
+<result type="freemarker">
+  <param name="location">foo.vm</param>
+</result>
+
+~~~~~~~
+
+Since probably 95% of your actions won't need results that contain multiple parameters, this little shortcut saves you a significant amount of configuration\. It also follows that if you have specified the default parameter, you don't need to set the same parameter as a specifically\-named parameter\.
+
+####Registering Result Types####
+
+All Result Types are plugged in via the [Result Configuration](result-configuration.html).
+
+#####Extending#####
+
+You can always extend defined result types and implement whatever logic you need\. To simplify process of that, you can define your custom 
+
+~~~~~~~
+ResultFactory
+~~~~~~~
+ and use it with connection with custom interface which your Result implements\. Check [Define dedicated factory](object-factory.html) to see how to do it\.
+
+Struts 2 provides one such extension for you: 
+
+~~~~~~~
+ParamNameAwareResult
+~~~~~~~
+ interface when used with 
+
+~~~~~~~
+StrutsResultBuilder
+~~~~~~~
+ can limit parameters assigned to the result\. So you can simple extend existing result with such a functionality as below:
+
+
+~~~~~~~
+public class MyResult extends ServletDispatcherResult implements ParamNameAwareResult {
+
+    public boolean acceptableParamName(String name, String value) {
+        return "accept".equals(name);
+    }
+
+}
+
+~~~~~~~
+
+and then register it and use instead of default 
+
+~~~~~~~
+dispatcher
+~~~~~~~
+ result\.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/roles-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/roles-interceptor.md b/source/core-developers/roles-interceptor.md
new file mode 100644
index 0000000..cc9b5d8
--- /dev/null
+++ b/source/core-developers/roles-interceptor.md
@@ -0,0 +1,28 @@
+---
+layout: core-developers
+title: Roles Interceptor
+---
+
+# Roles Interceptor
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=org.apache.struts2.interceptor.RolesInterceptor}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=org.apache.struts2.interceptor.RolesInterceptor}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.interceptor.RolesInterceptor}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/scope-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/scope-interceptor.md b/source/core-developers/scope-interceptor.md
new file mode 100644
index 0000000..d9f3494
--- /dev/null
+++ b/source/core-developers/scope-interceptor.md
@@ -0,0 +1,65 @@
+---
+layout: core-developers
+title: Scope Interceptor
+---
+
+# Scope Interceptor
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=org.apache.struts2.interceptor.ScopeInterceptor}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=org.apache.struts2.interceptor.ScopeInterceptor}
+~~~~~~~
+
+#####Extending the Interceptor#####
+
+
+
+~~~~~~~
+{snippet:id=extending|javadoc=true|url=org.apache.struts2.interceptor.ScopeInterceptor}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.interceptor.ScopeInterceptor}
+~~~~~~~
+
+__Some more examples__
+
+The scope interceptor can be used to pass arbitrary objects from one action ActionA to another other ActionB, provided you have a getter in ActionA and and a similar setter in actionB\. Also, you should use a key parameter to make sure you tell ASF/WW which action gets which objects\. This allows you to mix several actions with several scopes, without running the risk of getting wrong objects\.
+
+
+~~~~~~~
+    		<action name="scopea" class="com.mevipro.test.action.ScopeActionA">
+			<result name="success" type="dispatcher">/jsp/test.jsp</result>
+			<interceptor-ref name="basicStack"/>
+			<interceptor-ref name="scope">
+				<param name="key">funky</param>
+        		<param name="session">person</param>
+        		<param name="autoCreateSession">true</param>
+    		</interceptor-ref>
+		</action>
+		<action name="scopeb" class="com.mevipro.test.action.ScopeActionB">
+			<result name="success" type="dispatcher">/jsp/test.jsp</result>
+			<interceptor-ref name="scope">
+				<param name="key">funky</param>
+        		<param name="session">person</param>
+        		<param name="autoCreateSession">true</param>
+    		</interceptor-ref>
+			<interceptor-ref name="basicStack"/>
+		</action>
+
+~~~~~~~
+
+Don't forget: you'll need at least a getPerson() getter in ScopeActionA and a setPerson(Person person) setter in ScopeActionB, ánd you need to make sure you specify the key (you don't need this if you only use one action, as in the example above)\. Without the key, the scope interceptor will store your variables, but won't set them on the other action\.

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/scoped-model-driven-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/scoped-model-driven-interceptor.md b/source/core-developers/scoped-model-driven-interceptor.md
new file mode 100644
index 0000000..a3e9bc9
--- /dev/null
+++ b/source/core-developers/scoped-model-driven-interceptor.md
@@ -0,0 +1,36 @@
+---
+layout: core-developers
+title: Scoped Model Driven Interceptor
+---
+
+# Scoped Model Driven Interceptor
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor}
+~~~~~~~
+
+#####Extending the Interceptor#####
+
+
+
+~~~~~~~
+{snippet:id=extending|javadoc=true|url=com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/servlet-config-interceptor.md
----------------------------------------------------------------------
diff --git a/source/core-developers/servlet-config-interceptor.md b/source/core-developers/servlet-config-interceptor.md
new file mode 100644
index 0000000..d8f28b6
--- /dev/null
+++ b/source/core-developers/servlet-config-interceptor.md
@@ -0,0 +1,36 @@
+---
+layout: core-developers
+title: Servlet Config Interceptor
+---
+
+# Servlet Config Interceptor
+
+
+
+~~~~~~~
+{snippet:id=description|javadoc=true|url=org.apache.struts2.interceptor.ServletConfigInterceptor}
+~~~~~~~
+
+#####Parameters#####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=org.apache.struts2.interceptor.ServletConfigInterceptor}
+~~~~~~~
+
+#####Extending the Interceptor#####
+
+
+
+~~~~~~~
+{snippet:id=extending|javadoc=true|url=org.apache.struts2.interceptor.ServletConfigInterceptor}
+~~~~~~~
+
+#####Examples#####
+
+
+
+~~~~~~~
+{snippet:id=example|lang=xml|javadoc=true|url=org.apache.struts2.interceptor.ServletConfigInterceptor}
+~~~~~~~

http://git-wip-us.apache.org/repos/asf/struts-site/blob/f903a0f7/source/core-developers/short-validator.md
----------------------------------------------------------------------
diff --git a/source/core-developers/short-validator.md b/source/core-developers/short-validator.md
new file mode 100644
index 0000000..5825307
--- /dev/null
+++ b/source/core-developers/short-validator.md
@@ -0,0 +1,35 @@
+---
+layout: core-developers
+title: short validator
+---
+
+# short validator
+
+####Description####
+
+
+
+~~~~~~~
+{snippet:id=javadoc|javadoc=true|url=com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator}
+~~~~~~~
+
+####Parameters####
+
+
+
+~~~~~~~
+{snippet:id=parameters|javadoc=true|url=com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator}
+~~~~~~~
+
+**(\!) Warning**
+
+
+> \{snippet:id=parameters\-warning|javadoc=true|url=com\.opensymphony\.xwork2\.validator\.validators\.ShortRangeFieldValidator\}
+
+####Examples####
+
+
+
+~~~~~~~
+{snippet:id=example|javadoc=true|lang=xml|url=com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator}
+~~~~~~~


Mime
View raw message