Anonymous avatar Anonymous committed bb82073

Preparing the 2.2.6 security fix release
o updating wiki docs

git-svn-id: http://svn.opensymphony.com/svn/webwork/trunk@2932 573baa09-0c28-0410-bef9-dab3c582ae83

Comments (0)

Files changed (35)

docs/wikidocs/AJAX Validation.html

 <table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="./icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>This requires DWR servlet being setup, dojo and the ajax theme being used.</td></tr></table>
 <table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="./icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>In the Ajax theme, dwr is used for normal validation while dojo everything else (widgets, XHR, browser JS events etc.)</td></tr></table>
 <table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="./icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>In order for validation to function properly it is advised to used standard WebWork Tags.</td></tr></table>
+<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="./icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>A description of the internal working of Ajax Validation using DWR could be found here.</td></tr></table>
 
 <h1><a name="AJAXValidation-SetupDWR"></a>Setup DWR</h1>
 

docs/wikidocs/Exception Interceptor.html

 
     <span class="code-tag">&lt;package name=<span class="code-quote">"default"</span> extends=<span class="code-quote">"webwork-default"</span>&gt;</span>
         <span class="code-tag">&lt;global-results&gt;</span>
-            <span class="code-tag">&lt;result name=<span class="code-quote">"success"</span> type=<span class="code-quote">"freemarker"</span>&gt;</span>error.ftl<span class="code-tag">&lt;/result&gt;</span>
+            <span class="code-tag">&lt;result name=<span class="code-quote">"error"</span> type=<span class="code-quote">"freemarker"</span>&gt;</span>error.ftl<span class="code-tag">&lt;/result&gt;</span>
         <span class="code-tag">&lt;/global-results&gt;</span>
 
         <span class="code-tag">&lt;global-exception-mappings&gt;</span>

docs/wikidocs/Execute and Wait Interceptor.html

     <span class="code-tag">&lt;result name=<span class="code-quote">"success"</span>&gt;</span>longRunningAction-success.jsp<span class="code-tag">&lt;/result&gt;</span>
 <span class="code-tag">&lt;/action&gt;</span>
 <span class="code-tag">&lt;/pre&gt;</span></pre>
-</div></div>
+</div></div>
+
+<h1><a name="ExecuteandWaitInterceptor-ExtraInformation"></a>Extra Information</h1>
+<ul class="alternate" type="square">
+	<li><a href="Terminating an ExecuteAndWait action.html" title="Terminating an ExecuteAndWait action">Terminating an ExecuteAndWait action</a></li>
+</ul>
+
 
                     			    </td>
 		    </tr>

docs/wikidocs/FAQ.html

 	<li><a href="Why does FreeMarker complains that there's an error in my user-directive when I used JSP Tag.html" title="Why does FreeMarker complains that there's an error in my user-directive when I used JSP Tag">Why does FreeMarker complains that there's an error in my user&#45;directive when I used JSP Tag</a></li>
 	<li><a href="Can I have my webwork action tag run another method apart from the default execute method.html" title="Can I have my webwork action tag run another method apart from the default execute method">Can I have my webwork action tag run another method apart from the default execute method</a></li>
 	<li><a href="Why does WebWork's Rich Text Editor does not render.html" title="Why does WebWork's Rich Text Editor does not render">Why does WebWork's Rich Text Editor does not render</a></li>
-	<li><a href="Why doesn't WebWork's If tag evaluate test=".html#Whydoesn%27tWebWork%27sIftagevaluatetest%3D%22-parameters.someParam...%22properly" title="parameters.someParam ... " properly on Why doesn't WebWork's If tag evaluate test="">Why doesn't WebWork's If tag evaluate test="#parameters.someParam ... " properly</a></li>
+	<li><a href="Why doesn not WebWork If tag evaluate test=.html#WhydoesnnotWebWorkIftagevaluatetest%3D-parameters.someParam...%22properly" title="parameters.someParam ... " properly on Why doesn not WebWork If tag evaluate test=">Why doesn not WebWork If tag evaluate test=#parameters.someParam ... " properly</a></li>
 	<li><a href="Why does Url tag compound my namespace.html" title="Why does Url tag compound my namespace">Why does Url tag compound my namespace</a></li>
 	<li><a href="Some container complains about OGNL expression while parsing my jsp page.html" title="Some container complains about OGNL expression while parsing my jsp page">Some container complains about OGNL expression while parsing my jsp page</a></li>
 	<li><a href="How do I set a date into datepicker component.html" title="How do I set a date into datepicker component">How do I set a date into datepicker component</a></li>
 	<li><a href="How do I allow WebWork action to be executed only using WebWork Action Tag but not from direct url access from browser.html" title="How do I allow WebWork action to be executed only using WebWork Action Tag but not from direct url access from browser">How do I allow WebWork action to be executed only using WebWork Action Tag but not from direct url access from browser</a></li>
 	<li><a href="What should I do about the conflict with JSP 2.1 EL and WebWork OGNL EL.html" title="What should I do about the conflict with JSP 2.1 EL and WebWork OGNL EL">What should I do about the conflict with JSP 2.1 EL and WebWork OGNL EL</a></li>
 	<li><a href="I want my form's submit button to be displayed differently eg. besides my text field.html" title="I want my form's submit button to be displayed differently eg. besides my text field">I want my form's submit button to be displayed differently eg. besides my text field</a></li>
+	<li><a href="How do I use variables exposed by Display Tag with WebWork Tags in a Freemarker page.html" title="How do I use variables exposed by Display Tag with WebWork Tags in a Freemarker page">How do I use variables exposed by Display Tag with WebWork Tags in a Freemarker page</a></li>
 </ul>
 
 
 <ul>
 	<li><a href="How do I change the error message for invalid inputted fields.html" title="How do I change the error message for invalid inputted fields">How do I change the error message for invalid inputted fields</a></li>
 	<li><a href="Why am I getting RuntimeException saying Compound Root cannot find a particular Object with a particular property.html" title="Why am I getting RuntimeException saying Compound Root cannot find a particular Object with a particular property">Why am I getting RuntimeException saying Compound Root cannot find a particular Object with a particular property</a></li>
+	<li><a href="WebWork ignores my custom List converter, resulting in the appropriate properties not being set.html" title="WebWork ignores my custom List converter, resulting in the appropriate properties not being set">WebWork ignores my custom List converter, resulting in the appropriate properties not being set</a></li>
 </ul>
 
 

docs/wikidocs/FreeMarker Result.html

 		    <tr>
 			    <td valign="top" class="pagebody">
 				    
-<p>Renders a view using the Freemarker template engine.  Alternatively, the
+<p>Renders a view using the Freemarker template engine. Alternatively, the
 com.opensymphony.webwork.dispatcher.ServletDispatcherResult
 dispatcher result type can be used in conjunction Webwork's {@link
 FreemarkerServlet}.
 
 <p></ul></p>
 
+<p><p>
+<b>NOTE (bufferOutput attribute):</b><br/>
+Allow customization of either (when true) to write result to response
+stream/writer only when everything is ok (without exception) or otherwise.
+This is usefull when using Freemarker's "rethrow" exception handler, where we
+don't want partial of the page to be writen and then exception occurred and
+we have freemarker's "rethrow" exception handler to take over but its too late
+since part of the response has already been 'commited' to the stream/writer.
+</p></p>
+
 
 <p>Also see <a href="WebWork Freemarker Support.html" title="WebWork Freemarker Support">WebWork Freemarker Support</a>.</p>
 
 
 <p><li><b>location (default)</b> - the location of the template to process.</li></p>
 
-<p><li><b>parse</b> - true by default. If set to false, the location param will 
-not be parsed for Ognl expressions.</li></p>
+<p><li><b>parse</b> - true by default. If set to false, the location param
+will not be parsed for Ognl expressions.</li></p>
 
 <p><li><b>contentType</b> - defaults to "text/html" unless specified.</li></p>
 
+<p><li><b>bufferOutput</b> - default to false. If true, will only write to
+the response if the whole freemarker page could be rendered ok. </li></p>
+
 <p></ul></p>
 
 
 <h1><a name="FreeMarkerResult-Examples"></a>Examples</h1>
 
 <div class="code"><div class="codeContent">
-<pre class="code-xml"><span class="code-tag">&lt;result name=<span class="code-quote">"success"</span> type=<span class="code-quote">"freemarker"</span>&gt;</span>foo.ftl<span class="code-tag">&lt;/result&gt;</span></pre>
+<pre class="code-xml"><span class="code-tag">&lt;result name=&amp;quot;success&amp;quot; type=&amp;quot;freemarker&amp;quot;&gt;</span>foo.ftl<span class="code-tag">&lt;/result&gt;</span></pre>
 </div></div>
 
                     			    </td>

docs/wikidocs/FreeMarker.html

 
 <p>There are some advanced features that may be useful when building WebWork applications with FreeMarker.</p>
 
+<h2><a name="FreeMarker-ExceptionHandling"></a>Exception Handling</h2>
+
+<p>By default when an exception occurs a error report is printed.  You can <a href="FreemarkerTemplateExceptionHandling.html" title="FreemarkerTemplateExceptionHandling">change the handler to meet your environment's needs</a>, such as having it ignore errors or present a friendly error page.</p>
+
 <h2><a name="FreeMarker-TypeConversionandLocales"></a>Type Conversion and Locales</h2>
 
 <p>FreeMarker has built in support for formatting dates and numbers. The formatting rules are based on the locale associated with the action request, which is by default set in <a href="webwork.properties.html" title="webwork.properties">webwork.properties</a> but can be over-ridden using the <a href="I18n Interceptor.html" title="I18n Interceptor">I18n Interceptor</a>. This is normally perfect for your needs, but it is important to remember that these formatting rules are handled by FreeMarker and not by WebWork's <a href="Type Conversion.html" title="Type Conversion">Type Conversion</a> support.</p>
 <div class="code"><div class="codeContent">
 <pre class="code-none">webwork.freemarker.manager.classname = com.yourcompany.YourFreeMarkerManager</pre>
 </div></div>
-<p>&nbsp;</p>
+
+<p>The custom Freemarker Manager could also be instatiated using IoC container like Spring. To learn how to allow IoC containers to instantiate WebWork's component (eg. Action, Interceptor etc.) have a look at <a href="3rd Party Integration.html" title="3rd Party Integration">here</a> typically</p>
+<ul>
+	<li><a href="Spring.html" title="Spring">This for Spring</a></li>
+	<li><a href="Pico.html" title="Pico">This for Pico</a></li>
+</ul>
+
+
+<p>For example if we have the following Spring beans xml configuration :-</p>
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;beans ...&gt;</span>
+   <span class="code-tag">&lt;bean name=<span class="code-quote">"CustomFreemarkerManager"</span> class=<span class="code-quote">"com.yourcompany.YourFreeMarkerManager"</span>&gt;</span>
+     ...
+   <span class="code-tag">&lt;/bean&gt;</span>
+ <span class="code-tag">&lt;beans&gt;</span></pre>
+</div></div>
+
+<p>The <a href="webwork.properties.html" title="webwork.properties">webwork.properties</a> file would look something like :-</p>
+<div class="code"><div class="codeContent">
+<pre class="code-none"># turn on Spring integration
+webwork.objectFactory=spring
+webwork.freemarker.manager.classname = CustomFreemarkerManager</pre>
+</div></div>
+
 
 <h2><a name="FreeMarker-ObjectWrapperSettings"></a>ObjectWrapper Settings</h2>
 

docs/wikidocs/FreemarkerTemplateExceptionHandling.html

+<html>
+    <head>
+        <title>WebWork - 
+        FreemarkerTemplateExceptionHandling
+         </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">
+				    <p>Freemarker comes with a number of handlers for when an exception occurs in a template.  You can also write your own handler for custom circumstances.  This is all detailed <a href="http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html" title="Visit page outside Confluence">in the Freemarker docs</a>.</p>
+
+<h2><a name="FreemarkerTemplateExceptionHandling-Selectinganexceptionhandler"></a>Selecting an exception handler</h2>
+
+<p>Selection can be made through a freemarker.properties file in the root of you classpath (i.e. next to your xwork.xml).  The property to set is </p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java">template_exception_handler=rethrow</pre>
+</div></div>
+
+<p>The pre-defined choices are:</p>
+
+<ul>
+	<li><b>debug</b> - Prints stack trace (includes FTL error message and FTL stack trace) and re-throws the exception.</li>
+	<li><b>html_debug</b> (default) - Same as debug, but it formats the stack trace so that it will be readable with Web browsers.</li>
+	<li><b>ignore</b> - Simply suppresses all exceptions (but remember, FreeMarker will still log them). It does nothing to handle the event. It does not re-throw the exception.</li>
+	<li><b>rethrow</b> - Simply re-throws all exceptions, it doesn't do anything else. This handler can be good for Web applications (assuming you don't want to continue template processing after exception), because it gives the most control to the Web application over page generation on error conditions (since FreeMarker doesn't print anything to the output about the error).</li>
+</ul>
+
+
+<p>Descriptions taken from the Freemarker docs.</p>
+
+<p>If you wish to use a custom handler then you provide your fully qualififed class name.</p>
+
+
+<h2><a name="FreemarkerTemplateExceptionHandling-RethrowingExceptions"></a>Rethrowing Exceptions</h2>
+
+<p>For a production system it is often a good choice to use the <b>rethrow</b> handler.  This prevents your stack trace being displayed to the user and allows you to present a friendly error screen.</p>
+
+<p>As of WebWork 2.2.6 when the rethrow handler is active then all output is buffered until the template is fully processed.  This prevents parts of the template processed before an exception appearing in the view.  If processing completes then the output is flushed to the writer.  If an exception occurs then it is thrown out of the Freemarker Result Type and processed by the <a href="Exception Interceptor.html" title="Exception Interceptor">Exception Interceptor</a>. See <a href="Exception Handling.html" title="Exception Handling">Exception Handling</a> for details on how to present a friendly error screen.</p>
+
+<p>If you are using a custom result handler then the <a href="Freemarker Result.html" title="FreeMarker Result">FreemarkerResultType</a> provides a parameter <b>bufferOutput</b> which when set to true buffers all output, preventing unwanted content being written.</p>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/How do I use variables exposed by Display Tag with WebWork Tags in a Freemarker page.html

+<html>
+    <head>
+        <title>WebWork - 
+         do I use variables exposed by Display Tag with WebWork Tags in a Freemarker page
+        </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">
+				    <p>Freemarker allows JSP Taglibs to be used, by using the following declaration</p>
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;#assign display=JspTaglibs[<span class="code-quote">"/WEB-INF/display.tld"</span>]/&gt;</span></pre>
+</div></div>
+
+<p>An example of rendering a table using display tag in Freemarker would be :-</p>
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;@display.table uid=<span class="code-quote">"user"</span> name=<span class="code-quote">"allUsers"</span> pagesize=500&gt;</span>
+  <span class="code-tag">&lt;@display.column title=<span class="code-quote">"#"</span>&gt;</span>
+     <span class="code-tag">&lt;#-- the row number variable exposed by display tag --&gt;</span>
+     ${user_rowNum}
+  <span class="code-tag">&lt;/@display.column&gt;</span>
+  <span class="code-tag">&lt;@display.column title=<span class="code-quote">"Name"</span>&gt;</span>
+     <span class="code-tag">&lt;#-- assuming there's a getName() method in User object taht returns back java.lang.String --&gt;</span>
+     ${user.name}
+  <span class="code-tag">&lt;/@display.column&gt;</span>
+  <span class="code-tag">&lt;@display.column title=<span class="code-quote">"Last Login Time"</span>&gt;</span>
+     <span class="code-tag">&lt;#-- assuming there's a getlastLoginTime in User object that returns back java.util.Date --&gt;</span>
+     <span class="code-tag">&lt;@contextSetter contextKey=<span class="code-quote">"lastLoginTime"</span> contextValue=user.lastLoginTime /&gt;</span>
+     <span class="code-tag">&lt;@ww.date name=r<span class="code-quote">"%{#lastLoginTime}"</span> nice=<span class="code-quote">"true"</span> /&gt;</span>
+  <span class="code-tag">&lt;/@display.column&gt;</span>
+<span class="code-tag">&lt;/@display.table&gt;</span></pre>
+</div></div>
+
+<p>A custom <em>contextSetter</em> Freemarker transform is being used to set the last login time from <em>User</em> object into WebWork's value stack's context, such that it could be latter retrieve from WebWork's tag.</p>
+
+<p>The code for <em>contextSetter</em> Freemarker transform could be :-</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> class ContextSetterTransform <span class="code-keyword">extends</span> TagModel {
+
+	<span class="code-keyword">private</span> HttpServletRequest request; 
+	<span class="code-keyword">private</span> HttpServletResponse response;
+	
+	<span class="code-keyword">public</span> ContextSetterTransform(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) {
+		<span class="code-keyword">super</span>(stack, request, response);
+		<span class="code-keyword">this</span>.request = request;
+		<span class="code-keyword">this</span>.response = response;
+	}
+	
+	@Override
+	<span class="code-keyword">protected</span> Component getBean() {
+		<span class="code-keyword">return</span> <span class="code-keyword">new</span> ContextSetterBean(stack, request, response);
+	}
+}</pre>
+</div></div>
+
+<p>Its WebWork backing component could be :-</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> class ContextSetterBean <span class="code-keyword">extends</span> Component {
+
+	<span class="code-keyword">private</span> <span class="code-object">String</span> key; 
+	<span class="code-keyword">private</span> <span class="code-object">Object</span> value;
+	
+	<span class="code-keyword">public</span> ContextSetterBean(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) {
+		<span class="code-keyword">super</span>(stack);
+	}
+	
+	<span class="code-keyword">public</span> <span class="code-object">String</span> getContextKey() { <span class="code-keyword">return</span> key; }
+	<span class="code-keyword">public</span> void setContextKey(<span class="code-object">String</span> key) { <span class="code-keyword">this</span>.key = key; }
+	
+	<span class="code-keyword">public</span> <span class="code-object">Object</span> getContextValue() { <span class="code-keyword">return</span> value; }
+	<span class="code-keyword">public</span> void setContextValue(<span class="code-object">Object</span> value) { <span class="code-keyword">this</span>.value = value; }
+
+	@SuppressWarnings(<span class="code-quote">"unchecked"</span>)
+	@Override
+	<span class="code-keyword">public</span> <span class="code-object">boolean</span> end(Writer writer, <span class="code-object">String</span> body) {
+		getStack().getContext().put(key, value);
+		<span class="code-keyword">return</span> <span class="code-keyword">false</span>; <span class="code-comment">// body <span class="code-keyword">do</span> not need to be re-evaluated again.
+</span>	}
+}</pre>
+</div></div>
+
+<p>To be able to use this transform, we need to extends WebWork's <em>FreemarkerManager</em> as follows :-</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> class CustomFreemarkerManager <span class="code-keyword">extends</span> FreemarkerManager {
+  ...
+  @Override
+  <span class="code-keyword">public</span> SimpleHash buildTemplateModel(OgnlValueStack stack, <span class="code-object">Object</span> action, ServletContext servletContext,   
+                                       HttpServletRequest request, HttpServletResponse response, 
+                                       ObjectWrapper objectWrapper) {
+       SimpleHash hash = <span class="code-keyword">super</span>.buildTemplateModel(stack, action, servletContext, 
+                                                  request, response, objectWrapper);
+       hash.put(<span class="code-quote">"contextSetter"</span>, <span class="code-keyword">new</span> ContextSetterTransform(stack, request, response));
+       <span class="code-keyword">return</span> has;
+  }
+  ...
+}</pre>
+</div></div>
+
+<p>and registered the customized <em>FreemarkerManager</em> in <em>webwork.properties</em></p>
+<div class="code"><div class="codeContent">
+<pre class="code-xml">webwork.freemarker.manager.classname=foo.bar.CustomFreemarkerManager</pre>
+</div></div>
+
+<h4><a name="HowdoIusevariablesexposedbyDisplayTagwithWebWorkTagsinaFreemarkerpage-References"></a>References</h4>
+<p>[1] - Information about WebWork and Freemarker integration <a href="Freemarker.html" title="FreeMarker">here</a><br/>
+[2] - Information about various configurables in webwork.properties <a href="webwork.properties.html" title="webwork.properties">here</a> </p>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/Initalization and Shutdown.html

+<html>
+    <head>
+        <title>WebWork - 
+        Initalization and Shutdown
+         </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">
+				    <table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="./icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">WebWork 2.2.6 and above</b><br />
+<p>This feature is only available for WebWork 2.2.6 and above</p></td></tr></table>
+
+<p>A <em>StartUpListener</em> and <em>ShutDownListener</em> could defined such that WebWork will called them when its starting up and shutting down respectively. The <em>StartUpListener</em> and ShutDownListener_ are being defined in <em>webwork.properties</em></p>
+
+<p>They are basically hooked up through <em>FilterDispatcher</em>'s <em>init()</em> and <em>cleanup()</em> method which in turns is invoked by <em>FilterDispatcher</em>'s <em>init()</em> and <em>destroy()</em> methods respectively.</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-none">### A start up listener class name (must implements com.opensymphony.webwork.dispatcher.StartUpListener
+### interface) that will get invoked only once when WebWork started up. The class names could be
+### comma separated and will be executed in order.
+#
+#webwork.dispatcher.startUpListener=foo.bar.StartUpListener1, foo.bar.StartUpListener2
+
+### A shut down listener class name (must implements com.opensymphony.webwork.dispatcher.ShutDownListener
+### interface) that will get invoked only once when WebWork shuts down.  The class names could be
+### comma separated and will be executed in order.
+#
+#webwork.dispatcher.shutDownListener=foo.bar.ShutDownListener1, foo.bar.ShutDownListener2</pre>
+</div></div>
+
+<h3><a name="InitalizationandShutdown-StartUpListener"></a>StartUpListener</h3>
+
+<p>An interface to be implemented if require to get informed when WebWork
+starts up, It's being hooked up through FilterDispatcher#init(javax.servlet.FilterConfig) 
+-> DispatcherUtils#init(javax.servlet.ServletContext) methods calls.
+<p/>
+It can be configured through <code>webwork.properties</code> that 
+resides in the classpath, typically in <code>/WEB-INF/classes</code> directory
+through the following entry
+<p/></p>
+
+<p><pre>
+webwork.dispatcher.startUpListener=foo.bar.StartupListener1, foo.bar.StartupListener2
+</pre></p>
+
+<p>The value of the properties is the FQN (Fully Quantified class name of the start up listeners)
+ It must implements this interface, else a ClassCastException will be registered in the log.
+ Multiple class names could be specified, but they must be comma separated.</p>
+
+
+<p><em>StartUpListener</em> looks as follows :-</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> StartUpListener {
+	void startup();
+}</pre>
+</div></div>
+
+
+<h3><a name="InitalizationandShutdown-ShutDownListener"></a>ShutDownListener</h3>
+
+<p>An interface to be implemented if require to get informed when WebWork
+shuts down, It's being hooked up through FilterDispatcher#destroy() 
+-> DispatcherUtils#cleanup() methods calls.
+<p/>
+It can be configured through <code>webwork.properties</code> that 
+resides in the classpath, typically in <code>/WEB-INF/classes</code> directory
+through the following entry
+<p/></p>
+
+<p><pre>
+webwork.dispatcher.shutDownListener=foo.bar.ShutdownListener1, foo.bar.ShutdownListener2
+</pre></p>
+
+<p>The value of the properties is the FQN (Fully Quantified class name of the shut down listeners)
+ It must implements this interface, else a ClassCastException will be registered in the log.
+ Multiple class names could be specified, but they must be comma separated.</p>
+
+
+<p><em>ShutDownListener</em> looks as follows :-</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> ShutDownListener {
+	void shutdown();
+}</pre>
+</div></div>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/Interceptors.html

 <td class='confluenceTd'> cookie </td>
 <td class='confluenceTd'> Inject cookie with a certain configurable name / value into action </td>
 </tr>
+<tr>
+<td class='confluenceTd'> <a href="Message Store Interceptor.html" title="Message Store Interceptor">Message Store Interceptor</a> </td>
+<td class='confluenceTd'> store </td>
+<td class='confluenceTd'>Store field errors / action errors / action messages into HttpSession and also retrive them from HttpSession depending on the <em>operationMode</em> the interceptor is in to allow field errors / action errors / action messages to be available throughout different Http requests.</td>
+</tr>
 </tbody></table>
 
 <h4><a name="Interceptors-MethodFiltering"></a>Method Filtering</h4>
 to the interceptor itself it would be just using Method 1 describe above.</p>
 
 
+
+<h4><a name="Interceptors-NestedParameterOverriding"></a>Nested Parameter Overriding</h4>
+<table cellpadding='5' width='85%' cellspacing='8px' class='warningMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="./icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">WebWork 2.2.5 and earlier</b><br />
+<p>There's a bug (XW-516) that prevents this from working for version earlier thatn WebWork-2.2.6.</p></td></tr></table>
+
+<p> Interceptor stack parameter overriding could be nested into as many level as possible, though it would
+ be advisable not to nest it too deep as to avoid confusion, For example, 
+<pre>
+&lt;interceptor name="interceptor1" class="foo.bar.Interceptor1" /&gt;
+&lt;interceptor name="interceptor2" class="foo.bar.Interceptor2" /&gt;
+&lt;interceptor name="interceptor3" class="foo.bar.Interceptor3" /&gt;
+&lt;interceptor name="interceptor4" class="foo.bar.Interceptor4" /&gt;
+&lt;interceptor-stack name="stack1"&gt;
+    &lt;interceptor-ref name="interceptor1" /&gt;
+&lt;/interceptor-stack&gt;
+&lt;interceptor-stack name="stack2"&gt;
+    &lt;interceptor-ref name="intercetor2" /&gt;
+    &lt;interceptor-ref name="stack1" /&gt;
+&lt;/interceptor-stack&gt;
+&lt;interceptor-stack name="stack3"&gt;
+    &lt;interceptor-ref name="interceptor3" /&gt;
+    &lt;interceptor-ref name="stack2" /&gt;
+&lt;/interceptor-stack&gt;
+&lt;interceptor-stack name="stack4"&gt;
+    &lt;interceptor-ref name="interceptor4" /&gt;
+    &lt;interceptor-ref name="stack3" /&gt;
+ &lt;/interceptor-stack&gt;
+</pre>
+ Assuming the interceptor has the following properties
+ <table border="1" width="100%">
+   <tr>
+      <td>Interceptor</td>
+      <td>property</td>
+   </tr>
+   <tr>	
+   	   <td>Interceptor1</td>
+       <td>param1</td>
+   </tr>
+   <tr>	
+   	   <td>Interceptor2</td>
+       <td>param2</td>
+   </tr>
+   <tr>	
+   	   <td>Interceptor3</td>
+       <td>param3</td>
+   </tr>
+   <tr>	
+   	   <td>Interceptor4</td>
+       <td>param4</td>
+   </tr>
+ </table>
+ We could override them as follows :-
+ <pre>
+   &lt;action ... &gt;
+       &lt;!-- to override parameters of interceptor located directly in the stack  --&gt;
+       &lt;interceptor-ref name="stack4"&gt;
+          &lt;param name="interceptor4.param4"&gt; ... &lt;/param&gt;
+       &lt;/interceptor-ref&gt;
+   &lt;/action&gt;
+   &lt;action ... &gt;
+       &lt;!-- to override parameters of interceptor located under nested stack --&gt;
+       &lt;interceptor-ref name="stack4"&gt;
+           &lt;param name="stack3.interceptor3.param3"&gt; ... &lt;/param&gt;
+           &lt;param name="stack3.stack2.interceptor2.param2"&gt; ... &lt;/param&gt;
+           &lt;param name="stack3.stack2.stack1.interceptor1.param1"&gt; ... &lt;/param&gt;
+       &lt;/interceptor-ref&gt;
+   &lt;/action&gt;
+ </pre></p>
+
+
+
 <h4><a name="Interceptors-OrderofInterceptorExecution"></a>Order of Interceptor Execution</h4>
 
 <p>Interceptors provide an excellent means to wrap before/after processing.  The concept reduces code duplication (think AOP).</p>

docs/wikidocs/JUnit.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <p>There's a number of approaches you can take to unit-test your WebWork actions.</p>
-
-<h2><a name="JUnit-Thesimplestistoinstantiateyouractions%2Ccallsettersthenexecute%28%29.Thisallowsyoutobypassallthecomplicatedcontainersetup."></a>The simplest is to instantiate your actions, call setters then execute().  This allows you to bypass all the complicated container setup.</h2>
-
-<p>Taken from Petsoar:</p>
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> org.petsoar.actions.inventory;
-
-<span class="code-keyword">import</span> com.mockobjects.constraint.IsEqual;
-<span class="code-keyword">import</span> com.mockobjects.dynamic.C;
-<span class="code-keyword">import</span> com.mockobjects.dynamic.Mock;
-<span class="code-keyword">import</span> com.opensymphony.xwork.Action;
-<span class="code-keyword">import</span> junit.framework.TestCase;
-<span class="code-keyword">import</span> org.petsoar.pets.Pet;
-<span class="code-keyword">import</span> org.petsoar.pets.PetStore;
-
-<span class="code-keyword">public</span> class TestViewPet <span class="code-keyword">extends</span> TestCase {
-    <span class="code-keyword">private</span> Mock mockPetStore;
-    <span class="code-keyword">private</span> ViewPet action;
-
-    <span class="code-keyword">protected</span> void setUp() <span class="code-keyword">throws</span> Exception {
-        mockPetStore = <span class="code-keyword">new</span> Mock(PetStore.class);
-        PetStore petStore = (PetStore) mockPetStore.proxy();
-
-        action = <span class="code-keyword">new</span> ViewPet();
-        action.setPetStore(petStore);
-    }
-
-    <span class="code-keyword">public</span> void testViewPet() <span class="code-keyword">throws</span> Exception {
-        Pet existingPet = <span class="code-keyword">new</span> Pet();
-        existingPet.setName(<span class="code-quote">"harry"</span>);
-        existingPet.setId(1);
-
-        Pet expectedPet = <span class="code-keyword">new</span> Pet();
-        expectedPet.setName(<span class="code-quote">"harry"</span>);
-        expectedPet.setId(1);
-
-        mockPetStore.expectAndReturn(<span class="code-quote">"getPet"</span>, C.args(<span class="code-keyword">new</span> IsEqual(<span class="code-keyword">new</span> <span class="code-object">Long</span>(1))), existingPet);
-        action.setId(1);
-
-        <span class="code-object">String</span> result = action.execute();
-
-        assertEquals(Action.SUCCESS, result);
-        assertEquals(expectedPet, existingPet);
-        mockPetStore.verify();
-    }
-
-    <span class="code-keyword">public</span> void testViewPetNoId() <span class="code-keyword">throws</span> Exception {
-        mockPetStore.expectAndReturn(<span class="code-quote">"getPet"</span>, C.ANY_ARGS, <span class="code-keyword">null</span>);
-
-        <span class="code-object">String</span> result = action.execute();
-
-        assertEquals(Action.ERROR, result);
-        assertEquals(1, action.getActionErrors().size());
-        assertEquals(<span class="code-quote">"Invalid pet selected."</span>, action.getActionErrors().iterator().next());
-        assertNull(action.getPet());
-        mockPetStore.verify();
-    }
-
-    <span class="code-keyword">public</span> void testViewPetInvalidId() <span class="code-keyword">throws</span> Exception {
-        action.setId(-1);
-        testViewPetNoId();
-    }
-}</pre>
-</div></div>
-
-<h2><a name="JUnit-Testinterceptorsand%2Forresulttypes"></a>Test interceptors and/or result types</h2>
-
-<p>Check out the test suites in XWork/WebWork.  These are pretty comprehensive and provide a good starting point.  For example,  this is how the <b>ParametersInterceptor</b> is tested:</p>
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> void testDoesNotAllowMethodInvocations() {
-    Map params = <span class="code-keyword">new</span> HashMap();
-    params.put(<span class="code-quote">"@java.lang.<span class="code-object">System</span>@exit(1).dummy"</span>, <span class="code-quote">"dumb value"</span>);
-
-    HashMap extraContext = <span class="code-keyword">new</span> HashMap();
-    extraContext.put(ActionContext.PARAMETERS, params);
-
-    <span class="code-keyword">try</span> {
-        ActionProxy proxy = ActionProxyFactory.getFactory().
-               createActionProxy("", MockConfigurationProvider.MODEL_DRIVEN_PARAM_TEST, extraContext);
-        assertEquals(Action.SUCCESS, proxy.execute());
-
-        ModelDrivenAction action = (ModelDrivenAction) proxy.getAction();
-        TestBean model = (TestBean) action.getModel();
-
-        <span class="code-object">String</span> property = <span class="code-object">System</span>.getProperty(<span class="code-quote">"webwork.security.test"</span>);
-        assertNull(property);
-    } <span class="code-keyword">catch</span> (Exception e) {
-        e.printStackTrace();
-        fail();
-    }
-}</pre>
-</div></div>
-
-<h2><a name="JUnit-Testvalidationforanaction"></a>Test validation for an action</h2>
-
-<p>This is an example of how to simply test validation when using xml validation files.  The following code would test the contents of the xml file "ValidateableAction-contextName-validation.xml".</p>
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> void testActionValidation() <span class="code-keyword">throws</span> ValidationException {
-   DefaultActionValidatorManager validator = <span class="code-keyword">new</span> DefaultActionValidatorManager();
-   ValidateableAction action = <span class="code-keyword">new</span> ValidateableAction();
-   action.setParam(<span class="code-keyword">new</span> Param());
-   ... <span class="code-comment">// setup the parameters you want to test
-</span>
-   validator.validate(action, <span class="code-quote">"contextName"</span>);
-   assertTrue(action.hasErrors()); <span class="code-comment">// If the validation should fail
-</span>   assertFalse(action.hasErrors()); <span class="code-comment">// If the validation should pass
-</span>   <span class="code-comment">// action.getActionErrors() will give you the errors that occurred
-</span>}</pre>
-</div></div>
-<p>Note: these are not the ONLY ways so make your own judgement.</p>
+				    <p>Moved to <a href="Testing.html" title="Testing">Testing</a></p>
 
                     			    </td>
 		    </tr>

docs/wikidocs/Message Store Interceptor.html

+<html>
+    <head>
+        <title>WebWork - 
+        Message Store Interceptor
+         </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">
+				    
+<p>An interceptor to store ValidationAware action's messages / errors and field errors into 
+Http Session, such that it will be retrieveable at a later stage. This allows the action's message /
+errors and field errors to be available longer that just the particular http request.</p>
+
+<p><p/></p>
+
+<p>In the 'STORE' mode, the interceptor will store the ValidationAware action's message / errors 
+and field errors into Http session.</p>
+
+<p><p/></p>
+
+<p>In the 'RETRIEVE' mode, the interceptor will retrieve the stored action's message / errors  and field
+errors and put them back into the ValidationAware action.</p>
+
+<p><p/></p>
+
+<p>The interceptor does nothing in the 'NONE' mode, which is the default.</p>
+
+<p><p/></p>
+
+<p>The operation mode could be switched using :- <p/>
+1] Setting the iterceptor parameter eg.
+<pre>
+  &lt;action name="submitApplication" ...&gt;
+     &lt;interceptor-ref name="store"&gt;
+        &lt;param name="operationMode"&gtl;STORE&lt;/param&gt;
+     &lt;/interceptor-ref&gt;
+     &lt;interceptor-ref name="defaultStack" /&gt;
+     ....
+  &lt;/action&gt;
+</pre></p>
+
+<p>2] Through request parameter (allowRequestParameterSwitch must be 'true' which is the default)
+<pre>
+  // the request will have the operation mode in 'STORE'
+  http://localhost:8080/context/submitApplication.action?operationMode=STORE
+</pre></p>
+
+
+<h1><a name="MessageStoreInterceptor-Parameters"></a>Parameters</h1>
+
+
+<p><ul>
+		<li>allowRequestParameterSwitch - To enable request parameter that could switch the operation mode 
+										  of this interceptor. </li>
+		<li>requestParameterSwitch - The request parameter that will indicate what mode this 
+									 interceptor is in. </li>
+		<li>operationMode - The operation mode this interceptor should be in 
+							(either 'STORE', 'RETRIEVE' or 'NONE'). 'NONE' being the default.</li>
+</ul></p>
+
+
+<h1><a name="MessageStoreInterceptor-ExtendingtheInterceptor"></a>Extending the Interceptor</h1>
+
+
+<p>The following method could be overriden :-
+<ul>
+	<li>getRequestOperationMode - get the operation mode of this interceptor based on the request parameters</li>
+ <li>mergeCollection - merge two collections</li>
+ <li>mergeMap - merge two map</li>
+</ul></p>
+
+
+<h1><a name="MessageStoreInterceptor-Examples"></a>Examples</h1>
+
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;action name=<span class="code-quote">"submitApplication"</span> ....&gt;</span>
+   <span class="code-tag">&lt;interceptor-ref name=<span class="code-quote">"store"</span>&gt;</span>
+   	<span class="code-tag">&lt;param name=<span class="code-quote">"operationMode"</span>&gt;</span>STORE<span class="code-tag">&lt;/param&gt;</span>
+   <span class="code-tag">&lt;/interceptor-ref&gt;</span>
+   <span class="code-tag">&lt;interceptor-ref name=<span class="code-quote">"defaultStack"</span> /&gt;</span>
+   <span class="code-tag">&lt;result name=<span class="code-quote">"input"</span> type=<span class="code-quote">"redirect"</span>&gt;</span>applicationFailed.action<span class="code-tag">&lt;/result&gt;</span>
+   <span class="code-tag">&lt;result type=<span class="code-quote">"dispatcher"</span>&gt;</span>applicationSuccess.jsp<span class="code-tag">&lt;/result&gt;</span>
+<span class="code-tag">&lt;/action&gt;</span>
+
+<span class="code-tag">&lt;action name=<span class="code-quote">"applicationFailed"</span> ....&gt;</span>
+   <span class="code-tag">&lt;interceptor-ref name=<span class="code-quote">"store"</span>&gt;</span>
+      <span class="code-tag">&lt;param name=<span class="code-quote">"operationMode"</span>&gt;</span>RETRIEVE<span class="code-tag">&lt;/param&gt;</span>
+   <span class="code-tag">&lt;/interceptor-ref&gt;</span>
+   <span class="code-tag">&lt;result&gt;</span>applicationFailed.jsp<span class="code-tag">&lt;/result&gt;</span>
+<span class="code-tag">&lt;/action&gt;</span></pre>
+</div></div>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/OGNL.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="OGNL-Overview"></a>Overview</h1>
+				    <table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="./icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Improvement in Ognl 2.7 and above</b><br />
+<p>Jesse has made changes in Ognl available in 2.7 and above that improves performance. Some modifications on the how Ognl is used is required to benifits from the improvements, more information could be found <a href="http://cwiki.apache.org/confluence/display/WW/OGNL+Expression+Compilation" title="Visit page outside Confluence">here</a>.</p>
+
+<p>WebWork 2.2.7 and above will take advantages of this improvement done in Ognl.</p></td></tr></table>
+
+<h1><a name="OGNL-Overview"></a>Overview</h1>
 
 <p>OGNL is the Object Graph Navigation Language - see <a href="http://www.ognl.org" title="Visit page outside Confluence">http://www.ognl.org</a> for the full documentation of OGNL. In this document we will only show a few examples of OGNL features that co-exist with Webwork. To review basic concepts, refer to <a href="OGNL Basics.html" title="OGNL Basics">OGNL Basics</a>.</p>
 

docs/wikidocs/Package Configuration.html

     
     <span class="code-tag">&lt;include file=<span class="code-quote">"config-browser.xml"</span>/&gt;</span>
 
+	<span class="code-tag">&lt;include file=<span class="code-quote">"xwork-messageStore.xml"</span> /&gt;</span>
+
     <span class="code-tag">&lt;include file=<span class="code-quote">"xwork-continuations.xml"</span>/&gt;</span>
 
     <span class="code-tag">&lt;include file=<span class="code-quote">"xwork-tags.xml"</span>/&gt;</span>

docs/wikidocs/Presentations and slide shows.html

+<html>
+    <head>
+        <title>WebWork - 
+        Presentations and slide shows
+         </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">
+				    <ul>
+	<li><a href="http://www.infoq.com/presentations/struts-2-webwork-pat-lightbody" title="Visit page outside Confluence">WebWork (Struts2) In Action by Patrick Lightbody</a></li>
+</ul>
+
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/Previous releases.html

 				    <ul>
 	<li>Release Notes
 	<ul>
+		<li><a href="WebWork 2.2.6.html" title="WebWork 2.2.6">WebWork 2.2.6</a></li>
 		<li><a href="WebWork 2.2.5.html" title="WebWork 2.2.5">WebWork 2.2.5</a></li>
 		<li><a href="WebWork 2.2.4.html" title="WebWork 2.2.4">WebWork 2.2.4</a></li>
 		<li><a href="WebWork 2.2.3.html" title="WebWork 2.2.3">WebWork 2.2.3</a></li>

docs/wikidocs/Reference.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <ul><li><a href="Action Chaining.html" title="Action Chaining">Action Chaining</a></li><li><a href="ActionMapper.html" title="ActionMapper">ActionMapper</a></li><li><a href="Architecture.html" title="Architecture">Architecture</a></li><li><a href="Configuration Files.html" title="Configuration Files">Configuration Files</a><ul><li><a href="Reloading configuration.html" title="Reloading configuration">Reloading configuration</a></li><li><a href="web.xml.html" title="web.xml">web.xml</a><ul><li><a href="web.xml 2.1.x compatibility.html" title="web.xml 2.1.x compatibility">web.xml 2.1.x compatibility</a></li></ul></li><li><a href="webwork-default.xml.html" title="webwork-default.xml">webwork-default.xml</a></li><li><a href="webwork.properties.html" title="webwork.properties">webwork.properties</a></li><li><a href="xwork.xml.html" title="xwork.xml">xwork.xml</a></li></ul></li><li><a href="Continuations.html" title="Continuations">Continuations</a></li><li><a href="Dependencies.html" title="Dependencies">Dependencies</a></li><li><a href="Exception Handling.html" title="Exception Handling">Exception Handling</a></li><li><a href="FreeMarker.html" title="FreeMarker">FreeMarker</a></li><li><a href="Interceptors.html" title="Interceptors">Interceptors</a><ul><li><a href="Alias Interceptor.html" title="Alias Interceptor">Alias Interceptor</a></li><li><a href="Chaining Interceptor.html" title="Chaining Interceptor">Chaining Interceptor</a></li><li><a href="Component Interceptor.html" title="Component Interceptor">Component Interceptor</a></li><li><a href="Conversion Error Interceptor.html" title="Conversion Error Interceptor">Conversion Error Interceptor</a></li><li><a href="Cookie Interceptor.html" title="Cookie Interceptor">Cookie Interceptor</a></li><li><a href="Create Session Interceptor.html" title="Create Session Interceptor">Create Session Interceptor</a></li><li><a href="Debugging Interceptor.html" title="Debugging Interceptor">Debugging Interceptor</a></li><li><a href="Exception Interceptor.html" title="Exception Interceptor">Exception Interceptor</a></li><li><a href="Execute and Wait Interceptor.html" title="Execute and Wait Interceptor">Execute and Wait Interceptor</a><ul><li><a href="HibernateAndSpringEnabledExecuteAndWaitInterceptor.html" title="HibernateAndSpringEnabledExecuteAndWaitInterceptor">HibernateAndSpringEnabledExecuteAndWaitInterceptor</a></li></ul></li><li><a href="Flash Interceptor.html" title="Flash Interceptor">Flash Interceptor</a></li><li><a href="I18n Interceptor.html" title="I18n Interceptor">I18n Interceptor</a></li><li><a href="Logger Interceptor.html" title="Logger Interceptor">Logger Interceptor</a></li><li><a href="Model Driven Interceptor.html" title="Model Driven Interceptor">Model Driven Interceptor</a></li><li><a href="Parameter Filter Interceptor.html" title="Parameter Filter Interceptor">Parameter Filter Interceptor</a></li><li><a href="Parameter Remover Interceptor.html" title="Parameter Remover Interceptor">Parameter Remover Interceptor</a></li><li><a href="Parameters Interceptor.html" title="Parameters Interceptor">Parameters Interceptor</a></li><li><a href="Prepare Interceptor.html" title="Prepare Interceptor">Prepare Interceptor</a></li><li><a href="Scope Interceptor.html" title="Scope Interceptor">Scope Interceptor</a></li><li><a href="Servlet Config Interceptor.html" title="Servlet Config Interceptor">Servlet Config Interceptor</a></li><li><a href="Session Invalidation Interceptor.html" title="Session Invalidation Interceptor">Session Invalidation Interceptor</a></li><li><a href="Static Parameters Interceptor.html" title="Static Parameters Interceptor">Static Parameters Interceptor</a></li><li><a href="Timer Interceptor.html" title="Timer Interceptor">Timer Interceptor</a></li><li><a href="Token Interceptor.html" title="Token Interceptor">Token Interceptor</a></li><li><a href="Token Session Interceptor.html" title="Token Session Interceptor">Token Session Interceptor</a></li><li><a href="Validation Interceptor.html" title="Validation Interceptor">Validation Interceptor</a></li><li><a href="Workflow Interceptor.html" title="Workflow Interceptor">Workflow Interceptor</a></li></ul></li><li><a href="Internationalization.html" title="Internationalization">Internationalization</a></li><li><a href="Inversion of Control.html" title="Inversion of Control">Inversion of Control</a><ul><li><a href="Components.html" title="Components">Components</a></li><li><a href="IoC Configuration.html" title="IoC Configuration">IoC Configuration</a></li><li><a href="IoC Overview.html" title="IoC Overview">IoC Overview</a></li><li><a href="Xwork's Component Architecture.html" title="Xwork's Component Architecture">Xwork's Component Architecture</a></li></ul></li><li><a href="J2SE 5 Support.html" title="J2SE 5 Support">J2SE 5 Support</a><ul><li><a href="After Annotation.html" title="After Annotation">After Annotation</a></li><li><a href="AnnotationWorkflowInterceptor.html" title="AnnotationWorkflowInterceptor">AnnotationWorkflowInterceptor</a></li><li><a href="Before Annotation.html" title="Before Annotation">Before Annotation</a></li><li><a href="BeforeResult Annotation.html" title="BeforeResult Annotation">BeforeResult Annotation</a></li><li><a href="Conversion Annotation.html" title="Conversion Annotation">Conversion Annotation</a></li><li><a href="ConversionErrorFieldValidator Annotation.html" title="ConversionErrorFieldValidator Annotation">ConversionErrorFieldValidator Annotation</a></li><li><a href="CreateIfNull Annotation.html" title="CreateIfNull Annotation">CreateIfNull Annotation</a></li><li><a href="CustomValidator Annotation.html" title="CustomValidator Annotation">CustomValidator Annotation</a><ul><li><a href="ValidationParameter annotation.html" title="ValidationParameter annotation">ValidationParameter annotation</a></li></ul></li><li><a href="DateRangeFieldValidator Annotation.html" title="DateRangeFieldValidator Annotation">DateRangeFieldValidator Annotation</a></li><li><a href="DoubleRangeFieldValidator Annotation.html" title="DoubleRangeFieldValidator Annotation">DoubleRangeFieldValidator Annotation</a></li><li><a href="Element Annotation.html" title="Element Annotation">Element Annotation</a></li><li><a href="EmailValidator Annotation.html" title="EmailValidator Annotation">EmailValidator Annotation</a></li><li><a href="ExpressionValidator Annotation.html" title="ExpressionValidator Annotation">ExpressionValidator Annotation</a></li><li><a href="FieldExpressionValidator Annotation.html" title="FieldExpressionValidator Annotation">FieldExpressionValidator Annotation</a></li><li><a href="IntRangeFieldValidator Annotation.html" title="IntRangeFieldValidator Annotation">IntRangeFieldValidator Annotation</a></li><li><a href="Key Annotation.html" title="Key Annotation">Key Annotation</a></li><li><a href="KeyProperty Annotation.html" title="KeyProperty Annotation">KeyProperty Annotation</a></li><li><a href="RegexFieldValidator Annotation.html" title="RegexFieldValidator Annotation">RegexFieldValidator Annotation</a></li><li><a href="RequiredFieldValidator Annotation.html" title="RequiredFieldValidator Annotation">RequiredFieldValidator Annotation</a></li><li><a href="RequiredStringValidator Annotation.html" title="RequiredStringValidator Annotation">RequiredStringValidator Annotation</a></li><li><a href="StringLengthFieldValidator Annotation.html" title="StringLengthFieldValidator Annotation">StringLengthFieldValidator Annotation</a></li><li><a href="StringRegexValidator Annotation.html" title="StringRegexValidator Annotation">StringRegexValidator Annotation</a></li><li><a href="TypeConversion Annotation.html" title="TypeConversion Annotation">TypeConversion Annotation</a></li><li><a href="UrlValidator Annotation.html" title="UrlValidator Annotation">UrlValidator Annotation</a></li><li><a href="Validation Annotation.html" title="Validation Annotation">Validation Annotation</a></li><li><a href="Validations Annotation.html" title="Validations Annotation">Validations Annotation</a></li><li><a href="VisitorFieldValidator Annotation.html" title="VisitorFieldValidator Annotation">VisitorFieldValidator Annotation</a></li></ul></li><li><a href="JasperReports.html" title="JasperReports">JasperReports</a></li><li><a href="JSP.html" title="JSP">JSP</a></li><li><a href="JUnit.html" title="JUnit">JUnit</a></li><li><a href="OGNL.html" title="OGNL">OGNL</a><ul><li><a href="OGNL Basics.html" title="OGNL Basics">OGNL Basics</a></li></ul></li><li><a href="PreResultListener.html" title="PreResultListener">PreResultListener</a></li><li><a href="Result Types.html" title="Result Types">Result Types</a><ul><li><a href="Chain Result.html" title="Chain Result">Chain Result</a></li><li><a href="Dispatcher Result.html" title="Dispatcher Result">Dispatcher Result</a></li><li><a href="Flash Result.html" title="Flash Result">Flash Result</a></li><li><a href="FreeMarker Result.html" title="FreeMarker Result">FreeMarker Result</a><ul><li><a href="WebWork Freemarker Support.html" title="WebWork Freemarker Support">WebWork Freemarker Support</a></li></ul></li><li><a href="HttpHeader Result.html" title="HttpHeader Result">HttpHeader Result</a></li><li><a href="JasperReports Result.html" title="JasperReports Result">JasperReports Result</a></li><li><a href="PlainText Result.html" title="PlainText Result">PlainText Result</a></li><li><a href="Redirect Action Result.html" title="Redirect Action Result">Redirect Action Result</a></li><li><a href="Redirect Result.html" title="Redirect Result">Redirect Result</a></li><li><a href="Stream Result.html" title="Stream Result">Stream Result</a></li><li><a href="Velocity Result.html" title="Velocity Result">Velocity Result</a></li><li><a href="XSL Result.html" title="XSL Result">XSL Result</a></li></ul></li><li><a href="Tags.html" title="Tags">Tags</a><ul><li><a href="Control Tags.html" title="Control Tags">Control Tags</a><ul><li><a href="append.html" title="append">append</a></li><li><a href="else.html" title="else">else</a></li><li><a href="elseIf.html" title="elseIf">elseIf</a></li><li><a href="generator.html" title="generator">generator</a></li><li><a href="if.html" title="if">if</a></li><li><a href="iterator.html" title="iterator">iterator</a></li><li><a href="merge.html" title="merge">merge</a></li><li><a href="sort.html" title="sort">sort</a></li><li><a href="subset.html" title="subset">subset</a></li></ul></li><li><a href="Data Tags.html" title="Data Tags">Data Tags</a><ul><li><a href="action.html" title="action">action</a></li><li><a href="bean.html" title="bean">bean</a></li><li><a href="debug.html" title="debug">debug</a></li><li><a href="i18n.html" title="i18n">i18n</a></li><li><a href="include.html" title="include">include</a></li><li><a href="param.html" title="param">param</a></li><li><a href="property.html" title="property">property</a></li><li><a href="push.html" title="push">push</a></li><li><a href="set.html" title="set">set</a></li><li><a href="text.html" title="text">text</a></li><li><a href="url.html" title="url">url</a></li></ul></li><li><a href="Form Tags.html" title="Form Tags">Form Tags</a><ul><li><a href="checkbox.html" title="checkbox">checkbox</a></li><li><a href="checkboxlist.html" title="checkboxlist">checkboxlist</a></li><li><a href="combobox.html" title="combobox">combobox</a></li><li><a href="datepicker.html" title="datepicker">datepicker</a></li><li><a href="doubleselect.html" title="doubleselect">doubleselect</a></li><li><a href="fielderror.html" title="fielderror">fielderror</a></li><li><a href="file.html" title="file">file</a></li><li><a href="form.html" title="form">form</a></li><li><a href="head.html" title="head">head</a></li><li><a href="hidden.html" title="hidden">hidden</a></li><li><a href="label.html" title="label">label</a></li><li><a href="optgroup.html" title="optgroup">optgroup</a></li><li><a href="optiontransferselect.html" title="optiontransferselect">optiontransferselect</a></li><li><a href="password.html" title="password">password</a></li><li><a href="radio.html" title="radio">radio</a></li><li><a href="reset.html" title="reset">reset</a></li><li><a href="richtexteditor.html" title="richtexteditor">richtexteditor</a></li><li><a href="select.html" title="select">select</a></li><li><a href="submit.html" title="submit">submit</a></li><li><a href="textarea.html" title="textarea">textarea</a></li><li><a href="textfield.html" title="textfield">textfield</a></li><li><a href="token.html" title="token">token</a></li><li><a href="updownselect.html" title="updownselect">updownselect</a></li></ul></li><li><a href="FreeMarker Tags.html" title="FreeMarker Tags">FreeMarker Tags</a></li><li><a href="JSP Tags.html" title="JSP Tags">JSP Tags</a></li><li><a href="Non Form Tags.html" title="Non Form Tags">Non Form Tags</a><ul><li><a href="a.html" title="a">a</a></li><li><a href="actionerror.html" title="actionerror">actionerror</a></li><li><a href="actionmessage.html" title="actionmessage">actionmessage</a></li><li><a href="component.html" title="component">component</a></li><li><a href="date.html" title="date">date</a></li><li><a href="div.html" title="div">div</a></li><li><a href="panel.html" title="panel">panel</a></li><li><a href="tabbedpane.html" title="tabbedpane">tabbedpane</a></li><li><a href="tabbedPanel.html" title="tabbedPanel">tabbedPanel</a></li><li><a href="table.html" title="table">table</a></li><li><a href="tree.html" title="tree">tree</a></li><li><a href="treenode.html" title="treenode">treenode</a></li></ul></li><li><a href="Tag Syntax.html" title="Tag Syntax">Tag Syntax</a><ul><li><a href="Alt Syntax.html" title="Alt Syntax">Alt Syntax</a></li></ul></li><li><a href="Themes and Templates.html" title="Themes and Templates">Themes and Templates</a><ul><li><a href="ajax theme.html" title="ajax theme">ajax theme</a></li><li><a href="css_xhtml theme.html" title="css_xhtml theme">css_xhtml theme</a></li><li><a href="Extending Themes.html" title="Extending Themes">Extending Themes</a></li><li><a href="Selecting Themes.html" title="Selecting Themes">Selecting Themes</a></li><li><a href="simple theme.html" title="simple theme">simple theme</a></li><li><a href="Template Loading.html" title="Template Loading">Template Loading</a></li><li><a href="xhtml theme.html" title="xhtml theme">xhtml theme</a></li></ul></li><li><a href="Velocity Tags.html" title="Velocity Tags">Velocity Tags</a></li></ul></li><li><a href="Type Conversion.html" title="Type Conversion">Type Conversion</a></li><li><a href="Validation.html" title="Validation">Validation</a><ul><li><a href="AJAX Validation.html" title="AJAX Validation">AJAX Validation</a></li><li><a href="Basic Validation.html" title="Basic Validation">Basic Validation</a></li><li><a href="Client Side Validation.html" title="Client Side Validation">Client Side Validation</a><ul><li><a href="AJAX Client Side Validation.html" title="AJAX Client Side Validation">AJAX Client Side Validation</a></li><li><a href="Pure JavaScript Client Side Validation.html" title="Pure JavaScript Client Side Validation">Pure JavaScript Client Side Validation</a></li></ul></li><li><a href="Client Validation.html" title="Client Validation">Client Validation</a></li><li><a href="collection validator.html" title="collection validator">collection validator</a></li><li><a href="conversion validator.html" title="conversion validator">conversion validator</a></li><li><a href="date validator.html" title="date validator">date validator</a></li><li><a href="email validator.html" title="email validator">email validator</a></li><li><a href="expression validator.html" title="expression validator">expression validator</a></li><li><a href="fieldexpression validator.html" title="fieldexpression validator">fieldexpression validator</a></li><li><a href="int validator.html" title="int validator">int validator</a></li><li><a href="regex validator.html" title="regex validator">regex validator</a></li><li><a href="required validator.html" title="required validator">required validator</a></li><li><a href="requiredstring validator.html" title="requiredstring validator">requiredstring validator</a></li><li><a href="stringlength validator.html" title="stringlength validator">stringlength validator</a></li><li><a href="url validator.html" title="url validator">url validator</a></li><li><a href="Using Field Validators.html" title="Using Field Validators">Using Field Validators</a></li><li><a href="Using Non Field Validators.html" title="Using Non Field Validators">Using Non Field Validators</a></li><li><a href="Using Visitor Field Validator.html" title="Using Visitor Field Validator">Using Visitor Field Validator</a></li><li><a href="visitor validator.html" title="visitor validator">visitor validator</a></li></ul></li><li><a href="Velocity.html" title="Velocity">Velocity</a><ul><li><a href="velocity.properties.html" title="velocity.properties">velocity.properties</a></li></ul></li><li><a href="XWork Configuration.html" title="XWork Configuration">XWork Configuration</a><ul><li><a href="Action configuration.html" title="Action configuration">Action configuration</a></li><li><a href="Include configuration.html" title="Include configuration">Include configuration</a></li><li><a href="Interceptor Configuration.html" title="Interceptor Configuration">Interceptor Configuration</a></li><li><a href="Namespace Configuration.html" title="Namespace Configuration">Namespace Configuration</a></li><li><a href="Package Configuration.html" title="Package Configuration">Package Configuration</a></li><li><a href="Result Configuration.html" title="Result Configuration">Result Configuration</a><ul><li><a href="Default results.html" title="Default results">Default results</a></li><li><a href="Global results.html" title="Global results">Global results</a></li></ul></li><li><a href="Views.html" title="Views">Views</a></li></ul></li></ul>
+				    <ul><li><a href="Action Chaining.html" title="Action Chaining">Action Chaining</a></li><li><a href="ActionMapper.html" title="ActionMapper">ActionMapper</a></li><li><a href="Architecture.html" title="Architecture">Architecture</a></li><li><a href="Configuration Files.html" title="Configuration Files">Configuration Files</a><ul><li><a href="Reloading configuration.html" title="Reloading configuration">Reloading configuration</a></li><li><a href="web.xml.html" title="web.xml">web.xml</a><ul><li><a href="web.xml 2.1.x compatibility.html" title="web.xml 2.1.x compatibility">web.xml 2.1.x compatibility</a></li></ul></li><li><a href="webwork-default.xml.html" title="webwork-default.xml">webwork-default.xml</a></li><li><a href="webwork.properties.html" title="webwork.properties">webwork.properties</a></li><li><a href="xwork.xml.html" title="xwork.xml">xwork.xml</a></li></ul></li><li><a href="Continuations.html" title="Continuations">Continuations</a></li><li><a href="Dependencies.html" title="Dependencies">Dependencies</a></li><li><a href="Exception Handling.html" title="Exception Handling">Exception Handling</a></li><li><a href="FreeMarker.html" title="FreeMarker">FreeMarker</a><ul><li><a href="FreemarkerTemplateExceptionHandling.html" title="FreemarkerTemplateExceptionHandling">FreemarkerTemplateExceptionHandling</a></li></ul></li><li><a href="Interceptors.html" title="Interceptors">Interceptors</a><ul><li><a href="Alias Interceptor.html" title="Alias Interceptor">Alias Interceptor</a></li><li><a href="Chaining Interceptor.html" title="Chaining Interceptor">Chaining Interceptor</a></li><li><a href="Component Interceptor.html" title="Component Interceptor">Component Interceptor</a></li><li><a href="Conversion Error Interceptor.html" title="Conversion Error Interceptor">Conversion Error Interceptor</a></li><li><a href="Cookie Interceptor.html" title="Cookie Interceptor">Cookie Interceptor</a></li><li><a href="Create Session Interceptor.html" title="Create Session Interceptor">Create Session Interceptor</a></li><li><a href="Debugging Interceptor.html" title="Debugging Interceptor">Debugging Interceptor</a></li><li><a href="Exception Interceptor.html" title="Exception Interceptor">Exception Interceptor</a></li><li><a href="Execute and Wait Interceptor.html" title="Execute and Wait Interceptor">Execute and Wait Interceptor</a><ul><li><a href="HibernateAndSpringEnabledExecuteAndWaitInterceptor.html" title="HibernateAndSpringEnabledExecuteAndWaitInterceptor">HibernateAndSpringEnabledExecuteAndWaitInterceptor</a></li><li><a href="Terminating an ExecuteAndWait action.html" title="Terminating an ExecuteAndWait action">Terminating an ExecuteAndWait action</a></li></ul></li><li><a href="Flash Interceptor.html" title="Flash Interceptor">Flash Interceptor</a></li><li><a href="I18n Interceptor.html" title="I18n Interceptor">I18n Interceptor</a></li><li><a href="Logger Interceptor.html" title="Logger Interceptor">Logger Interceptor</a></li><li><a href="Message Store Interceptor.html" title="Message Store Interceptor">Message Store Interceptor</a></li><li><a href="Model Driven Interceptor.html" title="Model Driven Interceptor">Model Driven Interceptor</a></li><li><a href="Parameter Filter Interceptor.html" title="Parameter Filter Interceptor">Parameter Filter Interceptor</a></li><li><a href="Parameter Remover Interceptor.html" title="Parameter Remover Interceptor">Parameter Remover Interceptor</a></li><li><a href="Parameters Interceptor.html" title="Parameters Interceptor">Parameters Interceptor</a></li><li><a href="Prepare Interceptor.html" title="Prepare Interceptor">Prepare Interceptor</a></li><li><a href="Scope Interceptor.html" title="Scope Interceptor">Scope Interceptor</a></li><li><a href="Servlet Config Interceptor.html" title="Servlet Config Interceptor">Servlet Config Interceptor</a></li><li><a href="Session Invalidation Interceptor.html" title="Session Invalidation Interceptor">Session Invalidation Interceptor</a></li><li><a href="Static Parameters Interceptor.html" title="Static Parameters Interceptor">Static Parameters Interceptor</a></li><li><a href="Timer Interceptor.html" title="Timer Interceptor">Timer Interceptor</a></li><li><a href="Token Interceptor.html" title="Token Interceptor">Token Interceptor</a></li><li><a href="Token Session Interceptor.html" title="Token Session Interceptor">Token Session Interceptor</a></li><li><a href="Validation Interceptor.html" title="Validation Interceptor">Validation Interceptor</a></li><li><a href="Workflow Interceptor.html" title="Workflow Interceptor">Workflow Interceptor</a></li></ul></li><li><a href="Internationalization.html" title="Internationalization">Internationalization</a></li><li><a href="Inversion of Control.html" title="Inversion of Control">Inversion of Control</a><ul><li><a href="Components.html" title="Components">Components</a></li><li><a href="IoC Configuration.html" title="IoC Configuration">IoC Configuration</a></li><li><a href="IoC Overview.html" title="IoC Overview">IoC Overview</a></li><li><a href="Xwork's Component Architecture.html" title="Xwork's Component Architecture">Xwork's Component Architecture</a></li></ul></li><li><a href="J2SE 5 Support.html" title="J2SE 5 Support">J2SE 5 Support</a><ul><li><a href="After Annotation.html" title="After Annotation">After Annotation</a></li><li><a href="AnnotationWorkflowInterceptor.html" title="AnnotationWorkflowInterceptor">AnnotationWorkflowInterceptor</a></li><li><a href="Before Annotation.html" title="Before Annotation">Before Annotation</a></li><li><a href="BeforeResult Annotation.html" title="BeforeResult Annotation">BeforeResult Annotation</a></li><li><a href="Conversion Annotation.html" title="Conversion Annotation">Conversion Annotation</a></li><li><a href="ConversionErrorFieldValidator Annotation.html" title="ConversionErrorFieldValidator Annotation">ConversionErrorFieldValidator Annotation</a></li><li><a href="CreateIfNull Annotation.html" title="CreateIfNull Annotation">CreateIfNull Annotation</a></li><li><a href="CustomValidator Annotation.html" title="CustomValidator Annotation">CustomValidator Annotation</a><ul><li><a href="ValidationParameter annotation.html" title="ValidationParameter annotation">ValidationParameter annotation</a></li></ul></li><li><a href="DateRangeFieldValidator Annotation.html" title="DateRangeFieldValidator Annotation">DateRangeFieldValidator Annotation</a></li><li><a href="DoubleRangeFieldValidator Annotation.html" title="DoubleRangeFieldValidator Annotation">DoubleRangeFieldValidator Annotation</a></li><li><a href="Element Annotation.html" title="Element Annotation">Element Annotation</a></li><li><a href="EmailValidator Annotation.html" title="EmailValidator Annotation">EmailValidator Annotation</a></li><li><a href="ExpressionValidator Annotation.html" title="ExpressionValidator Annotation">ExpressionValidator Annotation</a></li><li><a href="FieldExpressionValidator Annotation.html" title="FieldExpressionValidator Annotation">FieldExpressionValidator Annotation</a></li><li><a href="IntRangeFieldValidator Annotation.html" title="IntRangeFieldValidator Annotation">IntRangeFieldValidator Annotation</a></li><li><a href="Key Annotation.html" title="Key Annotation">Key Annotation</a></li><li><a href="KeyProperty Annotation.html" title="KeyProperty Annotation">KeyProperty Annotation</a></li><li><a href="RegexFieldValidator Annotation.html" title="RegexFieldValidator Annotation">RegexFieldValidator Annotation</a></li><li><a href="RequiredFieldValidator Annotation.html" title="RequiredFieldValidator Annotation">RequiredFieldValidator Annotation</a></li><li><a href="RequiredStringValidator Annotation.html" title="RequiredStringValidator Annotation">RequiredStringValidator Annotation</a></li><li><a href="StringLengthFieldValidator Annotation.html" title="StringLengthFieldValidator Annotation">StringLengthFieldValidator Annotation</a></li><li><a href="StringRegexValidator Annotation.html" title="StringRegexValidator Annotation">StringRegexValidator Annotation</a></li><li><a href="TypeConversion Annotation.html" title="TypeConversion Annotation">TypeConversion Annotation</a></li><li><a href="UrlValidator Annotation.html" title="UrlValidator Annotation">UrlValidator Annotation</a></li><li><a href="Validation Annotation.html" title="Validation Annotation">Validation Annotation</a></li><li><a href="Validations Annotation.html" title="Validations Annotation">Validations Annotation</a></li><li><a href="VisitorFieldValidator Annotation.html" title="VisitorFieldValidator Annotation">VisitorFieldValidator Annotation</a></li></ul></li><li><a href="JasperReports.html" title="JasperReports">JasperReports</a></li><li><a href="JSP.html" title="JSP">JSP</a></li><li><a href="JUnit.html" title="JUnit">JUnit</a></li><li><a href="OGNL.html" title="OGNL">OGNL</a><ul><li><a href="OGNL Basics.html" title="OGNL Basics">OGNL Basics</a></li></ul></li><li><a href="PreResultListener.html" title="PreResultListener">PreResultListener</a></li><li><a href="Result Types.html" title="Result Types">Result Types</a><ul><li><a href="Chain Result.html" title="Chain Result">Chain Result</a></li><li><a href="Dispatcher Result.html" title="Dispatcher Result">Dispatcher Result</a></li><li><a href="Flash Result.html" title="Flash Result">Flash Result</a></li><li><a href="FreeMarker Result.html" title="FreeMarker Result">FreeMarker Result</a><ul><li><a href="WebWork Freemarker Support.html" title="WebWork Freemarker Support">WebWork Freemarker Support</a></li></ul></li><li><a href="HttpHeader Result.html" title="HttpHeader Result">HttpHeader Result</a></li><li><a href="JasperReports Result.html" title="JasperReports Result">JasperReports Result</a></li><li><a href="PlainText Result.html" title="PlainText Result">PlainText Result</a></li><li><a href="Redirect Action Result.html" title="Redirect Action Result">Redirect Action Result</a></li><li><a href="Redirect Result.html" title="Redirect Result">Redirect Result</a></li><li><a href="Stream Result.html" title="Stream Result">Stream Result</a></li><li><a href="Velocity Result.html" title="Velocity Result">Velocity Result</a></li><li><a href="XSL Result.html" title="XSL Result">XSL Result</a></li></ul></li><li><a href="Tags.html" title="Tags">Tags</a><ul><li><a href="Control Tags.html" title="Control Tags">Control Tags</a><ul><li><a href="append.html" title="append">append</a></li><li><a href="else.html" title="else">else</a></li><li><a href="elseIf.html" title="elseIf">elseIf</a></li><li><a href="generator.html" title="generator">generator</a></li><li><a href="if.html" title="if">if</a></li><li><a href="iterator.html" title="iterator">iterator</a></li><li><a href="merge.html" title="merge">merge</a></li><li><a href="sort.html" title="sort">sort</a></li><li><a href="subset.html" title="subset">subset</a></li></ul></li><li><a href="Data Tags.html" title="Data Tags">Data Tags</a><ul><li><a href="action.html" title="action">action</a></li><li><a href="bean.html" title="bean">bean</a></li><li><a href="debug.html" title="debug">debug</a></li><li><a href="i18n.html" title="i18n">i18n</a></li><li><a href="include.html" title="include">include</a></li><li><a href="param.html" title="param">param</a></li><li><a href="property.html" title="property">property</a></li><li><a href="push.html" title="push">push</a></li><li><a href="set.html" title="set">set</a></li><li><a href="text.html" title="text">text</a></li><li><a href="url.html" title="url">url</a></li></ul></li><li><a href="Form Tags.html" title="Form Tags">Form Tags</a><ul><li><a href="checkbox.html" title="checkbox">checkbox</a></li><li><a href="checkboxlist.html" title="checkboxlist">checkboxlist</a></li><li><a href="combobox.html" title="combobox">combobox</a></li><li><a href="datepicker.html" title="datepicker">datepicker</a></li><li><a href="doubleselect.html" title="doubleselect">doubleselect</a></li><li><a href="fielderror.html" title="fielderror">fielderror</a></li><li><a href="file.html" title="file">file</a></li><li><a href="form.html" title="form">form</a></li><li><a href="head.html" title="head">head</a></li><li><a href="hidden.html" title="hidden">hidden</a></li><li><a href="label.html" title="label">label</a></li><li><a href="optgroup.html" title="optgroup">optgroup</a></li><li><a href="optiontransferselect.html" title="optiontransferselect">optiontransferselect</a></li><li><a href="password.html" title="password">password</a></li><li><a href="radio.html" title="radio">radio</a></li><li><a href="reset.html" title="reset">reset</a></li><li><a href="richtexteditor.html" title="richtexteditor">richtexteditor</a></li><li><a href="select.html" title="select">select</a></li><li><a href="submit.html" title="submit">submit</a></li><li><a href="textarea.html" title="textarea">textarea</a></li><li><a href="textfield.html" title="textfield">textfield</a></li><li><a href="token.html" title="token">token</a></li><li><a href="updownselect.html" title="updownselect">updownselect</a></li></ul></li><li><a href="FreeMarker Tags.html" title="FreeMarker Tags">FreeMarker Tags</a></li><li><a href="JSP Tags.html" title="JSP Tags">JSP Tags</a></li><li><a href="Non Form Tags.html" title="Non Form Tags">Non Form Tags</a><ul><li><a href="a.html" title="a">a</a></li><li><a href="actionerror.html" title="actionerror">actionerror</a></li><li><a href="actionmessage.html" title="actionmessage">actionmessage</a></li><li><a href="component.html" title="component">component</a></li><li><a href="date.html" title="date">date</a></li><li><a href="div.html" title="div">div</a></li><li><a href="panel.html" title="panel">panel</a></li><li><a href="tabbedpane.html" title="tabbedpane">tabbedpane</a></li><li><a href="tabbedPanel.html" title="tabbedPanel">tabbedPanel</a></li><li><a href="table.html" title="table">table</a></li><li><a href="tree.html" title="tree">tree</a></li><li><a href="treenode.html" title="treenode">treenode</a></li></ul></li><li><a href="Tag Syntax.html" title="Tag Syntax">Tag Syntax</a><ul><li><a href="Alt Syntax.html" title="Alt Syntax">Alt Syntax</a></li></ul></li><li><a href="Themes and Templates.html" title="Themes and Templates">Themes and Templates</a><ul><li><a href="ajax theme.html" title="ajax theme">ajax theme</a></li><li><a href="css_xhtml theme.html" title="css_xhtml theme">css_xhtml theme</a></li><li><a href="Extending Themes.html" title="Extending Themes">Extending Themes</a></li><li><a href="Selecting Themes.html" title="Selecting Themes">Selecting Themes</a></li><li><a href="simple theme.html" title="simple theme">simple theme</a></li><li><a href="Template Loading.html" title="Template Loading">Template Loading</a></li><li><a href="xhtml theme.html" title="xhtml theme">xhtml theme</a></li></ul></li><li><a href="Velocity Tags.html" title="Velocity Tags">Velocity Tags</a></li></ul></li><li><a href="Testing.html" title="Testing">Testing</a><ul><li><a href="Testing Actions.html" title="Testing Actions">Testing Actions</a></li><li><a href="Testing Interceptors.html" title="Testing Interceptors">Testing Interceptors</a></li><li><a href="Testing Validation.html" title="Testing Validation">Testing Validation</a></li></ul></li><li><a href="Type Conversion.html" title="Type Conversion">Type Conversion</a></li><li><a href="Validation.html" title="Validation">Validation</a><ul><li><a href="AJAX Validation.html" title="AJAX Validation">AJAX Validation</a></li><li><a href="Basic Validation.html" title="Basic Validation">Basic Validation</a></li><li><a href="Client Side Validation.html" title="Client Side Validation">Client Side Validation</a><ul><li><a href="AJAX Client Side Validation.html" title="AJAX Client Side Validation">AJAX Client Side Validation</a></li><li><a href="Pure JavaScript Client Side Validation.html" title="Pure JavaScript Client Side Validation">Pure JavaScript Client Side Validation</a></li></ul></li><li><a href="Client Validation.html" title="Client Validation">Client Validation</a></li><li><a href="collection validator.html" title="collection validator">collection validator</a></li><li><a href="conversion validator.html" title="conversion validator">conversion validator</a></li><li><a href="date validator.html" title="date validator">date validator</a></li><li><a href="email validator.html" title="email validator">email validator</a></li><li><a href="expression validator.html" title="expression validator">expression validator</a></li><li><a href="fieldexpression validator.html" title="fieldexpression validator">fieldexpression validator</a></li><li><a href="int validator.html" title="int validator">int validator</a></li><li><a href="regex validator.html" title="regex validator">regex validator</a></li><li><a href="required validator.html" title="required validator">required validator</a></li><li><a href="requiredstring validator.html" title="requiredstring validator">requiredstring validator</a></li><li><a href="stringlength validator.html" title="stringlength validator">stringlength validator</a></li><li><a href="url validator.html" title="url validator">url validator</a></li><li><a href="Using Field Validators.html" title="Using Field Validators">Using Field Validators</a></li><li><a href="Using Non Field Validators.html" title="Using Non Field Validators">Using Non Field Validators</a></li><li><a href="Using Visitor Field Validator.html" title="Using Visitor Field Validator">Using Visitor Field Validator</a></li><li><a href="visitor validator.html" title="visitor validator">visitor validator</a></li></ul></li><li><a href="Velocity.html" title="Velocity">Velocity</a><ul><li><a href="velocity.properties.html" title="velocity.properties">velocity.properties</a></li></ul></li><li><a href="XWork Configuration.html" title="XWork Configuration">XWork Configuration</a><ul><li><a href="Action configuration.html" title="Action configuration">Action configuration</a></li><li><a href="Include configuration.html" title="Include configuration">Include configuration</a></li><li><a href="Interceptor Configuration.html" title="Interceptor Configuration">Interceptor Configuration</a></li><li><a href="Namespace Configuration.html" title="Namespace Configuration">Namespace Configuration</a></li><li><a href="Package Configuration.html" title="Package Configuration">Package Configuration</a></li><li><a href="Result Configuration.html" title="Result Configuration">Result Configuration</a><ul><li><a href="Default results.html" title="Default results">Default results</a></li><li><a href="Global results.html" title="Global results">Global results</a></li></ul></li><li><a href="Views.html" title="Views">Views</a></li></ul></li></ul>
 
                     			    </td>
 		    </tr>

docs/wikidocs/Terminating an ExecuteAndWait action.html

+<html>
+    <head>
+        <title>WebWork - 
+        Terminating an ExecuteAndWait action
+         </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">
+				    <h1><a name="TerminatinganExecuteAndWaitaction-Overview"></a>Overview</h1>
+<p>The idea is to have 2 actions, one that execute the <em>ExecuteAndWait</em> action and another one that teminates the already running <em>ExecuteAndWait</em> action. The <em>ExecuteAndWait</em> action will needs to implement a <em>Terminatable</em> interface allowing it to be identified by the terminating action and hence be able to be informed to terminate itself through the <em>terminate()</em> method ( from <em>Terminatable</em> interface ).</p>
+
+<h2><a name="TerminatinganExecuteAndWaitaction-XWork.xmlconfigurations"></a>XWork.xml configurations</h2>
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;action name=<span class="code-quote">"longrunning"</span> class=<span class="code-quote">"com.foo.frontend.action.test.LongRunningAction"</span>&gt;</span>
+	<span class="code-tag">&lt;interceptor-ref name=<span class="code-quote">"defaultStack"</span>/&gt;</span>		
+	<span class="code-tag">&lt;interceptor-ref name=<span class="code-quote">"execAndWait"</span>/&gt;</span>
+	<span class="code-tag">&lt;result name=<span class="code-quote">"wait"</span>    type=<span class="code-quote">"freemarker"</span>&gt;</span>/WEB-INF/content/action/test/longrunning/status.ftl<span class="code-tag">&lt;/result&gt;</span>		
+	<span class="code-tag">&lt;result name=<span class="code-quote">"error"</span>   type=<span class="code-quote">"freemarker"</span>&gt;</span>/WEB-INF/content/action/test/longrunning/terminated.ftl<span class="code-tag">&lt;/result&gt;</span>
+	<span class="code-tag">&lt;result name=<span class="code-quote">"success"</span> type=<span class="code-quote">"freemarker"</span>&gt;</span>/WEB-INF/content/action/test/longrunning/success.ftl<span class="code-tag">&lt;/result&gt;</span>
+<span class="code-tag">&lt;/action&gt;</span> 	
+<span class="code-tag">&lt;action name=<span class="code-quote">"terminatelongrunning"</span> class=<span class="code-quote">"com.foo.frontend.action.test.TerminateLongRunningAction"</span>&gt;</span>
+	<span class="code-tag">&lt;result name=<span class="code-quote">"success"</span> type=<span class="code-quote">"freemarker"</span>&gt;</span>/WEB-INF/content/action/test/longrunning/terminatesuccess.ftl<span class="code-tag">&lt;/result&gt;</span>
+<span class="code-tag">&lt;/action&gt;</span></pre>
+</div></div>
+<p>Action <em>longruning</em> will be the action executing the <em>ExecuteAndWait</em> action where as action <em>terminatelongrunning will be the action to terminate the _ExecuteAndWait</em> action.</p>
+
+<h2><a name="TerminatinganExecuteAndWaitaction-Terminatableinterface"></a>Terminatable interface</h2>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Terminatable
+{
+	<span class="code-keyword">public</span> void terminate();
+}</pre>
+</div></div>
+<p><em>ExecuteAndWait</em> action wish to be informed about its termination such that it could ends itself gracefully should implement this interface.</p>
+
+<h2><a name="TerminatinganExecuteAndWaitaction-TheExecuteAndWaitAction"></a>The <em>ExecuteAndWait</em> Action </h2>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> class LongRunningAction <span class="code-keyword">extends</span> ActionSupport <span class="code-keyword">implements</span> Terminatable
+{
+	<span class="code-keyword">private</span> <span class="code-object">boolean</span> terminated=<span class="code-keyword">false</span>;
+	<span class="code-keyword">private</span> <span class="code-object">int</span> i=0;
+	
+	<span class="code-keyword">public</span> <span class="code-object">String</span> execute()
+	{
+		<span class="code-keyword">while</span>( i++ &lt; 100 )
+		{
+			<span class="code-keyword">if</span>( terminated )
+			{
+				<span class="code-keyword">return</span> ERROR;
+			}
+			
+			<span class="code-keyword">try</span>
+			{
+				<span class="code-object">Thread</span>.sleep(1000);
+			}
+			<span class="code-keyword">catch</span>( InterruptedException ie )
+			{
+				<span class="code-comment">// blah
+</span>			}
+		}
+		
+		<span class="code-keyword">return</span> SUCCESS;
+	}
+ 
+	<span class="code-keyword">public</span> <span class="code-object">int</span> getProgress()
+	{
+		<span class="code-keyword">return</span> i;
+	}
+ 
+	<span class="code-keyword">public</span> void terminate()
+	{
+		<span class="code-keyword">this</span>.terminated = <span class="code-keyword">true</span>;
+	}
+	
+}</pre>
+</div></div>
+<p>The <em>ExecuteAndWait</em> action is basically a conditional loop that loop indefintely until it's informed to ends itself by breaking the loop.</p>
+
+
+<h2><a name="TerminatinganExecuteAndWaitaction-TheactiontoterminateExecuteAndWaitaction"></a>The action to terminate <em>ExecuteAndWait</em> action</h2>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">import</span> java.util.Map;
+ 
+<span class="code-keyword">import</span> com.opensymphony.webwork.interceptor.BackgroundProcess;
+<span class="code-keyword">import</span> com.opensymphony.webwork.interceptor.SessionAware;
+<span class="code-keyword">import</span> com.opensymphony.xwork.ActionSupport;
+ 
+<span class="code-keyword">public</span> class TerminateLongRunningAction <span class="code-keyword">extends</span> ActionSupport <span class="code-keyword">implements</span> SessionAware
+{
+	<span class="code-keyword">private</span> <span class="code-object">String</span> name = <span class="code-quote">"__execWaitlongrunning"</span>;
+	
+	<span class="code-keyword">private</span> Map session;
+	
+	<span class="code-keyword">public</span> <span class="code-object">String</span> execute()
+	{
+		BackgroundProcess bp = (BackgroundProcess) session.get( name );
+		
+		<span class="code-keyword">if</span>( bp==<span class="code-keyword">null</span> || bp.getAction()==<span class="code-keyword">null</span> || !(bp.getAction() <span class="code-keyword">instanceof</span> Terminatable) )
+		{
+			<span class="code-keyword">return</span> ERROR;
+		}
+		
+		Terminatable t = (Terminatable) bp.getAction();
+		t.terminate();
+		
+		<span class="code-keyword">return</span> SUCCESS;
+	}
+ 
+	<span class="code-keyword">public</span> void setSession( Map session )
+	{
+		<span class="code-keyword">this</span>.session = session;
+	}
+}</pre>
+</div></div>
+<p>This action terminates the <em>ExecuteAndWait</em> action simply informing it through the <em>terminate()</em> method.</p>
+
+
+<h2><a name="TerminatinganExecuteAndWaitaction-Thefreemarkerpages"></a>The freemarker pages </h2>
+<div class="code"><div class="codeHeader"><b>status.ftl</b></div><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;html&gt;</span>
+	<span class="code-tag">&lt;head&gt;</span>
+		<span class="code-tag">&lt;title&gt;</span>Please wait<span class="code-tag">&lt;/title&gt;</span>
+		<span class="code-tag">&lt;meta http-equiv=<span class="code-quote">"refresh"</span> content=<span class="code-quote">"1;url=&lt;@ww.url includeParams="</span>all<span class="code-quote">" /&gt;</span>"</span>/&gt;
+	<span class="code-tag">&lt;/head&gt;</span>
+	<span class="code-tag">&lt;body&gt;</span>
+		Progress: ${Session['__execWaitlongrunning'].action.progress}%	
+	<span class="code-tag">&lt;/body&gt;</span>
+<span class="code-tag">&lt;/html&gt;</span></pre>
+</div></div>
+
+<div class="code"><div class="codeHeader"><b>success.ftl</b></div><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;html&gt;</span>
+	<span class="code-tag">&lt;body&gt;</span>
+		Exited normally.
+	<span class="code-tag">&lt;/body&gt;</span>
+<span class="code-tag">&lt;/html&gt;</span></pre>
+</div></div>
+
+<div class="code"><div class="codeHeader"><b>terminated.ftl</b></div><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;html&gt;</span>
+	<span class="code-tag">&lt;body&gt;</span>
+		Terminated.
+	<span class="code-tag">&lt;/body&gt;</span>
+<span class="code-tag">&lt;/html&gt;</span></pre>
+</div></div>
+
+<div class="code"><div class="codeHeader"><b>termiantefailed.ftl</b></div><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;html&gt;</span>
+	<span class="code-tag">&lt;body&gt;</span>
+		Process didn't exist or something like that.
+	<span class="code-tag">&lt;/body&gt;</span>
+<span class="code-tag">&lt;/html&gt;</span></pre>
+</div></div> 
+
+<div class="code"><div class="codeHeader"><b>terminatesuccess.ftl</b></div><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;html&gt;</span>
+	<span class="code-tag">&lt;body&gt;</span>
+		The background action was signalled to terminate.
+	<span class="code-tag">&lt;/body&gt;</span>
+<span class="code-tag">&lt;/html&gt;</span></pre>
+</div></div>
+
+
+<p>Special thanks to Lens that contributed this sollution in <a href="http://forums.opensymphony.com/thread.jspa?messageID=170947" title="Visit page outside Confluence">WebWork's forum</a> </p>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/Testing Actions.html

+<html>
+    <head>
+        <title>WebWork - 
+        Testing Actions
+         </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">
+				    <h2><a name="TestingActions-TestingActions"></a>Testing Actions</h2>
+
+<p>The simplest is to instantiate your actions, call setters then execute().  This allows you to bypass all the complicated container setup.</p>
+
+<p>Taken from Petsoar:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> org.petsoar.actions.inventory;
+
+<span class="code-keyword">import</span> com.mockobjects.constraint.IsEqual;
+<span class="code-keyword">import</span> com.mockobjects.dynamic.C;
+<span class="code-keyword">import</span> com.mockobjects.dynamic.Mock;
+<span class="code-keyword">import</span> com.opensymphony.xwork.Action;
+<span class="code-keyword">import</span> junit.framework.TestCase;
+<span class="code-keyword">import</span> org.petsoar.pets.Pet;
+<span class="code-keyword">import</span> org.petsoar.pets.PetStore;
+
+<span class="code-keyword">public</span> class TestViewPet <span class="code-keyword">extends</span> TestCase {
+    <span class="code-keyword">private</span> Mock mockPetStore;
+    <span class="code-keyword">private</span> ViewPet action;
+
+    <span class="code-keyword">protected</span> void setUp() <span class="code-keyword">throws</span> Exception {
+        mockPetStore = <span class="code-keyword">new</span> Mock(PetStore.class);
+        PetStore petStore = (PetStore) mockPetStore.proxy();
+
+        action = <span class="code-keyword">new</span> ViewPet();
+        action.setPetStore(petStore);
+    }
+
+    <span class="code-keyword">public</span> void testViewPet() <span class="code-keyword">throws</span> Exception {
+        Pet existingPet = <span class="code-keyword">new</span> Pet();
+        existingPet.setName(<span class="code-quote">"harry"</span>);
+        existingPet.setId(1);
+
+        Pet expectedPet = <span class="code-keyword">new</span> Pet();
+        expectedPet.setName(<span class="code-quote">"harry"</span>);
+        expectedPet.setId(1);
+
+        mockPetStore.expectAndReturn(<span class="code-quote">"getPet"</span>, C.args(<span class="code-keyword">new</span> IsEqual(<span class="code-keyword">new</span> <span class="code-object">Long</span>(1))), existingPet);
+        action.setId(1);
+
+        <span class="code-object">String</span> result = action.execute();
+
+        assertEquals(Action.SUCCESS, result);
+        assertEquals(expectedPet, existingPet);
+        mockPetStore.verify();
+    }
+
+    <span class="code-keyword">public</span> void testViewPetNoId() <span class="code-keyword">throws</span> Exception {
+        mockPetStore.expectAndReturn(<span class="code-quote">"getPet"</span>, C.ANY_ARGS, <span class="code-keyword">null</span>);
+
+        <span class="code-object">String</span> result = action.execute();
+
+        assertEquals(Action.ERROR, result);
+        assertEquals(1, action.getActionErrors().size());
+        assertEquals(<span class="code-quote">"Invalid pet selected."</span>, action.getActionErrors().iterator().next());
+        assertNull(action.getPet());
+        mockPetStore.verify();
+    }
+
+    <span class="code-keyword">public</span> void testViewPetInvalidId() <span class="code-keyword">throws</span> Exception {
+        action.setId(-1);
+        testViewPetNoId();
+    }
+}</pre>
+</div></div>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/Testing Interceptors.html

+<html>
+    <head>
+        <title>WebWork - 
+        Testing 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">
+				    <h3><a name="TestingInterceptors-TestingInterceptors"></a>Testing Interceptors</h3>
+
+<p>Implement ConfigurationProvider. This mocks your XWork configuration (xwork.xml). You can either have one configuration per interceptor under test or one for your whole suite.</p>
+
+<div class="code"><div class="codeHeader"><b>MockConfigurationProvider.java</b></div><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> class MockConfigurationProvider <span class="code-keyword">implements</span> ConfigurationProvider {
+ 
+  <span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> <span class="code-object">String</span> DEFAULT_PACKAGE = <span class="code-quote">"defaultPackage"</span>;
+  /** */
+  <span class="code-keyword">public</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> <span class="code-object">String</span> TEST = <span class="code-quote">"test"</span>;
+ 
+  /* (non-Javadoc)
+   * @see com.opensymphony.xwork.config.ConfigurationProvider#destroy()
+   */
+  <span class="code-keyword">public</span> void destroy() {
+    <span class="code-comment">// <span class="code-keyword">do</span> nothing
+</span>  }
+ 
+  /* (non-Javadoc)
+   * @see com.opensymphony.xwork.config.ConfigurationProvider#init(com.opensymphony.xwork.config.Configuration)
+   */
+  <span class="code-keyword">public</span> void init(Configuration configurationManager) {
+    PackageConfig defaultPackageContext = <span class="code-keyword">new</span>   PackageConfig(DEFAULT_PACKAGE);
+ 
+    List&lt;InterceptorMapping&gt; interceptors = <span class="code-keyword">new</span> ArrayList&lt;InterceptorMapping&gt;();
+    interceptors.add(<span class="code-keyword">new</span> InterceptorMapping(<span class="code-quote">"test"</span>, <span class="code-keyword">new</span> MyTestInterceptor()));
+    ActionConfig actionConfig = <span class="code-keyword">new</span> ActionConfig(<span class="code-keyword">null</span>, MyAction.class, <span class="code-keyword">null</span>, <span class="code-keyword">null</span>, interceptors);
+    actionConfig.setPackageName(DEFAULT_PACKAGE);
+    defaultPackageContext.addActionConfig(TEST, actionConfig);
+ 
+    configurationManager.addPackageConfig(DEFAULT_PACKAGE, defaultPackageContext);
+  }
+ 
+  /* (non-Javadoc)
+   * @see com.opensymphony.xwork.config.ConfigurationProvider#needsReload()
+   */
+  <span class="code-keyword">public</span> <span class="code-object">boolean</span> needsReload() {
+    <span class="code-keyword">return</span> <span class="code-keyword">false</span>;
+  }
+}</pre>
+</div></div>
+
+<p>Then you can simply request the actions for testing from ActionProxyFactory, and they will have the correct interceptors set. The only other requirement is loading the mock configuration in set up </p>
+
+<div class="code"><div class="codeHeader"><b>MyInterceptorUnitTest.java</b></div><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> class MyInterceptorUnitTest <span class="code-keyword">extends</span> TestCase {
+ 
+  /* (non-Javadoc)
+   * @see com.opensymphony.xwork.XWorkTestCase#setUp()
+   */
+  @Override
+  <span class="code-keyword">protected</span> void setUp() <span class="code-keyword">throws</span> Exception {
+    ConfigurationManager.clearConfigurationProviders();
+    ConfigurationManager.addConfigurationProvider(<span class="code-keyword">new</span> MockConfigurationProvider());
+    ConfigurationManager.getConfiguration().reload();
+  }
+ 
+  /**
+   * @<span class="code-keyword">throws</span> Exception
+   */
+  <span class="code-keyword">public</span> void testShouldOnlyAllowContinuationWhenInterceptorAllows() <span class="code-keyword">throws</span> Exception {
+    Map&lt;<span class="code-object">String</span>, Map&gt;&lt;<span class="code-object">String</span>, <span class="code-object">String</span>&gt;&gt; extraContext = <span class="code-keyword">new</span> HashMap&lt;<span class="code-object">String</span>, Map&gt;&lt;<span class="code-object">String</span>, <span class="code-object">String</span>&gt;&gt;();
+    extraContext.put(ActionContext.PARAMETERS, <span class="code-keyword">new</span> HashMap&lt;<span class="code-object">String</span>, <span class="code-object">String</span>&gt;());
+ 
+    ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy("", MockConfigurationProvider.TEST, extraContext);
+    assertEquals(<span class="code-quote">"myredirect.result"</span>, proxy.execute());
+  }
+}</pre>
+</div></div>
+
+<h3><a name="TestingInterceptors-ExistingTestSuites"></a>Existing Test Suites</h3>
+
+<p>Check out the test suites in XWork/WebWork.  These are pretty comprehensive and provide a good starting point.  For example,  this is how the <b>ParametersInterceptor</b> is tested:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> void testDoesNotAllowMethodInvocations() {
+  Map params = <span class="code-keyword">new</span> HashMap();
+  params.put(<span class="code-quote">"@java.lang.<span class="code-object">System</span>@exit(1).dummy"</span>, <span class="code-quote">"dumb value"</span>);
+
+  HashMap extraContext = <span class="code-keyword">new</span> HashMap();
+  extraContext.put(ActionContext.PARAMETERS, params);
+
+  <span class="code-keyword">try</span> {
+    ActionProxy proxy = ActionProxyFactory.getFactory().
+      createActionProxy("", MockConfigurationProvider.MODEL_DRIVEN_PARAM_TEST, extraContext);
+    assertEquals(Action.SUCCESS, proxy.execute());
+
+    ModelDrivenAction action = (ModelDrivenAction) proxy.getAction();
+    TestBean model = (TestBean) action.getModel();
+
+    <span class="code-object">String</span> property = <span class="code-object">System</span>.getProperty(<span class="code-quote">"webwork.security.test"</span>);
+    assertNull(property);
+  } <span class="code-keyword">catch</span> (Exception e) {
+    e.printStackTrace();
+    fail();
+  }
+}</pre>
+</div></div>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/Testing Validation.html

+<html>
+    <head>
+        <title>WebWork - 
+        Testing 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">
+				    <h2><a name="TestingValidation-Testvalidationforanaction"></a>Test validation for an action</h2>
+
+<p>This is an example of how to simply test validation when using xml validation files.  The following code would test the contents of the xml file "ValidateableAction-contextName-validation.xml".</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">public</span> void testActionValidation() <span class="code-keyword">throws</span> ValidationException {
+   DefaultActionValidatorManager validator = <span class="code-keyword">new</span> DefaultActionValidatorManager();
+   ValidateableAction action = <span class="code-keyword">new</span> ValidateableAction();
+   action.setParam(<span class="code-keyword">new</span> Param());
+   ... <span class="code-comment">// setup the parameters you want to test
+</span>
+   validator.validate(action, <span class="code-quote">"contextName"</span>);
+   assertTrue(action.hasErrors()); <span class="code-comment">// If the validation should fail
+</span>   assertFalse(action.hasErrors()); <span class="code-comment">// If the validation should pass
+</span>   <span class="code-comment">// action.getActionErrors() will give you the errors that occurred
+</span>}</pre>
+</div></div>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/Testing.html

+<html>
+    <head>
+        <title>WebWork - 
+        Testing
+         </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">
+				    <p>WebWork's POJO based design facilitates unit and integration testing.  Actions, interceptors, result types can all be tested with frameworks such a <a href="http://www.junit.org" title="Visit page outside Confluence">JUnit</a>, <a href="http://www.testng.org" title="Visit page outside Confluence">TestNG</a>, <a href="http://www.jmock.org" title="Visit page outside Confluence">JMock</a>, <a href="http://www.easymock.org" title="Visit page outside Confluence">EasyMock</a> etc.</p>
+
+<ul><li><a href="Testing Actions.html" title="Testing Actions">Testing Actions</a></li><li><a href="Testing Interceptors.html" title="Testing Interceptors">Testing Interceptors</a></li><li><a href="Testing Validation.html" title="Testing Validation">Testing Validation</a></li></ul>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/The Vault.html

 </ul>
 
 
+<h4><a name="TheVault-IE6failedtoopenupthedownloadedzipfile"></a>IE6 failed to open up the downloaded zip file</h4>
+<ul class="alternate" type="square">
+	<li><a href="http://support.microsoft.com/?kbid=308090" title="Visit page outside Confluence">http://support.microsoft.com/?kbid=308090</a></li>
+</ul>
+
+
+
 <h2><a name="TheVault-Examples"></a>Examples</h2>
 
 <h4><a name="TheVault-StepsongettingimageusingWWaction"></a>Steps on getting image using WW action</h4>

docs/wikidocs/Validation.html

 
 <p>Note: The default <b>validationWorkflowStack</b> already includes this.</p>
 
+<table cellpadding='5' width='85%' cellspacing='8px' class='warningMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="./icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Workflow Interceptor Required</b><br />
+<p>The Workflow interceptor must also be below the validation interceptor in your stack for validation to prevent action invocation.</p></td></tr></table>
+
 <h2><a name="Validation-ValidatorScopes"></a>Validator Scopes</h2>
 
 <p>Field validators, as the name indicate, act on single fields accessible through an action. 
 of the action to find default validations for interfaces and parent classes of 
 the Action. If you are using the short-circuit attribute and relying on 
 default validators higher up in the inheritance tree, make sure you don't 
-accidentally short-circuit things higher in the tree that you really want!</p></p>
+accidentally short-circuit things higher in the tree that you really want!</p>
+<p>
+The effect of having common validators on both 
+</p>
+<ul>
+	<li>&lt;actionClass&gt;-validation.xml</li>
+    <li>&lt;actionClass&gt;-&lt;actionAlias&gt;-validation.xml</li>
+</ul>
+<p>
+It should be noted that the nett effect will be validation on both the validators available 
+in both validation configuration file. For example if we have 'requiredstring' validators defined
+in both validation xml file for field named 'address', we will see 2 validation error indicating that
+the the address cannot be empty (assuming validation failed). This is due to WebWork 
+will merge validators found in both validation configuration files.
+</p>
+<p>
+The logic behind this design decision is such that we could have common validators in 
+&lt;actionClass&gt;-validation.xml and more context specific validators to be located
+in &lt;actionClass&gt;-&lt;actionAlias&gt;-validation.xml
+</p></p>
 <p>&nbsp;</p>
 
                     			    </td>

docs/wikidocs/WebWork 2.2.2.html

                                             Feb 22, 2006
                                     </td>
                                 <td nowrap="true">
-                                            Feb 26, 2006
+                                            Jul 18, 2007
                                     </td>
                                 <td nowrap="true">
                                             

docs/wikidocs/WebWork 2.2.3.html

                             </tr>
                                     <tr class="rowAlternate">
                                                             <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1297"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1327"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                 <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1297">WW-1297</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1327">WW-1327</a>
                                     </td>
                                 <td >
-                                            <a href="http://jira.opensymphony.com/browse/WW-1297">radiomap.ftl formats long numbers with commas</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1327">ww:param not functioning when used with ww:include</a>
                                     </td>
                                 <td nowrap="true">
                                             Rainer Hermanns
                                     </td>
                                 <td nowrap="true">
-                                            Hugh Lang
+                                            Sean Moriarty
                                     </td>
                                 <td nowrap="true">
                                             <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/priority_minor.gif" alt="Minor" border="0" />
                                     </td>
                                 <td nowrap="true">
-                                            <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
+                                            <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
                                     </td>
                                 <td nowrap="true">
-                                            <font color="990000">FIXED</font>
+                                            <font color="990000">NOT A PROBLEM</font>
                                     </td>
                                 <td nowrap="true">
-                                            Jun 11, 2006
+                                            Jul 19, 2006
                                     </td>
                                 <td nowrap="true">
-                                            Dec 18, 2006
+                                            Aug 10, 2006
                                     </td>
                                 <td nowrap="true">
                                             
                             </tr>
                                     <tr class="rowNormal">
                                                             <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1327"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1274"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                 <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1327">WW-1327</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1274">WW-1274</a>
                                     </td>
                                 <td >
-                                            <a href="http://jira.opensymphony.com/browse/WW-1327">ww:param not functioning when used with ww:include</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1274">Wrong end index used when pick path info from the request URI in RequestUtils.getServletPath(request).</a>
                                     </td>
                                 <td nowrap="true">
-                                            Rainer Hermanns
+                                            Alexandru Popescu
                                     </td>
                                 <td nowrap="true">
-                                            Sean Moriarty
+                                            Parker Wang
                                     </td>
                                 <td nowrap="true">
                                             <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/priority_minor.gif" alt="Minor" border="0" />
                                     </td>
                                 <td nowrap="true">
-                                            <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                            <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
                                     </td>
                                 <td nowrap="true">
-                                            <font color="990000">NOT A PROBLEM</font>
+                                            <font color="990000">WON'T FIX</font>
                                     </td>
                                 <td nowrap="true">
-                                            Jul 19, 2006
+                                            Mar 27, 2006
                                     </td>
                                 <td nowrap="true">
                                             Aug 10, 2006
                             </tr>
                                     <tr class="rowAlternate">
                                                             <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1274"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1310"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                 <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1274">WW-1274</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1310">WW-1310</a>
                                     </td>
                                 <td >
-                                            <a href="http://jira.opensymphony.com/browse/WW-1274">Wrong end index used when pick path info from the request URI in RequestUtils.getServletPath(request).</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1310">readonly attribute on ww:textfield does not behave as a boolean</a>
                                     </td>
                                 <td nowrap="true">
-                                            Alexandru Popescu
+                                            Rainer Hermanns
                                     </td>
                                 <td nowrap="true">
-                                            Parker Wang
+                                            Dieter van Baarle
                                     </td>
                                 <td nowrap="true">
                                             <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/priority_minor.gif" alt="Minor" border="0" />
                                             <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
                                     </td>
                                 <td nowrap="true">
-                                            <font color="990000">WON'T FIX</font>
+                                            <font color="990000">FIXED</font>
                                     </td>
                                 <td nowrap="true">
-                                            Mar 27, 2006
+                                            Jun 26, 2006
                                     </td>
                                 <td nowrap="true">
-                                            Aug 10, 2006
+                                            Feb 27, 2007
                                     </td>
                                 <td nowrap="true">
                                             
                             </tr>
                                     <tr class="rowNormal">
                                                             <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1310"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-978"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                 <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1310">WW-1310</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-978">WW-978</a>
                                     </td>
                                 <td >
-                                            <a href="http://jira.opensymphony.com/browse/WW-1310">readonly attribute on ww:textfield does not behave as a boolean</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-978">ww:sort ww:generator and ww:subset tags are broken</a>
                                     </td>
                                 <td nowrap="true">
                                             Rainer Hermanns
                                     </td>
                                 <td nowrap="true">
-                                            Dieter van Baarle
+                                            Janari Põld
                                     </td>
                                 <td nowrap="true">
                                             <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/priority_minor.gif" alt="Minor" border="0" />
                                             <font color="990000">FIXED</font>
                                     </td>
                                 <td nowrap="true">
-                                            Jun 26, 2006
+                                            Nov 30, 2005
                                     </td>
                                 <td nowrap="true">
-                                            Feb 27, 2007
+                                            Feb 16, 2007
                                     </td>
                                 <td nowrap="true">
                                             
                             </tr>
                                     <tr class="rowAlternate">
                                                             <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-978"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1297"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                 <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-978">WW-978</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1297">WW-1297</a>
                                     </td>
                                 <td >
-                                            <a href="http://jira.opensymphony.com/browse/WW-978">ww:sort ww:generator and ww:subset tags are broken</a>
+                                            <a href="http://jira.opensymphony.com/browse/WW-1297">radiomap.ftl formats long numbers with commas</a>
                                     </td>
                                 <td nowrap="true">
                                             Rainer Hermanns
                                     </td>
                                 <td nowrap="true">
-                                            Janari Põld
+                                            Hugh Lang
                                     </td>
                                 <td nowrap="true">
                                             <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21640&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/priority_minor.gif" alt="Minor" border="0" />
                                             <font color="990000">FIXED</font>
                                     </td>
                                 <td nowrap="true">
-                                            Nov 30, 2005
+                                            Jun 11, 2006
                                     </td>
                                 <td nowrap="true">
-                                            Feb 16, 2007
+                                            May 19, 2007
                                     </td>
                                 <td nowrap="true">
                                             

docs/wikidocs/WebWork 2.2.5.html

                             </tr>
                                     <tr class="rowAlternate">
                                                             <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1420"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/WW-1420">WW-1420</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/WW-1420">WebWork doesn&#39;t read theme.properties when it is in webapp path</a>
-                                    </td>
-                                <td nowrap="true">
-                                            tm_jee
-                                    </td>
-                                <td nowrap="true">
-                                            tm_jee
-                                    </td>
-                                <td nowrap="true">
-                                            <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/priority_major.gif" alt="Major" border="0" />
-                                    </td>
-                                <td nowrap="true">
-                                            <img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
-                                    </td>
-                                <td nowrap="true">
-                                            <font color="990000">FIXED</font>
-                                    </td>
-                                <td nowrap="true">
-                                            Jan 25, 2007
-                                    </td>
-                                <td nowrap="true">
-                                            Feb 02, 2007
-                                    </td>
-                                <td nowrap="true">
-                                            
-                                    </td>
-                            </tr>
-                                    <tr class="rowNormal">
-                                                            <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1382"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
                                     </td>
                                 <td nowrap="true">
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1387"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1406"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1396"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1393"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1352"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1395"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1394"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1355"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1414"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1397"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1353"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/WW-1356"><img src="http://jira.opensymphony.com/secure/IssueNavigator.jspa?reset=true&pid=10030&fixfor=21672&status=5&status=6&sorter/field=priority&sorter/order=DESC/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             
                                     </td>
                             </tr>