Anonymous avatar Anonymous committed a4fca91

updated xwork docs (out of date, but at least with a nice note at the top)

git-svn-id: http://svn.opensymphony.com/svn/xwork/trunk@739 e221344d-f017-0410-9bd5-d282ab1896d7

Comments (0)

Files changed (71)

docs/wikidocs/Basics.html

-<html>
-    <head>
-        <title>XWork : Basics</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Basics
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 03, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <p class="paragraph"><h2 style="margin: 4px 0px 4px 0px;" class="heading2"><a name="Basics-Actions"> Actions</a></h2></p>Actions are the basic unit of execution&#8230;<p class="paragraph"><h3 class="heading3"><a name="Basics-TheActionInterface"> The Action Interface</a></h3></p>The basic interface which all XWork actions must implement. It provides several standard return values like SUCCESS and INPUT, and only contains one method:<br/>
-
-<div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">String</span> execute() <span class="java&#45;keyword">throws</span> Exception;</pre>
-</div></div><p class="paragraph">In general, Actions should simply extend ActionSupport, which provides a default implementation for the most common actions.</p><h2 class="heading2"><a name="Basics-ActionContext"> ActionContext</a></h2><p class="paragraph">The ActionContext provides access to the execution environment in the form of named objects during an Action invocation. A new ActionContext is created for each invocation allowing developers to access/modify these properties in a thread safe manner. The ActionContext makes a number of properties available that are typically set to appropriate values by the framework. In WebWork 2 for example, the ActionContext session map wraps an underlying HttpSession object. This allows access to environment specific properties without tying the core framework to a specific execution environment.</p>The ActionContext is acquired through the static ActionContext.getContext() method. The ActionContext is a thread local variable and thus the properties of the ActionContext will be relative to the current request thread. The ActionContext has several methods for commonly used properties as well as get() and set() methods which can be used for application specific properties. <br/>
-
-
-
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Building a Validator.html

-<html>
-    <head>
-        <title>XWork : Building a Validator</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Building a Validator
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 03, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <p class="paragraph">Validators implement the <b class="strong">com.opensymphony.xwork.validator.Validator</b> interface</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;keyword">interface</span> Validator &#123;&#10;    void setDefaultMessage(<span class="java&#45;object">String</span> message);&#10;&#10;    <span class="java&#45;object">String</span> getDefaultMessage();&#10;&#10;    <span class="java&#45;object">String</span> getMessage(<span class="java&#45;object">Object</span> object);&#10;&#10;    void setMessageKey(<span class="java&#45;object">String</span> key);&#10;&#10;    <span class="java&#45;object">String</span> getMessageKey();&#10;&#10;    /&#42;&#42;&#10;     &#42; This method will be called before validate with a non&#45;<span class="java&#45;keyword">null</span> ValidatorContext.&#10;     &#42; &#64;param validatorContext&#10;     &#42;/&#10;    void setValidatorContext(ValidatorContext validatorContext);&#10;&#10;    ValidatorContext getValidatorContext();&#10;&#10;    /&#42;&#42;&#10;     &#42; The validation implementation must guarantee that setValidatorContext&#10;     &#42; will be called with a non&#45;<span class="java&#45;keyword">null</span> ValidatorContext before validate is called.&#10;     &#42; &#64;param object&#10;     &#42; &#64;<span class="java&#45;keyword">throws</span> ValidationException&#10;     &#42;/&#10;    void validate(<span class="java&#45;object">Object</span> object) <span class="java&#45;keyword">throws</span> ValidationException;&#10;&#125;</pre>
-</div></div><p class="paragraph">FieldValidators implement <b class="strong">com.opensymphony.xwork.validator.FieldValidator</b>, which extends Validator:</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;keyword">interface</span> FieldValidator <span class="java&#45;keyword">extends</span> Validator &#123;&#10;&#10;    /&#42;&#42;&#10;     &#42; Sets the field name to validate with <span class="java&#45;keyword">this</span> FieldValidator&#10;     &#42; &#64;param fieldName&#10;     &#42;/&#10;    void setFieldName(<span class="java&#45;object">String</span> fieldName);&#10;&#10;    /&#42;&#42;&#10;     &#42; &#64;<span class="java&#45;keyword">return</span> the field name to be validated&#10;     &#42;/&#10;    <span class="java&#45;object">String</span> getFieldName();&#10;&#125;</pre>
-</div></div><p class="paragraph">If you want to be able to use the &quot;short-circuit&quot; attribute, you should also implement <b class="strong">com.opensymphony.xwork.validator.ShortCircuitableValidator</b>.</p>Validators and FieldValidators can extend base classes <b class="strong">com.opensymphony.xwork.validator.validators.ValidatorSupport</b> and <b class="strong">com.opensymphony.xwork.validator.validators.FieldValidatorSupport</b> to get the base message and short-circuiting behavior, and will only need to implement validate(Action action). <p class="paragraph">The Support classes provide the functionality to use the message key and default message to get the localied message body and the parsing of the message body to provide for parameterized messages. Implementations of the Validator Interface which do not extend the Support base classes should provide this functionality as well for consistency.</p>The <b class="strong">ValidatorContext</b> set into the Validator is an interface which extends both <b class="strong">ValidationAware</b> and <b class="strong">LocaleAware</b> and is used for looking up message texts and settting errors. When validators are called from the ValidationInterceptor, a DelegatingValidatorContext is created which delegates these calls to the Action if it implements these interfaces. If the Action does not implement LocaleAware, a LocaleAwareSupport instance is created which uses the Action&#039;s class to look up resource bundle texts, if available. If the action does not implement ValidationAware, an implementation which simply logs the validation errors is created and delegated to. When calling the validation framework from outside the ValidationInterceptor, any ValidatorContext implementation can be passed in.<p class="paragraph">Validator classes may define any number of properties using the usual getX() setX() naming convention and have those properties set using &lt;param name=&quot;x&quot;&gt;foo&lt;/param&gt; elements below the &lt;validator&gt; element. The values of these properties may then be used in the validate() method to parameterize the validation. Validators which extend the Support classes may also use the</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;object">Object</span> getFieldValue(<span class="java&#45;object">String</span> name, Action action)</pre>
-</div></div><p class="paragraph">method to get the field value of a named property from an Action.</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Components.html

-<html>
-    <head>
-        <title>XWork : Components</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Components
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 25, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <p class="paragraph"><h2 style="margin: 4px 0px 4px 0px;" class="heading2"><a name="Components-Overview"> Overview</a></h2></p><a href="XWork.html" title="XWork">XWork</a> provides the ComponentManager interface (and a corresponding implementation in the DefaultComponentManager class) to allow a design pattern known as <b class="strong">Inversion of Control</b> (or <b class="strong">IoC</b> for short) to be applied to your actions or other arbitrary objects. In a nutshell, the IoC pattern allows a parent object (in this case XWork&#039;s ComponentManager instance) to control a client object (usually an action, but it could be any object that implements the appropriate <em class="emphasis">enabler</em>).<p class="paragraph">You may also want to look at <a href="http://wiki.opensymphony.com//display/WW/Components" title="Components">WW:Components</a> to see how WW2 uses XWork&#039;s IoC architecture.</p><h2 class="heading2"><a name="Components-WhyIoC%3F"> Why IoC?</a></h2><p class="paragraph">So why is IoC useful? It means that you can develop components (generally services of some sort) in a top-down fashion, without the need to build a registry class that the client must then call to obtain the component instance.</p>Traditionally when implementing services you are probably used to following steps similar to these:
-<ol>
-<li> Write the component (eg an ExchangeRateService)</li>
-<li> Write the client class (eg an XWork action)</li>
-<li> Write a registry class that holds the component object (eg Registry)</li>
-<li> Write code that gives the component object to the registry (eg Registry.registerService(new MyExchangeRateService()))</li>
-<li> Use the registry to obtain the service from your client class (eg ExchangeRateService ers = Registry.getExchangeRateService())</li>
-<li> Make calls to the component from the client class (eg String baseCurrencyCode = ers.getBaseCurrency())</li>
-</ol><br/>
-Using IoC, the process is reduced to the following:
-<ol>
-<li> Write the component class (eg an ExchangeRateService)</li>
-<li> Register the component class with XWork (eg componentManager.addEnabler(MyExchangeRateService, ExchangeRateAware))</li>
-<li> Write the client class, making sure it implements the enabling interface (eg an XWork action that implements ExchangeRateAware)</li>
-<li> Access the component instance directly from your client action (eg String baseCurencyCode = ers.getBaseCurrency())</li>
-</ol><br/>
-XWork takes care of passing components through to enabled action classes or other components.<p class="paragraph">Some other benefits that IoC can provide include:</p><ul class="star">
-<li> A component describes itself. When you instantiate a component, you can easily determine what dependencies it requires without looking at the source or using trial and error.</li>
-<li> Dependencies can be discovered easily using reflection. This has many benefits ranging from diagram generation to runtime optimization (by determining in advance which components will be needed to fufill a request and preparing them asyncronously, for example).</li>
-<li> Avoids the super-uber-mega-factory pattern where all the components of the app are held together by a single class that is directly tied back to other domain specific classes, making it hard to &#039;just use that one class&#039;.</li>
-<li> Adheres to Law of Demeter. Some people think this is silly, but in practise I&#039;ve found it works much better. Each class is coupled to only what it actually uses (and it should never use too much) and no more. This encourages smaller responsibility specific classes which leads to cleaner design.</li>
-<li> Allows context to be isolated and explicitly passed around. ThreadLocals may be ok in a web-app, but they aren&#039;t well suited for high concurrency async applications (such as message driven applications).</li>
-</ul>
-<h2 class="heading2"><a name="Components-Configurationxwork.xml"> Configuration - xwork.xml</a></h2><p class="paragraph">The ComponentInterceptor class is used to apply the IoC pattern to XWork actions (ie, to supply components to actions). The ComponentInterceptor should be declared in the &lt;interceptors&gt; block of xwork.xml as follows:</p><div class="code"><div class="codeContent">
-<pre><span class="xml&#45;tag">&lt;interceptor name=<span class="xml&#45;quote">&quot;component&quot;</span>&#10;        class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.interceptor.component.ComponentInterceptor&quot;</span>/&gt;</span></pre>
-</div></div><p class="paragraph">You should ensure that any actions that are to be supplied with components have this interceptor applied. (See <a href="Interceptors.html" title="Interceptors">XW:Interceptors</a> for information on how to apply interceptors to actions.)</p>If you want to apply IoC to objects other than actions or other components, you will need to use the ComponentManager object directly.<p class="paragraph"><h2 class="heading2"><a name="Components-WritingComponentClasses"> Writing Component Classes</a></h2></p>The actual component class can be virtually anything you like. The only constraints on it are that it must be a concrete class with a default constructor so that XWork can create instances of it as required. Optionally, a component may implement the Initializable and/or Disposable interfaces so it will receive lifecycle events just after it is created or before it is destroyed. Simply:<br/>
-
-<div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span> class MyComponent <span class="java&#45;keyword">implements</span> Intializable, Disposable &#123;&#10;    <span class="java&#45;keyword">public</span> void init () &#123;&#10;         <span class="java&#45;comment">//<span class="java&#45;keyword">do</span> initialization here</span>&#10;    &#125;&#10;&#10;    <span class="java&#45;keyword">public</span> void dispose() &#123;&#10;         <span class="java&#45;comment">//<span class="java&#45;keyword">do</span> any clean up necessary before garbage collection of <span class="java&#45;keyword">this</span> component</span>&#10;    &#125;&#10;&#125;</pre>
-</div></div><p class="paragraph"><h2 class="heading2"><a name="Components-ComponentDependencies"> Component Dependencies</a></h2></p>One feature that is not immediately obvious is that it is possible for components to depend on other components. For example if the ExchangeRateService described above depended on a Configuration component, XWork will pass the Configuration component through to the ExchangeRateService instance after ExchangeRateService is instantiated. Note that XWork automatically takes care of initializing the components in the correct order, so if A is an action or component that depends on B and C, and B depends on C and if A, B, and C have not been previously instantiated, the ComponentManager will in the following order:<br/>
-
-<ol>
-<li> Instantiate C and call it&#039;s init() method if it implements Initializable.</li>
-<li> Instantiate B, then using the enabler method, set C to be used by B</li>
-<li> Call B&#039;s init() method, if it implements Intitializable.</li>
-<li> Set B using B&#039;s enabler method to be used by A.</li>
-</ol><br/>
-And so on and so forth. Of course, if there are instances of B or C that would be reused in this case, those instances would be passed using the enabler method rather than a new instance.<p class="paragraph"><h2 class="heading2"><a name="Components-WritingEnablers"> Writing Enablers</a></h2></p>An enabler should consist of just a single method that accepts a single parameter. The parameter class should either be the component class that is to be enabled, or one of the component&#039;s superclasses. XWork does not care what the name of the enabler&#039;s method is.<p class="paragraph">Here is an example of what the ExchangeRateAware enabler might look like:</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;keyword">interface</span> ExchangeRateAware &#123;&#10;    <span class="java&#45;keyword">public</span> void setExchangeRateService(ExchangeRateService exchangeRateService);&#10;&#125;</pre>
-</div></div><p class="paragraph">Note that typically an enabler would be an interface, however there is nothing to prevent you from using a class instead if you so choose.</p><h2 class="heading2"><a name="Components-Writing%26quot%3BEnableraware%26quot%3BActions"> Writing &quot;Enabler-aware&quot; Actions</a></h2><p class="paragraph">All an action needs to do is implement the relevant enabler interface. XWork will then call the action&#039;s enabler method just prior to the action&#039;s execution. As a simple example:</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span> class MyAction <span class="java&#45;keyword">extends</span> ActionSupport <span class="java&#45;keyword">implements</span> ExchangeRateAware &#123;&#10;    ExchangeRateService ers;&#10;    &#10;    <span class="java&#45;keyword">public</span> void setExchangeRateService(ExchangeRateService exchangeRateService) &#123;&#10;        ers = exchangeRateService;&#10;    &#125;&#10;    &#10;    <span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">String</span> execute() <span class="java&#45;keyword">throws</span> Exception &#123;&#10;        <span class="java&#45;object">System</span>.out.println(<span class="java&#45;quote">&quot;The base currency is &quot;</span> &#43; ers.getBaseCurrency());&#10;    &#125;&#10;&#125;</pre>
-</div></div><p class="paragraph">If you have an object that is not an action or another component, you must explictly tell XWork to supply any enabled components to your object by calling componentManager.initializeObject(enabledObject);</p><h2 class="heading2"><a name="Components-Usinganexternalreferenceresolver"> Using an external reference resolver</a></h2><p class="paragraph">You can also use an external reference resolver in XWork, i.e., references that will be resolved not by XWork itself. One such example is using an external resolver to integrate XWork with the <a href="http://www.springframework.org" title="Visit page outside Confluence">Spring Framework</a></p>You just need to write an external reference resolver and then tell XWork to use it in the package declaration:
-<div class="code"><div class="codeContent">
-<pre><span class="xml&#45;tag">&lt;package&#10;    name=<span class="xml&#45;quote">&quot;default&quot;</span>&#10;    externalReferenceResolver=<span class="xml&#45;quote">&quot;com.atlassian.xwork.ext.SpringServletContextReferenceResolver&quot;</span>&gt;</span></pre>
-</div></div><br/>
-Now, to use external references you do something like this:
-<div class="code"><div class="codeContent">
-<pre><span class="xml&#45;tag">&lt;external&#45;ref name=<span class="xml&#45;quote">&quot;foo&quot;</span>&gt;</span>Foo<span class="xml&#45;tag">&lt;/external&#45;ref&gt;</span></pre>
-</div></div><br/>
-Where the name attribute is the setter method name and Foo is the reference to lookup.<p class="paragraph">For more details and sample code about this integration, take a look at the javadocs to the com.opensymphony.xwork.config.ExternalReferenceResolver class (unfortunately unavailable online) and at <a href="http://jira.opensymphony.com/secure/ViewIssue.jspa?key=XW-122" title="Visit page outside Confluence">XW-122</a></p>-Chris
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Configuration.html

-<html>
-    <head>
-        <title>XWork : Configuration</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Configuration
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Dec 12, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <ul class="star">
-<li> xwork.xml</li>
-<li> <a href="Logging.html" title="Logging">Logging</a></li>
-</ul><p class="paragraph"><h2 class="heading2"><a name="Configuration-xwork.xml"> xwork.xml</a></h2></p><a name="Configuration-top"></a><br/>
-XWork is configured through the use of a file named xwork.xml in the root of the classpath which conforms to the DTD.  This file defines the action, interceptor, and result configurations and mappings. The following is a sample xwork.xml file; it&#039;s a condensed version of the one used in the XWork test cases.  It&#039;s a long example, but it exhibits all the major configuration possibilites:<br/>
-
-<div class="code"><div class="codeContent">
-<pre><span class="xml&#45;tag">&lt;&#33;DOCTYPE xwork PUBLIC <span class="xml&#45;quote">&quot;&#45;//OpenSymphony Group//XWork 1.0//EN&quot;</span>&#10;  <span class="xml&#45;quote">&quot;&#104;ttp://www.opensymphony.com/xwork/xwork&#45;1.0.dtd&quot;</span>&gt;</span>&#10;&#10;<span class="xml&#45;tag">&lt;xwork&gt;</span>&#10;  <span class="xml&#45;tag">&lt;package name=<span class="xml&#45;quote">&quot;default&quot;</span>&gt;</span>&#10;    <span class="xml&#45;tag">&lt;result&#45;types&gt;</span>&#10;      <span class="xml&#45;tag">&lt;result&#45;type name=<span class="xml&#45;quote">&quot;chain&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.ActionChainResult&quot;</span>/&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/result&#45;types&gt;</span>&#10;&#10;    <span class="xml&#45;tag">&lt;interceptors&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor name=<span class="xml&#45;quote">&quot;timer&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.interceptor.TimerInterceptor&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor name=<span class="xml&#45;quote">&quot;logger&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.interceptor.LoggingInterceptor&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor name=<span class="xml&#45;quote">&quot;chain&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.interceptor.ChainingInterceptor&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor name=<span class="xml&#45;quote">&quot;params&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.interceptor.ParametersInterceptor&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor name=<span class="xml&#45;quote">&quot;static&#45;params&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.interceptor.StaticParametersInterceptor&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor name=<span class="xml&#45;quote">&quot;test&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.TestInterceptor&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;foo&quot;</span>&gt;</span>expectedFoo<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/interceptor&gt;</span>&#10;&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;stack name=<span class="xml&#45;quote">&quot;defaultStack&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;static&#45;params&quot;</span>/&gt;</span>&#10;        <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;params&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/interceptor&#45;stack&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;stack name=<span class="xml&#45;quote">&quot;debugStack&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;timer&quot;</span>/&gt;</span>&#10;        <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;logger&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/interceptor&#45;stack&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/interceptors&gt;</span>&#10;&#10;    <span class="xml&#45;tag">&lt;global&#45;results&gt;</span>&#10;      <span class="xml&#45;tag">&lt;result name=<span class="xml&#45;quote">&quot;login&quot;</span> type=<span class="xml&#45;quote">&quot;chain&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;actionName&quot;</span>&gt;</span>login<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/result&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/global&#45;results&gt;</span>&#10;&#10;    <span class="xml&#45;tag">&lt;action name=<span class="xml&#45;quote">&quot;Foo&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.SimpleAction&quot;</span>&gt;</span>&#10;      <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;foo&quot;</span>&gt;</span>17<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;bar&quot;</span>&gt;</span>23<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;result name=<span class="xml&#45;quote">&quot;success&quot;</span> type=<span class="xml&#45;quote">&quot;chain&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;actionName&quot;</span>&gt;</span>Bar<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/result&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;debugStack&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;defaultStack&quot;</span>/&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/action&gt;</span>&#10;&#10;    <span class="xml&#45;tag">&lt;action name=<span class="xml&#45;quote">&quot;Bar&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.SimpleAction&quot;</span>&gt;</span>&#10;      <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;foo&quot;</span>&gt;</span>17<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;bar&quot;</span>&gt;</span>23<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/action&gt;</span>&#10;&#10;    <span class="xml&#45;tag">&lt;action name=<span class="xml&#45;quote">&quot;TestInterceptorParam&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.SimpleAction&quot;</span>&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;test&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;expectedFoo&quot;</span>&gt;</span>expectedFoo<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/interceptor&#45;ref&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/action&gt;</span>&#10;&#10;    <span class="xml&#45;tag">&lt;action name=<span class="xml&#45;quote">&quot;TestInterceptorParamOverride&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.SimpleAction&quot;</span>&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;test&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;foo&quot;</span>&gt;</span>foo123<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;        <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;expectedFoo&quot;</span>&gt;</span>foo123<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/interceptor&#45;ref&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/action&gt;</span>&#10;  <span class="xml&#45;tag">&lt;/package&gt;</span>&#10;&#10;  <span class="xml&#45;tag">&lt;package name=<span class="xml&#45;quote">&quot;bar&quot;</span> extends=<span class="xml&#45;quote">&quot;default&quot;</span> namespace=<span class="xml&#45;quote">&quot;/foo/bar&quot;</span>&gt;</span>&#10;    <span class="xml&#45;tag">&lt;interceptors&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;stack name=<span class="xml&#45;quote">&quot;barDefaultStack&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;debugStack&quot;</span>/&gt;</span>&#10;        <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;defaultStack&quot;</span>/&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/interceptor&#45;stack&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/interceptors&gt;</span>&#10;&#10;    <span class="xml&#45;tag">&lt;action name=<span class="xml&#45;quote">&quot;Bar&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.SimpleAction&quot;</span>&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;barDefaultStack&quot;</span>/&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/action&gt;</span>&#10;&#10;    <span class="xml&#45;tag">&lt;action name=<span class="xml&#45;quote">&quot;TestInterceptorParamInheritance&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.SimpleAction&quot;</span>&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;test&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;expectedFoo&quot;</span>&gt;</span>expectedFoo<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/interceptor&#45;ref&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/action&gt;</span>&#10;&#10;  <span class="xml&#45;tag">&lt;/package&gt;</span>&#10;&#10;  <span class="xml&#45;tag">&lt;package name=<span class="xml&#45;quote">&quot;abstractPackage&quot;</span> namespace=<span class="xml&#45;quote">&quot;/abstract&quot;</span> abstract=<span class="xml&#45;quote">&quot;true&quot;</span>&gt;</span>&#10;    <span class="xml&#45;tag">&lt;action name=<span class="xml&#45;quote">&quot;test&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.SimpleAction&quot;</span>/&gt;</span>&#10;  <span class="xml&#45;tag">&lt;/package&gt;</span>&#10;&#10;  <span class="xml&#45;tag">&lt;package name=<span class="xml&#45;quote">&quot;nonAbstractPackage&quot;</span> extends=<span class="xml&#45;quote">&quot;abstractPackage&quot;</span> namespace=<span class="xml&#45;quote">&quot;/nonAbstract&quot;</span>/&gt;</span>&#10;&#10;  <span class="xml&#45;tag">&lt;package name=<span class="xml&#45;quote">&quot;multipleInheritance&quot;</span> extends=<span class="xml&#45;quote">&quot;default,abstractPackage,bar&quot;</span> namespace=<span class="xml&#45;quote">&quot;multipleInheritance&quot;</span>&gt;</span>&#10;    <span class="xml&#45;tag">&lt;action name=<span class="xml&#45;quote">&quot;testMultipleInheritance&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.SimpleAction&quot;</span>&gt;</span>&#10;      <span class="xml&#45;tag">&lt;result name=<span class="xml&#45;quote">&quot;success&quot;</span> type=<span class="xml&#45;quote">&quot;chain&quot;</span>&gt;</span>&#10;        <span class="xml&#45;tag">&lt;param name=<span class="xml&#45;quote">&quot;actionName&quot;</span>&gt;</span>foo<span class="xml&#45;tag">&lt;/param&gt;</span>&#10;      <span class="xml&#45;tag">&lt;/result&gt;</span>&#10;      <span class="xml&#45;tag">&lt;interceptor&#45;ref name=<span class="xml&#45;quote">&quot;barDefaultStack&quot;</span>/&gt;</span>&#10;    <span class="xml&#45;tag">&lt;/action&gt;</span>&#10;  <span class="xml&#45;tag">&lt;/package&gt;</span>&#10;&#10;  <span class="xml&#45;tag">&lt;include file=<span class="xml&#45;quote">&quot;includeTest.xml&quot;</span>/&gt;</span>&#10;<span class="xml&#45;tag">&lt;/xwork&gt;</span></pre>
-</div></div>
-<p class="paragraph"><h2 class="heading2"><a name="Configuration-xwork.xmlelements"> xwork.xml elements</a></h2></p><h3 class="heading3"><a name="Configuration-Package%3Caname%3D%22ConfigurationPackage%22%3E%3C%2Fa%3E"> Package <a name="Configuration-Package"></a></a></h3><p class="paragraph">The package element has one required attribute, &quot;name&quot;, which acts as the key to later reference this package. The &quot;extends&quot; 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 &quot;extends&quot; should be defined above the package which extends it. The &quot;abstract&quot; optional attribute allows you to make a package abstract, which will allow you to extend from it without the action configurations defined in the abstract package actually being available at runtime. (<a href="#Configuration-top" title="top on Configuration">see above for example</a>)</p><table class="wikitable">
-<tr>
-<th> Attribute </th><th> Required </th><th> Description </th>
-</tr><tr>
-<td> name </td><td> <b class="strong">yes</b> </td><td> key to for other packages to reference </td>
-</tr><tr>
-<td> extends </td><td> no </td><td> inherits package behavior of the package it extends </td>
-</tr><tr>
-<td> namespace </td><td> no </td><td> see <a href="#Configuration-Namespace" title="Namespace on Configuration">#Namespace</a> </td>
-</tr><tr>
-<td> abstract </td><td> no </td><td> declares package to be abstract (no action configurations required in package) </td>
-</tr>
-</table>
-<h4 class="heading4"><a name="Configuration-Namespace%3Caname%3D%22ConfigurationNamespace%22%3E%3C%2Fa%3E"> Namespace <a name="Configuration-Namespace"></a></a></h4><p class="paragraph">The optional namespace attribute warrants its own discussion section. The namespace attribute allows you to segregate action configurations into namespaces, so that you may use the same action alias in more than one namespace with different classes, parameters, etc. This is in contrast to Webwork 1.x, where all action names and aliases were global and could not be re-used in an application. The default namespace, which is &quot;&quot; (an empty string) is used as a &quot;catch-all&quot; namespace, so if an action configuration is not found in a specified namespace, the default namespace will also be searched. This allows you to have global action configurations outside of the &quot;extends&quot; hierarchy, as well as to allow the previous Webwork 1.x behavior by not specifying namespaces. It is also intended that the namespace functionality can be used for security, for instance by having the path before the action name be used as the namespace by the Webwork 2.0 ServletDispatcher, thus allowing the use of J2EE declarative security on paths to be easily implemented and maintained. (<a href="#Configuration-top" title="top on Configuration">see above for example</a>)
-<h3 class="heading3"><a name="Configuration-ResultType"> Result-Type</a></h3></p>Result types define classes and map them to names to be referred in the action configuration results. This serves as a shorthand name-value pair for these classes.
-<p class="paragraph"><h3 class="heading3"><a name="Configuration-Interceptors"> Interceptors</a></h3></p>Interceptors also serve as a name-value pairing for referring to specific Interceptor classes by a shorthand name where we use interceptor-ref elements, such as in Interceptor stacks and action configurations.
-<p class="paragraph"><h3 class="heading3"><a name="Configuration-InterceptorStack"> Interceptor-Stack</a></h3></p>The interceptor-stack element allows you to assign a name for later referencing via interceptor-ref to an ordered list of interceptors. This allows you to create standard groups of interceptors to be used in a certain order. The interceptor stack name/value pairs are stored in the same map as the interceptor definitions, so anywhere you use an interceptor-ref to refer to an interceptor you may also refer to an interceptor stack.
-<h3 class="heading3"><a name="Configuration-InterceptorParameterization"> Interceptor Parameterization</a></h3><p class="paragraph">Interceptors are instantiated and stored at the ActionConfig level, i.e. there will be one instance per action configured in xwork.xml. These Interceptor instances may be parameterized at either the declaration level, where you map an Interceptor class to a name to be referenced later, like so:</p><div class="code"><div class="codeContent">
-<pre>&lt;interceptor name=<span class="java&#45;quote">&quot;test&quot;</span> class=<span class="java&#45;quote">&quot;com.opensymphony.xwork.TestInterceptor&quot;</span>&gt;&#10;    &lt;param name=<span class="java&#45;quote">&quot;foo&quot;</span>&gt;expectedFoo&lt;/param&gt;&#10;&lt;/interceptor&gt;</pre>
-</div></div><p class="paragraph">or at the interceptor-ref level, either inside an interceptor-stack or in an action declaration, like so:</p><div class="code"><div class="codeContent">
-<pre>&lt;interceptor&#45;ref name=<span class="java&#45;quote">&quot;test&quot;</span>&gt;&#10;    &lt;param name=<span class="java&#45;quote">&quot;expectedFoo&quot;</span>&gt;expectedFoo&lt;/param&gt;&#10;&lt;/interceptor&#45;ref&gt;</pre>
-</div></div><p class="paragraph">Although it is allowed by the DTD, parameters applied to interceptor-refs which refer to interceptor-stack elements will NOT be applied, and will cause a warning message.</p><h3 class="heading3"><a name="Configuration-Globalresults"> Global-results</a></h3><p class="paragraph">The global results allows you to define result mappings which will be used as defaults for all action configurations and will be automatically inherited by all action configurations in this package and all packages which extend this package.</p><h3 class="heading3"><a name="Configuration-Action"> Action</a></h3><p class="paragraph">The action element allows the mapping of names to action classes. These names are used, along with the namespace described above, to retrieve the action config from the configuration. The action may also be parameterized by using the param elements, as above, which will set parameters into the Action at execution (with the help of the StaticParametersInterceptor).</p>When defining actions, sometimes you actually don&#039;t need any class, but rather are just putting in a placeholder for accessing interceptors and results. You can use ActionSupport for a simple action that has all of the XWork features but doesn&#039;t actually do anything. In fact, rather than defining your action class, if you leave it empty it defaults to ActionSupport. <br/>
-
-<div class="code"><div class="codeContent">
-<pre>&lt;action name=<span class="java&#45;quote">&quot;foo&quot;</span>&gt;&#10;    ...&#10;&lt;/action&gt;</pre>
-</div></div><p class="paragraph">The action may also have one or more results mapped to string return codes, such as &quot;success&quot;, &quot;error&quot;, or &quot;input&quot;, which are the default 3 return states for actions, although ANY return string may be used and mapped to a result. The result, which is mapped to a result class by the &quot;type&quot; attribute which refers to the result-type name defined above, may also be parameterized by using the param element.</p>There is one shortcut when defining results, as a lot of the time a result will have only one parameter (which is often a location to redirect to (when using XWork in the web sense)).<p class="paragraph">Here is the long form of a result with a single location parameter:</p><div class="code"><div class="codeContent">
-<pre>&lt;result name=<span class="java&#45;quote">&quot;test&quot;</span>&gt;&#10;    &lt;param name=<span class="java&#45;quote">&quot;location&quot;</span>&gt;foo.jsp&lt;/param&gt;&#10;&lt;/result&gt;</pre>
-</div></div><p class="paragraph">and this is the &#039;shortcut&#039; form:</p><div class="code"><div class="codeContent">
-<pre>&lt;result name=<span class="java&#45;quote">&quot;test&quot;</span>&gt;foo.jsp&lt;/result&gt;</pre>
-</div></div><p class="paragraph">Note that this shortcut <b class="strong">only</b> works when there is a single parameter for the result and the result has defined what its default parameter is.</p>If your result name is &quot;success&quot;, then you can take this shortcut even further by just doing:<br/>
-
-<div class="code"><div class="codeContent">
-<pre>&lt;result&gt;success.jsp&lt;/result&gt;</pre>
-</div></div><br/>
-
-<div class="panel"><div class="panelContent" style="background-color: #ffffce; ">
-<p class="paragraph"><img class="rendericon" src="./icons/emoticons/information.png" height="16" width="16" align="absmiddle" alt="" border="0"/> Tip: using the action class shorthand and the result shortcuts, you can do something as simple as this to define an XWork front-end to a result:
-<div class="code"><div class="codeContent">
-<pre>&lt;action name=<span class="java&#45;quote">&quot;foo&quot;</span>&gt;&#10;    &lt;result&gt;foo.jsp&lt;/result&gt;&#10;&lt;/action&gt;</pre>
-</div></div></p>
-</div></div><p class="paragraph">The action may also define one or more interceptor refs to either interceptors or interceptor stacks to be applied before and after the action execution (see the section on Interceptors below). The ordering of these interceptor refs determines the order in which they will be applied.</p><h3 class="heading3"><a name="Configuration-Includesusingmultipleconfigurationfiles"> Includes - using multiple configuration files</a></h3><p class="paragraph">The xwork.xml configuration file may be broken up into several files, each with its own set of package declarations, by using the &lt;include&gt; element zero or more times at the bottom of your xwork.xml file, like so:</p><div class="code"><div class="codeContent">
-<pre>&lt;include file=<span class="java&#45;quote">&quot;includeTest.xml&quot;</span>/&gt;</pre>
-</div></div><p class="paragraph">These files will be processed, in order, in the same manner as the main xwork.xml, thus may have all of the same structures, including the &lt;include&gt; element. Although it is, therefore, possible to have packages in configuration files listed later in an include element extend packages defined in an earlier included file, it is not recommended. It should be considered best practice, in the case of using multiple configuration files, to declare default packages meant to be extended in the xwork.xml and to have no dependencies between sub-configuration files.</p><h2 class="heading2"><a name="Configuration-ConfigurationProviders"> Configuration Providers</a></h2><p class="paragraph">XWork configuration is handled through classes which implement the ConfigurationProvider interface.  The default implementation is the XmlConfigurationProvider class.  You can either create a new provider by implementing the ConfigurationProvider interface or you can extend the XmlConfigurationProvider class.  The XmlConfigurationProvider class includes a protected method called getInputStream() which is called to acquire the configuration InputStream which is expected to be an XML data stream.  The default implementation looks for a file called xwork.xml in the class path but by overriding the getInputStream() method you can pull configuration data from any source.</p>Custom configuration providers must be registered with the ConfigurationManager before they will be used to load configuration data.  If no custom configuration providers are registered then the default configuration provider is used.  If any custom configuration providers are registered then the default configuration provider will no longer be used (although you could add a new instance of it yourself to include it in the list of providers which is searched).  To add a configuration provider just call the ConfigurationManager.addConfigurationProvider() method with the custom configuration provider as the argument.
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Core Concepts.html

-<html>
-    <head>
-        <title>XWork : Core Concepts</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Core Concepts
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 02, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph"><h2 style="margin: 4px 0px 4px 0px;" class="heading2"><a name="CoreConcepts-XWorkCoreConcepts"> XWork Core Concepts</a></h2></p>XWork is based on a number of core concepts that helps to explain how the framework works. The core concepts can be broken down into two parts: Architecture Concepts and Terminology.<p class="paragraph"><h2 class="heading2"><a name="CoreConcepts-ArchitectureConcepts"> Architecture Concepts</a></h2>
-<ul class="star">
-<li> Explain Command Driven Architecture (in general)</li>
-<li> Explain the implementation in XWork</li>
-</ul>
-<h2 class="heading2"><a name="CoreConcepts-Terminology"> Terminology</a></h2></p><h3 class="heading3"><a name="CoreConcepts-Actions"> Actions</a></h3><p class="paragraph">Actions are classes that get invoked in response to a request, execute some code and return a Result. Actions implement at a minimum a single method, execute(), that defines the entry point called by the framework. This method allows developers to define a unit of work that will be executed each time the Action is called.</p><h3 class="heading3"><a name="CoreConcepts-ActionContext"> ActionContext</a></h3><p class="paragraph">The ActionContext provides access to the execution environment in the form of named objects during an Action invocation. A new ActionContext is created for each invocation allowing developers to access/modify these properties in a thread safe manner. The ActionContext makes a number of properties available that are typically set to appropriate values by the framework. In WebWork 2 for example, the ActionContext session map wraps an underlying HttpSession object. This allows access to environment specific properties without tying the core framework to a specific execution environment. For more information, see ActionContext in <a href="Basics.html" title="Basics">Basics</a>.</p><h3 class="heading3"><a name="CoreConcepts-Interceptors"> Interceptors</a></h3><p class="paragraph">In XWork, Interceptors are objects that dynamically intercept Action invocations. They provide the developer with the opportunity to define code that can be executed before and/or after the execution of an action. They also have the ability to prevent an action from executing. Interceptors provide developers a way to encapulate common functionality in a re-usable form that can be applied to one or more Actions. See <a href="Interceptors.html" title="Interceptors">Interceptors</a> for further details.</p><h3 class="heading3"><a name="CoreConcepts-Stacks"> Stacks</a></h3><p class="paragraph">To handle the case where developers want to apply more than a single Interceptor to an Action, Stacks have been introduced. Stacks are an ordered list of Interceptors and/or other Stacks that get applied when an Action is invoked. Stacks centralize the declaration of Interceptors and provide a convenient way to configure mutiple actions.</p><h3 class="heading3"><a name="CoreConcepts-Results"> Results</a></h3><p class="paragraph">Results are string constants that Actions return to indicate the status of an Action execution. A standard set of Results are defined by default: error, input, login, none and success.  Developers are, of course, free to create their own Results to indicate more application specific cases.</p><h3 class="heading3"><a name="CoreConcepts-ResultTypes"> Result Types</a></h3><p class="paragraph">Result Types are classes that determine what happens after an Action executes and a Result is returned. Developers are free to create their own Result Types according to the needs of their application or environment. In WebWork 2 for example, Servlet and Velocity Result Types have been created to handle rendering views in web applications.</p><h3 class="heading3"><a name="CoreConcepts-Packages"> Packages</a></h3><p class="paragraph">Packages are a way to group Actions, Results, Result Types, Interceptors and Stacks into a logical unit that shares a common configuration. Packages are similiar to objects in that they can be extended and have individual parts overridden by &quot;sub&quot; packages.</p><h3 class="heading3"><a name="CoreConcepts-ValueStack"> ValueStack</a></h3><p class="paragraph">The ValueStack is a stack implementation built on top of an OGNL core. The OGNL expression language can be used to traverse the stack and retrieve the desired object. The OGNL expression language provides a number of additional features including: automatic type conversion, method invocation and object comparisons. For more information, see the <a href="http://ognl.org/" title="Visit page outside Confluence">OGNL Website</a>.</p><h3 class="heading3"><a name="CoreConcepts-Components"> Components</a></h3><p class="paragraph">XWork provides the ComponentManager interface (and a corresponding implementation in the DefaultComponentManager class) to apply a design pattern known as <b class="strong">Inversion of Control</b> (or IoC for short). In a nutshell, the IoC pattern allows a parent object (in this case XWork&#039;s ComponentManager instance) to control a client object (usually an action, but it could be any object that implements the appropriate <em class="emphasis">enabler</em>). See <a href="Components.html" title="Components">Components</a> for further details.</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/DefaultWorkflowInterceptor.html

-<html>
-    <head>
-        <title>XWork : DefaultWorkflowInterceptor</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : DefaultWorkflowInterceptor
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 26, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <div class="code"><div class="codeContent">
-<pre>&lt;interceptor name=<span class="java&#45;quote">&quot;workflow&quot;</span> class=<span class="java&#45;quote">&quot;com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor&quot;</span>/&gt;</pre>
-</div></div><p class="paragraph">This interceptor  implements the workflow that was found in ActionSupport in WebWork 1.x. The following workflow steps are applied before the rest of the Interceptors and the Action are executed, and may short-circuit their execution:</p><ol>
-<li> If the Action implements <b class="strong">com.opensymphony.xwork.Validateable</b>, the <b class="strong">validate()</b> method is called on it, to allow the Action to execute any validation logic coded into it.</li>
-<li> If the Action implements <b class="strong">com.opensymphony.xwork.ValidationAware</b> the <b class="strong">hasErrors()</b> method is called to check if the Action has any registered error messages (either Action-level or field-level). If the ValidationAware Action has any errors, <b class="strong">Action.INPUT</b> (&quot;input&quot;) is returned without executing the rest of the Interceptors or the Action.</li>
-<li> If the execution did not short-circuit in the step above, the rest of the Interceptors and the Action are executed by calling <b class="strong">invocation.invoke()</b></li>
-</ol>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Dependencies.html

-<html>
-    <head>
-        <title>XWork : Dependencies</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Dependencies
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Aug 26, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph">Dependencies are split into runtime and compile time dependencies.</p><ul class="star">
-<li> Runtime dependencies are stored in CVS in the <b class="strong">lib/core</b> directory.</li>
-<li> Compile time dependencies are stored in CVS in the <b class="strong">lib/build</b> directory.</li>
-</ul><br/>
-You can see all the dependenies as well as their version numbers by looking at the <b class="strong">libraries.txt</b> file located in each directory.
-
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Documentation.html

-<html>
-    <head>
-        <title>XWork : Documentation</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Documentation
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Dec 12, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph"><h3 style="margin: 4px 0px 4px 0px;" class="heading3"><a name="Documentation-Overview"> Overview</a></h3>
-<ul class="star">
-<li> <a href="Introduction.html" title="Introduction">Introduction</a><ul class="star">
-<li> What is Xwork?</li>
-<li> How does Webwork 2.0 relate to Xwork?</li>
-</ul></li>
-</ul>
-<h3 class="heading3"><a name="Documentation-ReferenceGuide"> Reference Guide</a></h3>
-<ul class="star">
-<li> <a href="Core Concepts.html" title="Core Concepts">Core Concepts</a>: Terminology and an introduction to XWork</li>
-<li> <a href="XWork layers.html" title="XWork layers">XWork layers</a></li>
-<li> <a href="Configuration.html" title="Configuration">Configuration</a>: xwork.xml</li>
-<li> <a href="Ognl.html" title="Ognl">Ognl</a></li>
-<li> <a href="Localization.html" title="Localization">Localization</a></li>
-<li> <a href="Type Conversion.html" title="Type Conversion">Type Conversion</a></li>
-<li> <a href="Interceptors.html" title="Interceptors">Interceptors</a></li>
-<li> <a href="Validation Framework.html" title="Validation Framework">Validation Framework</a></li>
-<li> <a href="Components.html" title="Components">Components</a>: Inversion of Control</li>
-</ul>
-<h3 class="heading3"><a name="Documentation-XWorkVersions"> XWork Versions</a></h3>
-<ul class="star">
-<li> Current Release<ul class="star">
-<li> Release Notes<ul class="star">
-<li> <a href="Release Notes - 1.0.5.html" title="Release Notes - 1.0.5">Release Notes - 1.0.5</a></li>
-<li> <a href="Release Notes - 1.0.4.html" title="Release Notes - 1.0.4">Release Notes - 1.0.4</a></li>
-<li> <a href="Release Notes - 1.0.3.html" title="Release Notes - 1.0.3">Release Notes - 1.0.3</a></li>
-<li> <a href="Release Notes - 1.0.2.html" title="Release Notes - 1.0.2">Release Notes - 1.0.2</a></li>
-<li> <a href="Release Notes - 1.0.1.html" title="Release Notes - 1.0.1">Release Notes - 1.0.1</a></li>
-</ul></li>
-<li> <a href="Dependencies.html" title="Dependencies">Dependencies</a></li>
-</ul></li>
-<li> Upgrading from previous versions<ul class="star">
-<li> <a href="Upgrading from 1.0.4.html" title="Upgrading from 1.0.4">Upgrading from 1.0.4</a></li>
-<li> <a href="Upgrading from 1.0.3.html" title="Upgrading from 1.0.3">Upgrading from 1.0.3</a></li>
-<li> <a href="Upgrading from 1.0.2.html" title="Upgrading from 1.0.2">Upgrading from 1.0.2</a></li>
-<li> <a href="Upgrading from 1.0.1.html" title="Upgrading from 1.0.1">Upgrading from 1.0.1</a></li>
-<li> <a href="Upgrading from 1.0.html" title="Upgrading from 1.0">Upgrading from 1.0</a></li>
-</ul></li>
-</ul></p><h3 class="heading3"><a name="Documentation-DocumentationTasksRemaining">  Documentation Tasks Remaining</a></h3>
-
-<ul class="star">
-<li> Merge XWork specific docs from WebWork.  In particular:<ul class="star">
-<li> config docs</li>
-</ul></li>
-<li> Description for all interceptors</li>
-<li> Beef up <a href="Basics.html" title="Basics">Basics</a></li>
-<li> Make sure we document ActionChaining somewhere</li>
-</ul>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Generic Object Validation.html

-<html>
-    <head>
-        <title>XWork : Generic Object Validation</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Generic Object Validation
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 03, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <p class="paragraph">XWork&#039;s validation framework is not just limited to Actions.  It can be used to validate virtually any object.  Once you&#039;ve set up your validator config file (<b class="strong">validators.xml</b>) and your validation rules (<b class="strong">ClassName-validation.xml</b>), all it takes are a couple lines of code:</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;object">String</span> context = <span class="java&#45;keyword">null</span>;&#10;ValidatorContext context = <span class="java&#45;keyword">new</span> DelegatingValidatorContext(objectToValidate);&#10;ActionValidatorFactory.getInstance().validate(objectToValidate, <span class="java&#45;keyword">null</span>, context);</pre>
-</div></div><p class="paragraph">This will cause any errors to be logged (where it gets logged to depends on how commons-logging is configured).</p>Ideally, you would either implement your own ValidatorContext to handle how error messages are logged and evaluated, or have your objects that are to be evaluated implement ValidationAware, TextProvider and/or LocaleProvider.<p class="paragraph">Matthew Payne has a JUnit demo of this at <a href="http://www.sutternow.com/index.do?post=51fe0c00fc17aec500fc33f6bb8e006e" title="Visit page outside Confluence">&#104;ttp://www.sutternow.com/index.do?post=51fe0c00fc17aec500fc33f6bb8e006e</a>.</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Interceptors.html

-<html>
-    <head>
-        <title>XWork : Interceptors</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Interceptors
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Aug 18, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <ul class="star">
-<li> Overview</li>
-<li> <a href="PrepareInterceptor.html" title="PrepareInterceptor">PrepareInterceptor</a></li>
-<li> <a href="ValidationInterceptor.html" title="ValidationInterceptor">ValidationInterceptor</a></li>
-<li> <a href="DefaultWorkflowInterceptor.html" title="DefaultWorkflowInterceptor">DefaultWorkflowInterceptor</a></li>
-</ul>
-<h2 class="heading2"><a name="Interceptors-Overview"> Overview</a></h2><p class="paragraph">Interceptors allow you to define code to be executed before and/or after the execution of an action. They are defined outside the action class, yet have access to the action and the action execution environment at runtime, allowing you to encapsulate cross-cutting code and provide separation of concerns.</p>Interceptors are given the ActionInvocation object at runtime, and may do whatever processing needed, then forward processing to the rest of the ActionInvocation, which will either call the next Interceptor or the Action, if there are no more Interceptors, and do whatever post-processing needed. <p class="paragraph">Interceptors may also decide to short-circuit processing and return whatever result string desired WITHOUT forwarding processing, thus keeping the Action from executing. This ability should be used with caution, however, as any data loading or processing expected to be done by the Action will not happen.</p>Here is the invoke() method from ActionInvocation, which calls the Interceptors and the Action:<br/>
-
-<div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">String</span> invoke() <span class="java&#45;keyword">throws</span> Exception &#123;&#10;        <span class="java&#45;keyword">if</span> (executed) &#123;&#10;            <span class="java&#45;keyword">throw</span>&#160;<span class="java&#45;keyword">new</span> IllegalStateException(<span class="java&#45;quote">&quot;Action has already executed&quot;</span>);&#10;        &#125;&#10;&#10;        <span class="java&#45;keyword">if</span> (interceptors.hasNext()) &#123;&#10;            Interceptor interceptor = (Interceptor) interceptors.next();&#10;            result = interceptor.intercept(<span class="java&#45;keyword">this</span>);&#10;        &#125; <span class="java&#45;keyword">else</span> &#123;&#10;            result = action.execute();&#10;            executed = <span class="java&#45;keyword">true</span>;&#10;        &#125;&#10;&#10;        <span class="java&#45;keyword">return</span> result;&#10;    &#125;</pre>
-</div></div><p class="paragraph">It may not be immediately apparent how the rest of the Interceptors and the Action come to be called from the code snippet. For this we need to look at the Interceptor implementation in <b class="strong">AroundInterceptor</b>:</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">String</span> intercept(ActionInvocation invocation) <span class="java&#45;keyword">throws</span> Exception &#123;&#10;        before(invocation);&#10;&#10;        result = invocation.invoke();&#10;        after(invocation);&#10;&#10;        <span class="java&#45;keyword">return</span> result;&#10;    &#125;</pre>
-</div></div><p class="paragraph">Here we can see that the Interceptor calls back into the ActionInvocation.invoke() to tell the ActionInvocation to continue down the chain and eventually executes the Action. It is here that the Interceptor can decide not to forward to the rest of the Interceptors and the Action, and choose instead to return a return code.</p>It is also important to know what the AroundInterceptor is doing when you extend it to implement your own Interceptors.<p class="paragraph">The AroundInterceptor defines a base class for interceptor implementations. It delegates calls to subclasses, which must implement the abstract methods before() and after(). The before() call is first called, then the rest of the ActionInvocation is called and the String result is saved (and is available to the Interceptor implementation during the after() method). Finally, the after() method is called and the result is returned.</p><img class="rendericon" src="./icons/emoticons/information.png" height="16" width="16" align="absmiddle" alt="" border="0"/> Note that all Interceptor implementations must be threadsafe.
-<p class="paragraph"><h2 class="heading2"><a name="Interceptors-%3Caname%3D%22InterceptorsUtility%22%3E%3C%2Fa%3EUtilityInterceptors"> <a name="Interceptors-Utility"></a> Utility Interceptors</a></h2></p>The TimerInterceptor and LoggingInterceptor are provided as simple examples and utilities. <br/>
-
-<ul class="star">
-<li> The <b class="strong">LoggingInterceptor</b> simply logs before and after executing the rest of the ActionInvocation.</li>
-<li> The <b class="strong">TimerInterceptor</b> times the execution of the remainder of the ActionInvocation.<br/>
-The TimerInterceptor does not extend AroundInterceptor because it needs to keep some state (the start time) from before the rest of the execution. Interceptors must be stateless, so it is impossible to save this in an instance field. It is a good rule of thumb to say that if your interceptor needs to maintain information from the beginning to the end of the interceptor call, it should implement Interceptor directly, not subclass AroundInterceptor. Here is the code for <b class="strong">intercept()</b> in TimerInterceptor:
-</li>
-</ul>
-<div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">String</span> intercept(ActionInvocation dispatcher) <span class="java&#45;keyword">throws</span> Exception &#123;&#10;        <span class="java&#45;object">long</span> startTime = <span class="java&#45;object">System</span>.currentTimeMillis();&#10;        <span class="java&#45;object">String</span> result = dispatcher.invoke();&#10;        <span class="java&#45;object">long</span> executionTime = <span class="java&#45;object">System</span>.currentTimeMillis() &#45; startTime;&#10;        log.info(<span class="java&#45;quote">&quot;Processed action &quot;</span> &#43; dispatcher.getProxy().getActionName() &#43; <span class="java&#45;quote">&quot; in &quot;</span> &#43; executionTime &#43; <span class="java&#45;quote">&quot;ms.&quot;</span>);&#10;&#10;        <span class="java&#45;keyword">return</span> result;&#10;    &#125;</pre>
-</div></div><p class="paragraph">It is important to remember to call <b class="strong">invoke()</b> on the ActionInvocation if you directly implement Interceptor, otherwise the rest of the Interceptors and the Action will not be executed.</p><h2 class="heading2"><a name="Interceptors-%3Caname%3D%22InterceptorsParameter%22%3E%3C%2Fa%3EParameterInterceptorspopulatingyourAction"> <a name="Interceptors-Parameter"></a> Parameter Interceptors - populating your Action</a></h2><p class="paragraph">The StaticParametersInterceptor and ParametersInterceptor populate your Action fields during the ActionInvocation execution.</p><ul class="star">
-<li> The <b class="strong">StaticParametersInterceptor</b> applies the parameters defined in the Action configuration with the &lt;param&gt; elements.</li>
-<li> The <b class="strong">ParametersInterceptor</b> populates the Action with the parameters passed in as part of the request.</li>
-</ul><br/>
-The StaticParametersInterceptor should be applied before the ParametersInterceptor so that the static parameters may be set as the defaults and overridden by the request parameters.<p class="paragraph"><h2 class="heading2"><a name="Interceptors-%3Caname%3D%22InterceptorsModelDriven%22%3E%3C%2Fa%3EModelDrivenInterceptorchoosingyourmodel"> <a name="Interceptors-ModelDriven"></a> ModelDrivenInterceptor - choosing your model</a></h2></p>Normally, the <b class="strong">StaticParameterInterceptor</b> and the <b class="strong">ParametersInterceptor</b> apply themselves directly to the Action.  Using the ModelDrivenInterceptor, you can specify an alternate object to have the parameters applied to instead.<p class="paragraph">Consider the following Action:</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span> class AddContactAction <span class="java&#45;keyword">implements</span> Action &#123;&#10;  <span class="java&#45;keyword">private</span>&#160;<span class="java&#45;object">String</span> name;&#10;  <span class="java&#45;keyword">private</span>&#160;<span class="java&#45;object">String</span> addr;&#10;  <span class="java&#45;keyword">private</span>&#160;<span class="java&#45;object">String</span> city;&#10;&#10;  <span class="java&#45;keyword">public</span> void setName(<span class="java&#45;object">String</span> name) &#123; <span class="java&#45;keyword">this</span>.name = name ; &#125;&#10;  <span class="java&#45;keyword">public</span> void setAddr(<span class="java&#45;object">String</span> addr) &#123; <span class="java&#45;keyword">this</span>.addr = addr ; &#125;&#10;  <span class="java&#45;keyword">public</span> void setCity(<span class="java&#45;object">String</span> city) &#123; <span class="java&#45;keyword">this</span>.city = city ; &#125;&#10;&#10;  <span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">String</span> execute() &#123;&#10;     Contact contact = <span class="java&#45;keyword">new</span> Contact();&#10;     contact.setName(name);&#10;     contact.setAddr(addr);&#10;     contact.setCity(city);&#10;&#10;     <span class="java&#45;comment">// save contact information here</span>&#10;  &#125;&#10;&#125;</pre>
-</div></div><p class="paragraph">We can see that our action will be populated with name, addr, and city parameters if they are passed in.  In the execute we copy these values to a contact object and save the contact.</p>Here&#039;s the ModelDriven interface:<br/>
-
-<div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;keyword">interface</span> ModelDriven &#123;&#10;  <span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">Object</span> getModel();&#10;&#125;</pre>
-</div></div><p class="paragraph">Let&#039;s apply the ModelDriven interface to Action above:</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span> class AddContactAction <span class="java&#45;keyword">implements</span> Action, ModelDriven &#123;&#10;  <span class="java&#45;keyword">private</span> Contact contact = <span class="java&#45;keyword">new</span> Contact();&#10;&#10;  <span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">Object</span> getModel() &#123; <span class="java&#45;keyword">return</span>&#160;<span class="java&#45;keyword">this</span>.contact ; &#125;&#10;&#10;  <span class="java&#45;keyword">public</span> void execute() &#123;&#10;    <span class="java&#45;comment">// save the contact information</span>&#10;  &#125;&#10;&#125;</pre>
-</div></div><p class="paragraph">Now the ParametersInterceptor and the StaticParametersInterceptor will be applied directly to our Contact so when execute gets called, this.contact will already be populated with all the information we need.  Neat, huh?</p>Behavior similar to model driven can be achieved just using the parameter interceptor.  For example, rather than implementing ModelDriven, we could have written:<br/>
-
-<div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span> class AddContactAction <span class="java&#45;keyword">implements</span> Action &#123;&#10;  <span class="java&#45;keyword">private</span> Contact contact = <span class="java&#45;keyword">new</span> Contact();&#10;&#10;  <span class="java&#45;keyword">public</span> Contact getContact &#123; <span class="java&#45;keyword">return</span>&#160;<span class="java&#45;keyword">this</span>.contact ; &#125;&#10;&#10;  <span class="java&#45;keyword">public</span> void execute() &#123;&#10;    <span class="java&#45;comment">// save the contact information</span>&#10;  &#125;&#10;&#125;</pre>
-</div></div><p class="paragraph">The difference between this Action and the previous ModelDriven action is twofold:</p><ul class="star">
-<li> Using the ModelDriven action, we can reference our parameters name, addr, and city.  Also, the Model (Contact) will be pushed onto the ValueStack so we&#039;ll have Contact and AddContactAction on the value stack</li>
-<li> When not using the ModelDriven action, we need to reference our parameters as contact.name, contact.addr, and contact.city.</li>
-</ul><p class="paragraph">One potential drawback when using ModelDriven actions is that if you need to access some parameters in order to load the model for the ModelDriven action, you will need to call the ParametersInterceptor and/or the StaticParametersInterceptor twice (before and after the ModelDrivenInterceptor).  The first time sets all parameters on the Action, the second time sets all parameters on the model.</p><h2 class="heading2"><a name="Interceptors-%3Caname%3D%22InterceptorsChaining%22%3E%3C%2Fa%3EChainingInterceptor"> <a name="Interceptors-Chaining"></a> ChainingInterceptor</a></h2><p class="paragraph">The <b class="strong">ChainingInterceptor</b> populates the Action it is being applied to with the results of the previous action. When actions are chained together, the action being chained FROM is on the ValueStack when the next action is called. This means that when the next ActionProxy is executed, the action that is being chained TO will be placed onto the valuestack, but the old action will also be there, just down one level. This interceptor works by traversing the ValueStack to find the parameters of any objects there and sets them onto the final action.</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Introduction.html

-<html>
-    <head>
-        <title>XWork : Introduction</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Introduction
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 03, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph">XWork is a generic command pattern framework.</p>The Purpose:
-<ul class="star">
-<li> To create a generic, reusable, and extensible command pattern framework not tied to any particular usage.</li>
-</ul><br/>
-Features:
-<ul class="star">
-<li> Flexible and customizable configuration based on a simple Configuration interface</li>
-<li> Core command pattern framework which can be customized and extended through the use of interceptors to fit any request / response environment</li>
-<li> Built in type conversion and action property validation using Ognl</li>
-<li> Powerful validation framework based on runtime attributes and a validation interceptor</li>
-</ul><br/>
-<b class="strong">How does XWork relate to Webwork</b><p class="paragraph">Webwork 2.0+ is built on top of XWork and provides web-specific features that allow you to quickly build web applications using XWork&#039;s command pattern and interceptor framework.</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Localization.html

-<html>
-    <head>
-        <title>XWork : Localization</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Localization
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jul 13, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <p class="paragraph">Any action can indicate that it supports localization by implementing com.opensymphony.xwork.TextProvider.  To access a localized message, simply use one of the various getText() method calls.</p>The default implementation for this is com.opensymphony.xwork.TextProviderSupport, which in turn relies on com.opensymphony.xwork.util.LocalizedTextUtil.  Any Action that extends com.opensymphony.xwork.ActionSupport will automatically gain localization support via TextProviderSupport.<p class="paragraph">In this implementation, when you attempt to look up a message, it attempts to do the following:</p><ul class="star">
-<li> Look for the message in the Action&#039;s class hierarchy.<ul class="star">
-<li> Look for the message in a resource bundle for the class</li>
-<li> If not found, look for the message in a resource bundle for any interface implemented by the class</li>
-<li> If not found, get the super-class and repeat from the first sub-step unless the super-class is Object</li>
-</ul></li>
-</ul>
-<ul class="star">
-<li> If not found and the Action is a ModelDriven Action, then look for the message in<br/>
-the model&#039;s class hierarchy (repeat sub-steps listed above).
-</li>
-</ul>
-<ul class="star">
-<li> If not found, look for the message in a child property.  This is determined by evaluating the message key as an OGNL expression.  For example, if the key is <em class="emphasis">user.address.state</em>, then it will attempt to see if &quot;user&quot; can be resolved into an object.  If so, repeat the entire process fromthe beginning with the object&#039;s class and <em class="emphasis">address.state</em> as the message key.</li>
-</ul>
-<ul class="star">
-<li> If not found, look for the message in the Action&#039;s package hierarchy.</li>
-</ul>
-<ul class="star">
-<li> If still not found, look for the message in the default resource bundles.</li>
-</ul><p class="paragraph"><h3 class="heading3"><a name="Localization-DefaultResourceBundles."> Default Resource Bundles.</a></h3></p>It is possible to register default resource bundles with XWork via LocalizedTextUtil.addDefaultResourceBundle().<p class="paragraph">Message lookup in the default resource bundles is done in reverse order of their registration (i.e. the first resource bundle registered is the last to be searched).</p>By default, one default resource bundle name is registered with LocalizedTextUtil &#8211; &quot;com/opensymphony/xwork/xwork-messages&quot; &#8211; which is bundled with the XWork jar file to provide system-level message texts.
-<p class="paragraph"><h3 class="heading3"><a name="Localization-Example"> Example</a></h3></p>Given a ModelDriven Action called BarnAction where getModel() returns a Horse object, and the Horse object has the following class structure:<br/>
-
-<div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">interface</span> acme.test.Animal;&#10;class acme.test.AnimalImpl <span class="java&#45;keyword">implements</span> Animal;&#10;<span class="java&#45;keyword">interface</span> acme.test.Quadraped <span class="java&#45;keyword">extends</span> Animal;&#10;class acme.test.QuadrapedImpl <span class="java&#45;keyword">extends</span> Animal <span class="java&#45;keyword">implements</span> Quadraped;&#10;class acme.test.Horse <span class="java&#45;keyword">extends</span> QuadrapedImpl;</pre>
-</div></div><p class="paragraph">Then the localization system will attempt to look up the message in the following resource bundles in this order:</p><div class="preformatted"><div class="preformattedContent">
-<pre>acme.test.BarnAction.properties&#10;acme.test.Horse.properties&#10;acme.test.QuadrapedImpl.properties&#10;acme.test.Quadraped.properties&#10;acme.test.AnimalImpl.properties&#10;acme.test.Animal.properties&#10;acme.test.package.properties&#10;acme.package.properties</pre>
-</div></div>
-<p class="paragraph"><h2 class="heading2"><a name="Localization-MessageKeyInterpolation"> Message Key Interpolation</a></h2></p>When looking for the message, if the key indexes a collection (e.g. user.phone[0]) and a message for that specific key cannot be found, the general form will also be looked up (i.e. user.phone[*]).<p class="paragraph"><h2 class="heading2"><a name="Localization-MessageInterpolation"> Message Interpolation</a></h2></p>If a message is found, it will also be interpolated.  Anything within <b class="strong">$&#123;...&#125;</b> will be treated as an OGNL expression and evaluated as such.
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Logging.html

-<html>
-    <head>
-        <title>XWork : Logging</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Logging
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 05, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <p class="paragraph">Logging in XWork is handled by <a href="http://jakarta.apache.org/commons/logging" title="Visit page outside Confluence">Commons-Logging</a>.  If Log4J is present in the classpath, logging tasks will be passed through to Log4J.</p>The logger names are the class names.  The pattern used is:
-<div class="code"><div class="codeContent">
-<pre>Log log = LogFactory.getLog(ThisClass.class);</pre>
-</div></div><p class="paragraph">For details on configuring commons-logging, see <a href="http://jakarta.apache.org/commons/logging/guide.html#Configuration" title="Visit page outside Confluence">&#104;ttp://jakarta.apache.org/commons/logging/guide.html#Configuration</a>.</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Null Property Access.html

-<html>
-    <head>
-        <title>XWork : Null Property Access</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Null Property Access
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 24, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <p class="paragraph">Null property access is a unique feature to XWork that allows object graphs to be created at runtime, saving you the headache of having to pre-initialize them.</p><h3 class="heading3"><a name="NullPropertyAccess-Simpleobjectgraphs"> Simple object graphs</a></h3><p class="paragraph">The feature is quite simple: <b class="strong">only</b> during the ParametersInterceptor (for WebWork this would be when http parameters are applied to an action), if an expression being set, such as &quot;document.title&quot;, results in a NullPointerException, XWork will attempt to create the null object and try again. So in this case, if &quot;document&quot; is null, WebWork will construct a new Document object so that setting the title will succeed.</p>This is very useful because it reduces the amount of flattening (and unflattening) you are required to do in your action classes when displaying and setting data from web pages. Rather, you can usually represent the complete object graph by just naming your input fields with well thought-out names (like &quot;document.title&quot;). 
-<p class="paragraph"><h3 class="heading3"><a name="NullPropertyAccess-Collections%2CListsandMaps"> Collections, Lists and Maps</a></h3></p>XWork extends this feature even further by offering special support for Collections, Lists and Maps.  If you are providing input for one of these interfaces, XWork can be told what type of objects they will hold and automatically populate them accordingly. What this means is that if you refer to &quot;children[0].name&quot;, XWork will automatically create a new List to hold the children and also add an empty Child object to that list, so that setting a name on the expression &quot;children[0].name&quot; will work correctly. The same goes for maps.  <p class="paragraph">For this to work you must tell the converters what the objects in the List or Map will be. You do this by specifying &quot;Collection_<b class="strong">property</b> = com.acme.CollectionItem&quot; in the conversion properties file. So if you have an action that has a &quot;children&quot; property that should be filled with Child objects, YourAction-conversion.properties should contain:</p><div class="code"><div class="codeContent">
-<pre>Collection&#95;children = come.acme.Child</pre>
-</div></div><p class="paragraph">For the purposes of conversion, WebWork considers Collections and Lists to be the same.   If the &quot;children&quot; property was declared to be a Collection, a List would be created and used.</p><h3 class="heading3"><a name="NullPropertyAccess-CustomObjects"> Custom Objects</a></h3><p class="paragraph">Advanced users who need to instantiate custom objects will want to extend <b class="strong">com.opensymphony.xwork.ObjectFactory</b> and override the buildBean(Class) method.  The default implementation is rather trivial:</p><div class="code"><div class="codeContent">
-<pre><span class="java&#45;keyword">public</span>&#160;<span class="java&#45;object">Object</span> buildBean(<span class="java&#45;object">Class</span> clazz) <span class="java&#45;keyword">throws</span> Exception &#123;&#10;  <span class="java&#45;keyword">return</span> clazz.newInstance();&#10;&#125;</pre>
-</div></div><p class="paragraph">Once you have your own custom ObjectFactory, you&#039;ll need to let XWork know to use it.  You do this by calling ObjectFactory.setObjectFactory(yourObjFactory).</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Ognl.html

-<html>
-    <head>
-        <title>XWork : Ognl</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Ognl
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jul 19, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <p class="paragraph">OGNL is the Object Graph Navigation Language - see <a href="http://www.ognl.org" title="Visit page outside Confluence">&#104;ttp://www.ognl.org</a> for the full documentation of OGNL. In this document we will only show the additional language features that are provided on top of the base OGNL EL.</p><h2 class="heading2"><a name="Ognl-XWorkspecificLanguageFeatures"> XWork-specific Language Features</a></h2><p class="paragraph"><h3 class="heading3"><a name="Ognl-TheValueStack"> The ValueStack</a></h3></p>The biggest addition that XWork provides on top of OGNL is the support for the ValueStack. While OGNL operates under the assumption there is only one &quot;root&quot;, XWork&#039;s ValueStack concept requires there be many &quot;roots&quot;. <p class="paragraph">For example, suppose we are using standard OGNL (not using XWork) and there are two objects in the OgnlContext map: &quot;foo&quot; -&gt; foo and &quot;bar&quot; -&gt; bar and that the foo object is also configured to be the single <b class="strong">root</b> object. The following code illustrates how OGNL deals with these three situations:</p><div class="code"><div class="codeContent">
-<pre>#foo.blah // returns foo.getBlah()&#10;#bar.blah // returns bar.getBlah()&#10;blah      // returns foo.getBlah() because foo is the root</pre>
-</div></div><p class="paragraph">What this means is that OGNL allows many objects in the context, but unless the object you are trying to access is the root, it must be prepended with a namespaces such as @bar. XWork, however, is a little different&#8230;</p>In XWork, the entire ValueStack is the root object in the context. But rather than having your expressions get the object you want from the stack and then get properties from that (ie: peek().blah), XWork has a special OGNL PropertyAccessor that will automatically look at the all entries in the stack (from the top down) until it finds an object with the property you are looking for.<p class="paragraph">For example, suppose the stack contains two objects: Animal and Person. Both objects have a &quot;name&quot; property, Animal has a &quot;species&quot; property, and Person has a &quot;salary&quot; property. Animal is on the top of the stack, and Person is below it. The follow code fragments help you get an idea of what is going on here:</p><div class="code"><div class="codeContent">
-<pre>species    // call to animal.getSpecies()&#10;salary     // call to person.getSalary()&#10;name       // call to animal.getName() because animal is on the top</pre>
-</div></div><p class="paragraph">In the last example, there was a tie and so the animal&#039;s name was returned. Usually this is the desired effect, but sometimes you want the property of a lower-level object. To do this, XWork has added support for indexes on the ValueStack. All you have to do is:</p><div class="code"><div class="codeContent">
-<pre>&#91;0&#93;.name   // call to animal.getName()&#10;&#91;1&#93;.name   // call to person.getName()</pre>
-</div></div><p class="paragraph">Note that the ValueStack is essentially a List.  Calling &#91;1&#93; on the stack returns a sub-stack beginning with the element at index 1.  It&#039;s only when you call methods on the stack that your actual objects will be called.  Said another way, let&#039;s say I have a ValueStack that consists of a model and an action (&#91; model, action &#93;).  Here&#039;s how the following OGNL expressions would resolve:</p><div class="code"><div class="codeContent">
-<pre>&#91;0&#93;      // a CompoundRoot object that contains our stack, &#91;model, action&#93;&#10;&#91;1&#93;      // another CompoundRoot that contains only &#91;action&#93;&#10;&#91;0&#93;.toString() // calls toString() on the first object in the ValueStack&#10;               // (excluding the CompoundRoot) that supports the toString() method&#10;&#91;1&#93;.foo  // call getFoo() on the first object in the ValueStack starting from action&#10;         // (excluding the CompoundRoot) that supports a getFoo() method</pre>
-</div></div><br/>
-
-
-
-
-<p class="paragraph"><h3 class="heading3"><a name="Ognl-Accessingstaticproperties"> Accessing static properties</a></h3></p>OGNL supports accessing static properties as well as static methods. As the OGNL docs point out, you can explicetly call statics by doing the following:<br/>
-
-<div class="code"><div class="codeContent">
-<pre>&#64;some.package.ClassName&#64;FOO&#95;PROPERTY&#10;&#64;some.package.ClassName&#64;someMethod()</pre>
-</div></div><p class="paragraph">However, XWork allows you to avoid having to specify the full package name and call static properties and methods of your action classes using the &quot;vs&quot; (short for ValueStack) prefix:</p><div class="code"><div class="codeContent">
-<pre>&#64;vs&#64;FOO&#95;PROPERTY&#10;&#64;vs&#64;someMethod()&#10;&#10;&#64;vs1&#64;FOO&#95;PROPERTY&#10;&#64;vs1&#64;someMethod()&#10;&#10;&#64;vs2&#64;BAR&#95;PROPERTY&#10;&#64;vs2&#64;someOtherMethod()</pre>
-</div></div><p class="paragraph">The important thing to note here is that if the class name you specify is just &quot;vs&quot;, the class for the object on the top of the stack is used. If you specify a number after the &quot;vs&quot; string, an object&#039;s class deeper in the stack is used instead.</p><h3 class="heading3"><a name="Ognl-Thetopkeyword"> The <em class="emphasis">top</em> keyword</a></h3><p class="paragraph">XWork also adds a new keyword &#8211; <b class="strong">top</b> &#8211; that can be used to access to first object in the ValueStack.</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/PrepareInterceptor.html

-<html>
-    <head>
-        <title>XWork : PrepareInterceptor</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : PrepareInterceptor
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Jun 27, 2004 by <font color="#0050B2">unkyaku</font>.
-				    </div>
-
-				    <div class="code"><div class="codeContent">
-<pre><span class="xml&#45;tag">&lt;interceptor name=<span class="xml&#45;quote">&quot;prepare&quot;</span> class=<span class="xml&#45;quote">&quot;com.opensymphony.xwork.interceptor.PrepareInterceptor&quot;</span>/&gt;</span></pre>
-</div></div><p class="paragraph">This interceptor watches for Actions that implement <b class="strong">com.opensymphony.xwork.Preparable</b> and calls the <b class="strong">prepare()</b> method on it.</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Release Notes - 1.0.1.html

-<html>
-    <head>
-        <title>XWork : Release Notes - 1.0.1</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Release Notes - 1.0.1
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Dec 12, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph"><h2 style="margin: 4px 0px 4px 0px;" class="heading2"><a name="ReleaseNotes-1.0.1-XWork1.0.1"> XWork 1.0.1</a></h2></p><h3 class="heading3"><a name="ReleaseNotes-1.0.1-KeyChanges"> Key Changes</a></h3>
-<ul class="star">
-<li> Introduction of an ObjectFactory that provides for easy integration to libraries like Spring and Pico</li>
-<li> Added actionMessages support &#8211; just like errorMessages but not counted as an error</li>
-<li> Major performance improvements with Ognl 2.6.5</li>
-</ul>
-<h3 class="heading3"><a name="ReleaseNotes-1.0.1-Changelog"> Changelog</a></h3><p class="paragraph"><p>
-    <table  width="100%" cellspacing="0" class="grid">
-        <tr>
-            <th colspan="3" style="text-align: left;">
-                <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10050&fixfor=21213&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
-                <span class="smalltext">(19 issues)</span>
-            </th>
-        </tr>
-        <tr>
-                        <th style="text-align: left;">
-                T                                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                Key                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                                Summary                                                                                                                                            </th>
-                    </tr>
-                                            <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-188"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-188">XW-188</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-188">Correct logging level in DefaultActionInvocation.invokeAction(..)</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-183"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-183">XW-183</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-183">NPE thrown when trying to set a sub-property of a property that doesnt exist</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-182"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-182">XW-182</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-182">NPE thrown by LocalizedTextUtil.findText</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-167"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-167">XW-167</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-167">XWorkBasicConverter conversion from Date to String is not localized</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-166"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-166">XW-166</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-166">[Patch] Improve support for ModelDriven interface</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-165"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-165">XW-165</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-165">[PATCH] VisitorFieldValidator not setting fieldError correctly</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-164"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-164">XW-164</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-164">[PATCH] TypeConverter should check class hierarchy for conversion properties</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-163"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-163">XW-163</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-163">[PATCH] Added some javadocs to Interceptors</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-162"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-162">XW-162</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-162">TypeConverter created by ObjectFactory</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-161"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-161">XW-161</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-161">Replaceable ObjectFactory for creating framework objects to allow easier integration with IoC containers</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-160"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-160">XW-160</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-160">Add infinite recursion detection to the ChainingInterceptor</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-159"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-159">XW-159</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-159">XWork build is broken</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-158"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-158">XW-158</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-158">Email and URL Validators adding error messages for empty fields</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-157"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-157">XW-157</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-157">Further Optimize Validator Lookup in ActionValidatorManager</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-156"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-156">XW-156</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-156">add actionMessages support</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-155"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-155">XW-155</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-155">NPE thrown when invalid method is looked up</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-117"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-117">XW-117</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-117">Additional methods to determine if errors using JSTL</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-56"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-56">XW-56</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-56">Add localization support to XWorkConverter</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-23"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-23">XW-23</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-23">Investigate using runtime attributes to configure interceptors</a>
-                                    </td>
-                            </tr>
-            </table>
-</p>
-</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Release Notes - 1.0.2.html

-<html>
-    <head>
-        <title>XWork : Release Notes - 1.0.2</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Release Notes - 1.0.2
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Dec 12, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph"><h2 style="margin: 4px 0px 4px 0px;" class="heading2"><a name="ReleaseNotes-1.0.2-XWork1.0.2"> XWork 1.0.2</a></h2></p><h3 class="heading3"><a name="ReleaseNotes-1.0.2-KeyChanges"> Key Changes</a></h3>
-<ul class="star">
-<li> Added an <b class="strong">xwork-default.xml</b> configuration file that can be used as a standard starting place for non-web related XWork deploys (such as in Quartz)</li>
-<li> Localized text for collections can now be referenced in the form <b class="strong">someArray&#91;&#42;&#93;.someField</b>, where &#42; provides a &quot;catch-all&quot; for any index element</li>
-<li> Text retrieved using the default TextProvider now looks attempts to look for messages in the property files of child objects (if applicable) if none can be found.</li>
-<li> <b class="strong">Field-level validation can be short-circuited</b>, meaning that you can stop the validation chain right away if you wish. See <a href="Validation Framework.html" title="Validation Framework">Validation Framework</a> for details.</li>
-<li> Simple <b class="strong">type conversion, such as int and float, now use the Locale</b>. This will cause the correct use of &quot;,&quot; and &quot;.&quot; depending on the locale.</li>
-<li> Much improved handling for type conversion of elements in collections.</li>
-</ul>
-<h3 class="heading3"><a name="ReleaseNotes-1.0.2-Changelog"> Changelog</a></h3><p class="paragraph"><p>
-    <table  width="100%" cellspacing="0" class="grid">
-        <tr>
-            <th colspan="3" style="text-align: left;">
-                <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10050&fixfor=21372&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
-                <span class="smalltext">(15 issues)</span>
-            </th>
-        </tr>
-        <tr>
-                        <th style="text-align: left;">
-                T                                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                Key                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                                Summary                                                                                                                                            </th>
-                    </tr>
-                                            <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-210"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-210">XW-210</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-210">Make default type conversion message a localized text that can be overidden</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-205"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-205">XW-205</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-205">missing xwork 1.0.2 dtd in jar and website and typo in ValidationInterceptor</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-204"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-204">XW-204</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-204">TextProvider.getText() should look in child property files</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-203"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-203">XW-203</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-203">Add &quot;trim&quot; parameter to string validators</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-202"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-202">XW-202</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-202">Integer and Float conversion dont work in CVS HEAD</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-200"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-200">XW-200</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-200">i18n broken when the name of the text to find starts with a property exposed by the action</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-195"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-195">XW-195</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-195">Add interface XWorkStatics which contains XWork-related constants from WebWorkStatics</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-194"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-194">XW-194</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-194">Patch to help LocalizedTextUtil deal with messages for indexed fields (collections)</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-193"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-193">XW-193</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-193">InstantiatingNullHandler and Typeconversion fails</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-192"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-192">XW-192</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-192">Create a version 1.0.2 of the XWork validation DTD with short circuit</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-191"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-191">XW-191</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-191">Type conversion improvement.</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-190"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-190">XW-190</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-190">Provide a xwork-default.xml.</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-189"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-189">XW-189</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-189">Improve ActionValidationManager's short circuit behaviour</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-179"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-179">XW-179</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-179">Optimise OgnlUtil.copy method</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-172"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-172">XW-172</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-172">XWorkBasicConverter doesn't care about the current locale</a>
-                                    </td>
-                            </tr>
-            </table>
-</p>
-</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Release Notes - 1.0.3.html

-<html>
-    <head>
-        <title>XWork : Release Notes - 1.0.3</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Release Notes - 1.0.3
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Dec 12, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph"><h2 style="margin: 4px 0px 4px 0px;" class="heading2"><a name="ReleaseNotes-1.0.3-XWork1.0.3"> XWork 1.0.3</a></h2></p><h3 class="heading3"><a name="ReleaseNotes-1.0.3-KeyChanges"> Key Changes</a></h3>
-<ul class="star">
-<li> Fixed critical problem where xwork-validator-1.0.dtd wasn&#039;t in the distribution.</li>
-</ul>
-<h3 class="heading3"><a name="ReleaseNotes-1.0.3-Changelog"> Changelog</a></h3><p class="paragraph"><p>
-    <table  width="100%" cellspacing="0" class="grid">
-        <tr>
-            <th colspan="3" style="text-align: left;">
-                <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10050&fixfor=21390&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
-                <span class="smalltext">(1 issues)</span>
-            </th>
-        </tr>
-        <tr>
-                        <th style="text-align: left;">
-                T                                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                Key                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                                Summary                                                                                                                                            </th>
-                    </tr>
-                                            <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-214"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-214">XW-214</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-214">xwork-validator-1.0.dtd not in xwork.jar</a>
-                                    </td>
-                            </tr>
-            </table>
-</p>
-</p>
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Release Notes - 1.0.4.html

-<html>
-    <head>
-        <title>XWork : Release Notes - 1.0.4</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Release Notes - 1.0.4
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Dec 12, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph"><h2 style="margin: 4px 0px 4px 0px;" class="heading2"><a name="ReleaseNotes-1.0.4-XWork1.0.4ReleaseNotes"> XWork 1.0.4 Release Notes</a></h2></p><h3 class="heading3"><a name="ReleaseNotes-1.0.4-KeyChanges"> Key Changes</a></h3>
-This release primarily involves a few internal tweaks and API convenience methods. It is backwards compatible with 1.0.3 and should have no impact when upgrading.
-<p class="paragraph"><h3 class="heading3"><a name="ReleaseNotes-1.0.4-Changelog"> Changelog</a></h3></p><p>
-    <table  width="100%" cellspacing="0" class="grid">
-        <tr>
-            <th colspan="3" style="text-align: left;">
-                <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10050&fixfor=21394&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
-                <span class="smalltext">(5 issues)</span>
-            </th>
-        </tr>
-        <tr>
-                        <th style="text-align: left;">
-                T                                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                Key                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                                Summary                                                                                                                                            </th>
-                    </tr>
-                                            <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-240"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-240">XW-240</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-240">Added convenience methods to ComponentManager</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-220"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-220">XW-220</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-220">OgnlValueStack.findValue doesnt use custom converter when converting to String.class</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-219"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-219">XW-219</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-219">xwork.xml should allow no namespaces</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-215"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-215">XW-215</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-215">upload newest xwork jars to ibiblio servers</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-174"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-174">XW-174</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-174">ObjectFactory requires same action to return same classname</a>
-                                    </td>
-                            </tr>
-            </table>
-</p>
-
-
-
-				    
-                    			    </td>
-		    </tr>
-	    </table>
-	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-			<tr>
-				<td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td>
-			</tr>
-		    <tr>
-			    <td align="center"><font color="grey">Document generated by Confluence on Dec 12, 2004 12:35</font></td>
-		    </tr>
-	    </table>
-    </body>
-</html>

docs/wikidocs/Release Notes - 1.0.5.html

-<html>
-    <head>
-        <title>XWork : Release Notes - 1.0.5</title>
-	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
-        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
-    </head>
-
-    <body>
-	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
-		    <tr>
-			    <td valign="top" class="pagebody">
-				    <div class="pageheader">
-					    <span class="pagetitle">
-                            XWork : Release Notes - 1.0.5
-                                                    </span>
-				    </div>
-				    <div class="pagesubheading">
-					    This page last changed on Dec 12, 2004 by <font color="#0050B2">plightbo</font>.
-				    </div>
-
-				    <p class="paragraph"><h2 style="margin: 4px 0px 4px 0px;" class="heading2"><a name="ReleaseNotes-1.0.5-XWork1.0.5ReleaseNotes"> XWork 1.0.5 Release Notes</a></h2></p><h3 class="heading3"><a name="ReleaseNotes-1.0.5-KeyChanges"> Key Changes</a></h3>
-<ul class="star">
-<li> Moderate security vulnerability resolved</li>
-<li> Configuration defaults to ActionSupport for the action if you don&#039;t define a class</li>
-<li> Configuration defaults to &quot;success&quot; for the result if you don&#039;t define a name</li>
-<li> Minor fixes for i18n-related issues</li>
-</ul>
-<h3 class="heading3"><a name="ReleaseNotes-1.0.5-MigrationNotes"> Migration Notes</a></h3>
-
-<table class="wikitable">
-<tr>
-<th> Version </th><th> Description </th><th> Old Code </th><th> New Code </th>
-</tr><tr>
-<td> 1.0.4 and below </td><td> Parameters interceptor behavior changed </td><td> </td><td> </td>
-</tr>
-</table>
-<p class="paragraph"><h3 class="heading3"><a name="ReleaseNotes-1.0.5-Changelog"> Changelog</a></h3></p><p>
-    <table  width="100%" cellspacing="0" class="grid">
-        <tr>
-            <th colspan="3" style="text-align: left;">
-                <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10050&fixfor=21420&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
-                <span class="smalltext">(6 issues)</span>
-            </th>
-        </tr>
-        <tr>
-                        <th style="text-align: left;">
-                T                                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                Key                                                                                                                                                            </th>
-                        <th style="text-align: left;">
-                                                Summary                                                                                                                                            </th>
-                    </tr>
-                                            <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-254"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-254">XW-254</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-254">Security problem with ParametersInterceptor</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-244"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-244">XW-244</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-244">Default action class and result name</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-241"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-241">XW-241</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-241">Allow ObjectFactory impls that support Actions without  no-arg constructors</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-225"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-225">XW-225</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-225">Whitespace in xml configuration</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-224"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-224">XW-224</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-224">XMLConfigurationProvider should not fail if it cannot load a result type</a>
-                                    </td>
-                            </tr>
-                                    <tr class="rowAlternate">
-                                                            <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-222"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/XW-222">XW-222</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/XW-222">OgnlException while setting property 'fieldName'</a>
-                                    </td>
-                            </tr>
-            </table>
-</p>
-
-
-