struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lukaszlen...@apache.org
Subject svn commit: r869821 [13/43] - in /websites/production/struts/content/development/2.x/docs: ./ ajax-validation.data/ big-picture.data/ chaining-interceptor.data/ colophon.data/ config-browser-plugin.data/ create-struts-2-web-application-using-maven-to-m...
Date Wed, 17 Jul 2013 09:31:13 GMT
Added: websites/production/struts/content/development/2.x/docs/exception-configuration.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/exception-configuration.html (added)
+++ websites/production/struts/content/development/2.x/docs/exception-configuration.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,254 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
+    <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
+    <script src='http://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
+            <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+            <script src='http://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
+    
+    <script type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Exception Configuration</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="core-developers-guide.html">Core Developers Guide</a>&nbsp;&gt;&nbsp;<a href="configuration-elements.html">Configuration Elements</a>&nbsp;&gt;&nbsp;<a href="exception-configuration.html">Exception Configuration</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Exception Configuration</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=13987">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=13987">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=13987">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=13987">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=13987">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=13987">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><p>Exception mappings is a powerful feature for dealing with an Action class that throws an Exception. The core idea is that an Exception thrown during the Action method can be automatically caught and mapped to a predefined Result. This declarative strategy is especially useful for frameworks, like Hibernate and Acegi, that throw RuntimeExceptions.</p>
+
+<p>As with many other parts of the framework, an Interceptor is needed to activate the exception mapping functionality. Below is a snippet from <tt>struts-default.xml</tt> which has the exception mapping already activated.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>snippet of struts-default.xml</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+...
+&lt;interceptors&gt;
+    ...
+    &lt;interceptor name="exception" class="com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor"/&gt;
+    ...
+&lt;/interceptors&gt;
+
+&lt;interceptor-stack name="defaultStack"&gt;
+    &lt;interceptor-ref name="exception"/&gt;
+    &lt;interceptor-ref name="alias"/&gt;
+    &lt;interceptor-ref name="servlet-config"/&gt;
+    &lt;interceptor-ref name="prepare"/&gt;
+    &lt;interceptor-ref name="i18n"/&gt;
+    &lt;interceptor-ref name="chain"/&gt;
+    &lt;interceptor-ref name="debugging"/&gt;
+    &lt;interceptor-ref name="profiling"/&gt;
+    &lt;interceptor-ref name="scoped-model-driven"/&gt;
+    &lt;interceptor-ref name="model-driven"/&gt;
+    &lt;interceptor-ref name="fileUpload"/&gt;
+    &lt;interceptor-ref name="checkbox"/&gt;
+    &lt;interceptor-ref name="static-params"/&gt;
+    &lt;interceptor-ref name="params"/&gt;
+    &lt;interceptor-ref name="conversionError"/&gt;
+    &lt;interceptor-ref name="validation"&gt;
+        &lt;param name="excludeMethods"&gt;input,back,cancel,browse&lt;/param&gt;
+    &lt;/interceptor-ref&gt;
+    &lt;interceptor-ref name="workflow"&gt;
+        &lt;param name="excludeMethods"&gt;input,back,cancel,browse&lt;/param&gt;
+    &lt;/interceptor-ref&gt;
+&lt;/interceptor-stack&gt;
+...
+]]></script>
+</div></div>
+<p>To use exception mapping, we simply need to map Exceptions to specific Results. The framework provides two ways to declare an exception mapping <tt>&lt;exception-mapping/&gt;</tt> - globally or for a specific action mapping. The exception mapping element takes two attributes, <tt>exception</tt> and <tt>result</tt>.</p>
+
+<p>When declaring an exception mapping, the Interceptor will find the closest class inheritance match between the Exception thrown and the Exception declared. The Interceptor will examine all declared mappings applicable to the action mapping, first local and then global mappings. If a match is found, the Result is processed, just as if it had been returned by the Action.</p>
+
+<p><img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" height="16" width="16" alt="" border="0"> This process follows the same rules as a Result returned from an Action. It first looks for the Result in the local action mapping, and if not found, it looks for a global Result.</p>
+
+<p>Below is an example of global and local exception mappings.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>snippet from struts.xml</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;struts&gt;
+    &lt;package name="default"&gt;
+        ...
+        &lt;global-results&gt;
+            &lt;result name="login" type="redirect"&gt;/Login.action&lt;/result&gt;
+            &lt;result name="Exception"&gt;/Exception.jsp&lt;/result&gt;
+        &lt;/global-results&gt;
+
+        &lt;global-exception-mappings&gt;
+            &lt;exception-mapping exception="java.sql.SQLException" result="SQLException"/&gt;
+            &lt;exception-mapping exception="java.lang.Exception" result="Exception"/&gt;
+        &lt;/global-exception-mappings&gt;
+        ...
+        &lt;action name="DataAccess" class="com.company.DataAccess"&gt;
+            &lt;exception-mapping exception="com.company.SecurityException" result="login"/&gt;
+            &lt;result name="SQLException" type="chain"&gt;SQLExceptionAction&lt;/result&gt;
+            &lt;result&gt;/DataAccess.jsp&lt;/result&gt;
+        &lt;/action&gt;
+        ...
+    &lt;/package&gt;
+&lt;/xwork&gt;
+]]></script>
+</div></div>
+<p>In the example above, here is what happens based upon each Exception:</p>
+<ul><li>A <tt>java.sql.SQLException</tt> will chain to the <tt>SQLExceptionAction</tt> (action mapping not shown)</li><li>A <tt>com.company.SecurityException</tt> will redirect to <tt>Login.action</tt></li><li>Any other exception that extends <tt>java.lang.Exception</tt> will return the <tt>/Exception.jsp</tt> page</li></ul>
+
+
+<h2><a shape="rect" name="ExceptionConfiguration-ExceptionValuesontheValueStack"></a>Exception Values on the ValueStack</h2>
+
+<p>By default, the <tt>ExceptionMappingInterceptor</tt> adds the following values to the Value Stack:</p>
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> exception </th><td colspan="1" rowspan="1" class="confluenceTd"> The exception object itself </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> exceptionStack </th><td colspan="1" rowspan="1" class="confluenceTd"> The value from the stack trace </td></tr></tbody></table>
+</div>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Sample JSP using Error and Exception Values</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[ 
+&lt;h2&gt;An unexpected error has occurred&lt;/h2&gt;
+&lt;p&gt;
+    Please report this error to your system administrator
+    or appropriate technical support personnel.
+    Thank you for your cooperation.
+&lt;/p&gt;
+&lt;hr/&gt;
+&lt;h3&gt;Error Message&lt;/h3&gt;
+&lt;s:actionerror/&gt;
+&lt;p&gt;
+    &lt;s:property value="%{exception.message}"/&gt;
+&lt;/p&gt;
+&lt;hr/&gt;
+&lt;h3&gt;Technical Details&lt;/h3&gt;
+&lt;p&gt;
+    &lt;s:property value="%{exceptionStack}"/&gt;
+&lt;/p&gt;
+]]></script>
+</div></div>
+
+<h2><a shape="rect" name="ExceptionConfiguration-Exceptioninconstructors"></a>Exception in constructors</h2>
+<p>Global exception mappings are designed to be used with exceptions thrown by action methods (like <tt>execute</tt>). exceptions thrown from constructors will <b>not</b> be handled by global exception mappings.</p></div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/exclude-parameters.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/exclude-parameters.html (added)
+++ websites/production/struts/content/development/2.x/docs/exclude-parameters.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
+    <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
+    <script src='http://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
+            <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+    
+    <script type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Exclude Parameters</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="tutorials.html">Tutorials</a>&nbsp;&gt;&nbsp;<a href="getting-started.html">Getting Started</a>&nbsp;&gt;&nbsp;<a href="exclude-parameters.html">Exclude Parameters</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Exclude Parameters</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=30746942">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=30746942">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=30746942">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=30746942">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=30746942">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=30746942">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><div class="panelMacro"><table class="infoMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">The example code for this tutorial, exclude_parameters, is available for checkout at <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2examples/">https://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2examples/</a>.</td></tr></table></div>
+
+<h3><a shape="rect" name="ExcludeParameters-Introduction"></a>Introduction</h3>
+
+<p>When <a shape="rect" class="external-link" href="http://struts.apache.org/2.3.8/docs/strutsproperties.html">Struts development mode is set to true</a> (also see <a shape="rect" href="debugging-struts.html" title="Debugging Struts">Debugging Struts</a>) the framework writes many informative messages to the log file.  These messages include ones that indicate whether or not a specific parameter will be handled by the parameter interceptor and made available to the Action class.  These log messages can be helpful in clearly identifying parameters that you do not want the parameter interceptor to process for security or other reasons. This article discusses how to exclude parameters from being handled by the parameter interceptor.</p>
+
+<div class="panelMacro"><table class="tipMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">The <a shape="rect" class="external-link" href="http://struts.apache.org/mail.html">Struts 2 user mailing list</a> is an excellent place to get help. If you are having a problem getting the tutorial example applications to work search the Struts 2 mailing list. If you don't find an answer to your problem, post a question on the mailing list.</td></tr></table></div>
+
+<h3><a shape="rect" name="ExcludeParameters-ProcessingRequestParameters"></a>Processing Request Parameters</h3>
+
+<p>Most request parameters are by default processed by the parameter interceptor and Struts 2 will attempt to modify the state of those Action class fields that match up to a parameter name by calling a corresponding public set method. For example if the request includes a parameter of lastName with a value of Phillips, Struts 2 will try to call a public method with a signature of setLastName(String lastName). However, there may be request parameters that you do not want Struts 2 to try to set the value of in the Action class.</p>
+
+<p>Consider this code which creates a form:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Struts 2 Form Tags</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+
+&lt;s:form action="save" method="post"&gt;
+&lt;s:textfield key="personBean.firstName" /&gt; 
+&lt;s:textfield key="personBean.lastName" /&gt; 
+&lt;s:textfield key="personBean.email" /&gt;
+&lt;s:textfield key="personBean.phoneNumber" /&gt;
+&lt;s:select key="personBean.sport" list="sports" /&gt;
+&lt;s:radio key="personBean.gender" list="genders" /&gt;
+&lt;s:select key="personBean.residency" list="states" listKey="stateAbbr" listValue="stateName" /&gt;
+&lt;s:checkbox key="personBean.over21" /&gt;
+&lt;s:checkboxlist key="personBean.carModels" list="carModelsAvailable" /&gt;
+&lt;s:submit key="submit" /&gt;
+&lt;/s:form&gt;
+
+]]></script>
+</div></div>
+
+<p>The s:submit tag will create a submit button with a name of submit.  Since the Action class probably doesn't have a setSubmit(String name) method you will see the following log messages (only if Struts development mode is set to true):</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Log Messages</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[
+
+Dec 31, 2012 3:43:53 PM 
+com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
+WARNING: Parameter [submit] is not on the excludeParams list of patterns and will be appended to action!
+
+Dec 31, 2012 3:43:53 PM com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
+SEVERE: Developer Notification (set struts.devMode to false to disable this message):
+Unexpected Exception caught setting 'submit' on 'class org.apache.struts.edit.action.EditAction: Error setting expression 'submit' with value ['Save Changes', ]
+
+]]></script>
+</div></div>
+
+<h3><a shape="rect" name="ExcludeParameters-ExcludingRequestParametersFromStruts2Processing"></a>Excluding Request Parameters From Struts 2 Processing</h3>
+
+<div class="panelMacro"><table class="tipMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">If you're not familiar with setting up a custom interceptor stack for your Struts 2 application review <a shape="rect" href="introducing-interceptors.html" title="Introducing Interceptors">Introducing Interceptors</a>.</td></tr></table></div>
+
+<p>To exclude specific parameters from being processed by the Struts 2 framework you need to add those parameter names to the list of excluded parameters.  One way to do this is by adding those parameter names to the collection of excludedParams for the Parameters interceptor.  You can do this by modifying the Parameters interceptor in setting up the stack of interceptors used by your Struts 2 application.  For example:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Setup Interceptor Stack To Exclude submit Parameter</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+
+
+&lt;interceptors&gt;
+  &lt;interceptor-stack name="appDefault"&gt;
+    &lt;interceptor-ref name="defaultStack"&gt;
+       &lt;param name="exception.logEnabled"&gt;true&lt;/param&gt;
+       &lt;param name="exception.logLevel"&gt;ERROR&lt;/param&gt;
+       &lt;param name="params.excludeParams"&gt;dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*,submit&lt;/param&gt;
+    &lt;/interceptor-ref&gt;
+  &lt;/interceptor-stack&gt;
+&lt;/interceptors&gt;
+		
+&lt;default-interceptor-ref name="appDefault" /&gt;
+
+]]></script>
+</div></div>
+
+<p>The value of node &lt;param name="params.excludeParams"&gt; is a comma-delimited list of regular expressions or simple Strings that identify request parameters that should NOT be processed by the Parameters interceptor.  To exclude the submit parameter (which is the name of the submit button in the form code above), I just added submit to the list.</p>
+
+<p>See the <a shape="rect" class="external-link" href="http://struts.apache.org/2.3.8/docs/struts-defaultxml.html">Basic Stack of Interceptors described here</a> to view the initial set of parameter names/regular expressions to exclude.  Be sure to copy over the list of parameters already being excluded and then add your own parameters to the end separated by commas.</p>
+
+<h3><a shape="rect" name="ExcludeParameters-ExampleApplication"></a>Example Application</h3>
+
+<p>Download the example application, <a shape="rect" class="external-link" href="http://code.google.com/p/struts2-examples/downloads/list" rel="nofollow">Exclude_Params_Struts2_Mvn</a>  that demonstrates excluding a request parameter.  The download is a zipped Maven project.  You should be able to unzip it and import the project into any Maven-aware Java IDE.  See the project's README.txt file for how to build and run the application.</p>
+
+<p>To see the log messages written when not excluding the submit parameter remove the ",submit" from the list of excluded parameter values in the struts.xml file.  Then rebuild and redeploy the application and view the console when running the application.</p>
+
+<h3><a shape="rect" name="ExcludeParameters-Summary"></a>Summary</h3>
+
+<p>It's a nice feature of the Struts 2 framework that it logs during development which request parameters will and will not be processed.  During development of a Struts 2 web application it's a good practice to review these log messages to determine if there are any parameters that the framework should not process.  For those parameters the Struts 2 framework should not process add the parameter name (or a regular expression that can be used to identify multiple parameter names) to the comma-delimited list that is the value for the &lt;param name="params.excludeParams"&gt; node.</p></div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/execute-action.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/execute-action.html (added)
+++ websites/production/struts/content/development/2.x/docs/execute-action.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Execute Action</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="contributors-guide.html">Contributors Guide</a>&nbsp;&gt;&nbsp;<a href="requirements.html">Requirements</a>&nbsp;&gt;&nbsp;<a href="use-cases.html">Use Cases</a>&nbsp;&gt;&nbsp;<a href="execute-action.html">Execute Action</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Execute Action</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=29366">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=29366">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=29366">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=29366">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=29366">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=29366">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><h2><a shape="rect" name="ExecuteAction-Narrative"></a>Narrative</h2>
+
+<blockquote>
+<p>A client submits a request to the Registration action for a new User account for the username "trillian". The Action object queries the database to see if the user exists, and then obtains a new User object for "trillian". The Action stores the User object in the client's session, and returns "success". The system matches "success" with a result object that presents the "Menu" page. </p></blockquote>
+
+<h2><a shape="rect" name="ExecuteAction-Goal"></a>Goal</h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Goal </th><td colspan="1" rowspan="1" class="confluenceTd"> Execute Action</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">Level </th><td colspan="1" rowspan="1" class="confluenceTd"> Subfunction </td><td colspan="1" rowspan="1" class="confluenceTd"> (User Goal, Summary,  Subfunction) </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> Trigger </th><td colspan="1" rowspan="1" class="confluenceTd"> Dispatcher selects Mapping </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">Primary Actor </th><td colspan="1" rowspan="1" class="confluenceTd"> Framework </td></tr></tbody></table>
+</div>
+
+
+<h2><a shape="rect" name="ExecuteAction-MainSuccessScenario%28MSS%29"></a>Main Success Scenario (MSS)</h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Step </th><th colspan="1" rowspan="1" class="confluenceTh"> Action </th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 1 </th><td colspan="1" rowspan="1" class="confluenceTd"> Client submits a request for a resource handled by the framework.  </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 2 </th><td colspan="1" rowspan="1" class="confluenceTd"> Framework matches location to an action mapping. </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 3 </th><td colspan="1" rowspan="1" class="confluenceTd"> Framework invokes Action class associated with action mapping. </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 4 </th><td colspan="1" rowspan="1" class="confluenceTd"> Action handles transaction and returns result ID. </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 5 </th><td colspan="1" rowspan="1" class="confluenceTd"> Fram
 ework matches result ID to result object. </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 6 </th><td colspan="1" rowspan="1" class="confluenceTd"> Framework invokes result object. </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 7 </th><td colspan="1" rowspan="1" class="confluenceTd"> Framework (via Container) transfers (or redirects) control to result resource.  </td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 8 </th><td colspan="1" rowspan="1" class="confluenceTd"> Resource renders response. </td></tr></tbody></table>
+</div>
+
+
+<h2><a shape="rect" name="ExecuteAction-Extensions"></a>Extensions</h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Step </th><th colspan="1" rowspan="1" class="confluenceTh"> Branching Action </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 1a    </th><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> .1     </th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> 2a    </th><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> .1     </th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluen
 ceTd"> <img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" height="16" width="16" alt="" border="0"> </td></tr></tbody></table>
+</div>
+
+
+<hr>
+
+<h2><a shape="rect" name="ExecuteAction-PreconditionsandGuarantees"></a>Preconditions and Guarantees</h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Preconditions </th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> Minimal Guarantees </th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"> Success Guarantees </th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table>
+</div>
+
+
+<h2><a shape="rect" name="ExecuteAction-StakeholdersandInterests"></a>Stakeholders and Interests</h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Stakeholder </th><th colspan="1" rowspan="1" class="confluenceTh"> Interest </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table>
+</div>
+
+
+<h2><a shape="rect" name="ExecuteAction-Variations"></a>Variations </h2>
+
+<div class="table-wrap">
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Step </th><th colspan="1" rowspan="1" class="confluenceTh"> Variation </th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh">&#160;</th><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table>
+</div>
+
+</div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/exposing-framework-objects-to-jstl-with-a-jstl-and-displaytag-example.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/exposing-framework-objects-to-jstl-with-a-jstl-and-displaytag-example.html (added)
+++ websites/production/struts/content/development/2.x/docs/exposing-framework-objects-to-jstl-with-a-jstl-and-displaytag-example.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
+    <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
+    <script src='http://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
+            <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+    
+    <script type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Exposing framework objects to JSTL, with a JSTL and DisplayTag Example</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="faqs.html">FAQs</a>&nbsp;&gt;&nbsp;<a href="cookbook.html">Cookbook</a>&nbsp;&gt;&nbsp;<a href="exposing-framework-objects-to-jstl-with-a-jstl-and-displaytag-example.html">Exposing framework objects to JSTL, with a JSTL and DisplayTag Example</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Exposing framework objects to JSTL, with a JSTL and DisplayTag Example</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14260">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14260">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14260">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14260">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14260">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14260">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent">
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;s:set name="jobz" value="jobs" scope="request" /&gt;]]></script>
+</div></div>
+
+<p>The full example below shows a Struts 2/OGNL variable "jobs" being exposed as "jobz" to the request scope and being used with jstl and the display tag.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;%@ taglib uri="/WEB-INF/tlds/c.tld" prefix="c" %&gt;
+&lt;%@ taglib uri="/WEB-INF/tlds/fmt.tld" prefix="fmt" %&gt;
+&lt;%@ taglib uri="/WEB-INF/tlds/displaytag-el-12.tld" prefix="display" %&gt;
+&lt;%@ taglib uri="/struts-tags" prefix="s" %&gt;
+
+&lt;s:set name="jobz" value="jobs" scope="request" /&gt;
+
+&lt;h1&gt;&lt;fmt:message key="title.listAllJobs"/&gt;&lt;/h1&gt;
+&lt;display:table name="jobz" class="simple" id="row" &gt;
+  &lt;display:column  titleKey="label.global.actions" &gt;
+  		&lt;c:url var="viewurl" value="/viewJobDetail.action"&gt;
+			&lt;c:param name="name" value="${row.name}"/&gt;
+  			&lt;c:param name="groupName" value="${row.group}"/&gt;
+		&lt;/c:url&gt;
+  		&lt;c:url var="exeurl" value="/viewJobDetail.action"&gt;
+			&lt;c:param name="name" value="${row.name}"/&gt;
+  			&lt;c:param name="groupName" value="${row.group}"/&gt;
+  			&lt;c:param name="executeJobAction" value="execute"/&gt;
+		&lt;/c:url&gt;
+  		&lt;c:url var="editurl" value="/viewJobDetail.action"&gt;
+			&lt;c:param name="name" value="${row.name}"/&gt;
+  			&lt;c:param name="groupName" value="${row.group}"/&gt;
+  			&lt;c:param name="editAction" value="edit"/&gt;
+		&lt;/c:url&gt;
+	&lt;a href='&lt;c:out value="${viewurl}"/&gt;'&gt;&lt;fmt:message key="label.global.view"/&gt;&lt;/a&gt; |
+	&lt;a href='&lt;c:out value="${editurl}"/&gt;'&gt;&lt;fmt:message key="label.global.edit"/&gt;&lt;/a&gt; |
+	&lt;a href='&lt;c:out value="${exeurl}"/&gt;'&gt;&lt;fmt:message key="label.global.execute"/&gt;&lt;/a&gt; &amp;nbsp;
+  &lt;/display:column&gt; 
+
+  &lt;display:column property="group" titleKey="label.job.group" sortable="true"   /&gt;
+  &lt;display:column property="name" titleKey="label.job.name" sortable="true"  /&gt;
+  &lt;display:column property="description" titleKey="label.job.description" /&gt;
+  &lt;display:column property="jobClass" titleKey="label.job.jobClass" sortable="true"  /&gt;
+
+&lt;/display:table&gt;]]></script>
+</div></div>
+
+<p>Please note, at the time of this writing the "titleKey" attribute of the display tag's column tag is not yet released into a final version. It is a feature that is currently only available through cvs.</p></div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/extending-an-application-with-custom-plugins.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/extending-an-application-with-custom-plugins.html (added)
+++ websites/production/struts/content/development/2.x/docs/extending-an-application-with-custom-plugins.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,248 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
+    <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
+    <script src='http://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
+            <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+            <script src='http://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
+    
+    <script type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Extending an Application with Custom Plugins</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="tutorials.html">Tutorials</a>&nbsp;&gt;&nbsp;<a href="extending-an-application-with-custom-plugins.html">Extending an Application with Custom Plugins</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Extending an Application with Custom Plugins</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=51021">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=51021">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=51021">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=51021">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=51021">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=51021">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><p>In this tutorial, we will show how easily our application can be made extensible using the Struts 2 plugin mechanism. To keep the demonstration simple, our plugin will expose a JavaBean that writes a message. Plugins may include any combination of JavaBeans, Actions, Interceptors, Results or other resources we'd like available to an application. </p>
+
+<h2><a shape="rect" name="ExtendinganApplicationwithCustomPlugins-TheInterface"></a>The Interface</h2>
+
+<p>At runtime, plugins are retrieved and referenced via an Interface. So, first, we should define an interface that our plugin will implement. This interface must be available to both our web application and the plugin. To reduce coupling between the web application and the plugins, keep the interface in a separate JAR. </p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>IMyPlugin.java</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package example;
+
+public interface IMyPlugIn {
+   String saySomething();
+}
+]]></script>
+</div></div>
+
+<h2><a shape="rect" name="ExtendinganApplicationwithCustomPlugins-ThePlugin"></a>The Plugin</h2>
+
+<p>Now that we have an interface to implement we'll create the plugin. At load time, the framework looks for JARs containing a <tt>struts-plugin.xml</tt> file at the root of the archive. To create a plugin, all we need to do is build a JAR and put the expected <tt>struts-plugin.xml</tt> at the root. </p>
+
+<p>To get started, let's create a class that implements our IMyPlugin interface.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>MyPlugin.java</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package example.impl;
+
+import example.IMyPlugin; 
+
+public class MyPlugin implements IMyPlugin {
+   public String saySomething() {
+       return "We don't need no education";
+   }
+}
+]]></script>
+</div></div>
+
+<p>Internally, the framework utilizes a number of JavaBeans. We can use the <tt>bean</tt> element to add our own JavaBeans to the set managed by the framework.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>struts-default.xml</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
+
+&lt;!DOCTYPE struts PUBLIC
+    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
+    "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;
+
+&lt;struts&gt;
+    &lt;bean type="example.IMyInterface" class="example.impl.MyPlugin" name="myPlugin"/&gt;
+&lt;/struts&gt;
+]]></script>
+</div></div>
+
+<p>Finally, to install the plugin, drop the JAR file under WEB-INF/lib.</p>
+
+<h2><a shape="rect" name="ExtendinganApplicationwithCustomPlugins-TheAction"></a>The Action</h2>
+
+<p>The JavaBeans configured by <tt>bean</tt> elements can be retrieved via a Container provided by XWork 2. We obtain a reference to the Container by using the <tt>@Inject</tt> notation. (This notation is part of the Guice framework that XWork and Struts use under the covers.) The framework predefines a Container object, and the <tt>@Inject</tt> annotation tells the framework to set its Container object to the Action property.</p>
+
+<p>We might want to supply a number of JavaBeans to the application this way. In the Action, we will obtain a reference to the entire set of JavaBeans that might have been plugged in. Then, we can scroll through the set, displaying each JavaBean's message.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>MyAction.java</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package example.actions;
+
+import example.IMyPlugin;
+
+public class MyAction extends ActionSupport {
+    Set&lt;IMyPlugin&gt; plugins;
+
+    @Inject
+    public void setContainer(Container container) {
+        Set&lt;String&gt; names = container.getInstanceNames(IMyPlugin.class);
+        plugins = new HashSet&lt;IMyPlugin&gt;();
+        for (String name : names) {
+            plugins.add(container.getInstance(IMyPlugin.class, name));
+        }
+    }
+
+    public Set&lt;IMyPlugin&gt; getPlugins() {
+        return this.plugins;
+    }
+}
+]]></script>
+</div></div>
+
+<p>As seen by the Action class code, it's important to define a unique interface for any beans that we plugin, so that we can identify our beans later. </p>
+
+<p>In the same way that we plugged in this JavaBean, we could also plugin and configure Action classes, Interceptors, Results, or any other JAR-able resource that an application might utilize.</p>
+
+<h2><a shape="rect" name="ExtendinganApplicationwithCustomPlugins-TheJSP"></a>The JSP</h2>
+
+<p>Let's do something with those plugins:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Page.jsp</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;s:iterator id="plugin" value="plugins"&gt;
+  &lt;s:property value="#plugin.saySomething()"/&gt;
+&lt;/s:iterator&gt;
+]]></script>
+</div></div>
+</div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file

Added: websites/production/struts/content/development/2.x/docs/extending-themes.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/extending-themes.html (added)
+++ websites/production/struts/content/development/2.x/docs/extending-themes.html Wed Jul 17 09:31:08 2013
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. 
+-->
+<html>
+<head>
+    <LINK type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
+    <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
+    <script src='http://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
+            <script src='http://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+            <script src='http://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
+    
+    <script type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Extending Themes</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="tag-developers-guide.html">Tag Developers Guide</a>&nbsp;&gt;&nbsp;<a href="struts-tags.html">Struts Tags</a>&nbsp;&gt;&nbsp;<a href="ui-tags.html">UI Tags</a>&nbsp;&gt;&nbsp;<a href="themes-and-templates.html">Themes and Templates</a>&nbsp;&gt;&nbsp;<a href="extending-themes.html">Extending Themes</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="http://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Extending Themes</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=13962">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=13962">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=13962">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=13962">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=13962">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=13962">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><p>Most often, an application may just need to override a template (see <a shape="rect" href="template-loading.html" title="Template Loading">Template Loading</a>) so that a certain control renders differently. Or, an application may need to add a new template to an existing theme. Other times, you might want to create an entirely new theme, perhaps because you are building a rich set of unique and reusable templates for your organization.</p>
+
+<p>There are three ways to create new themes:</p>
+<ul><li>Create a new theme from scratch (<b>hard!</b>)</li><li>Wrap an existing theme</li><li>Extend an existing theme</li></ul>
+
+
+<h2><a shape="rect" name="ExtendingThemes-CreatingaNewThemefromScratch"></a>Creating a New Theme from Scratch</h2>
+
+<div class="panelMacro"><table class="tipMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1"><b>Keep it simple, Sam!</b><br clear="none">It's probably never a good idea to create a new theme from scratch. Instead, use the <a shape="rect" href="simple-theme.html" title="simple theme">simple theme</a> as a starting point. The simple theme provides just enough foundation to make it easy to create new controls by extending or wrapping the basic controls. Before starting a new theme, be sure to review the source templates for all of the provided themes. The existing themes are your best guide to creating new themes.</td></tr></table></div>
+
+<h2><a shape="rect" name="ExtendingThemes-WrappinganExistingTheme"></a>Wrapping an Existing Theme</h2>
+
+<p>The <a shape="rect" href="xhtml-theme.html" title="xhtml theme">xhtml theme</a> provides several good examples of the "wrapping" technique. The <a shape="rect" href="simple-theme.html" title="simple theme">simple theme</a> renders the basic control. The xhtml theme "dresses up" many of the controls by adding a header and footer.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Wrapping a control</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;#include "/${parameters.templateDir}/xhtml/controlheader.ftl" /&gt;
+&lt;#include "/${parameters.templateDir}/simple/xxx.ftl" /&gt;
+&lt;#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /&gt;
+]]></script>
+</div></div>
+
+<p>Wrapping is a great way to augment the basic HTML elements provided by the simple theme.</p>
+
+<h2><a shape="rect" name="ExtendingThemes-ExtendinganExistingTheme"></a>Extending an Existing Theme</h2>
+
+<p>One benefit of object-orientated programming is that it lets us "design by difference." We can extend an object and code only the behavior that changes. Themes provide a similar capability. The subdirectory that hosts a theme can contain a <tt>theme.properties</tt> file. A <tt>parent</tt> entry can be added to the property file to designate a theme to extend. The <a shape="rect" href="ajax-theme.html" title="ajax theme">ajax theme</a> extends the <a shape="rect" href="xhtml-theme.html" title="xhtml theme">xhtml theme</a> using this technique.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>/template/ajax/theme.properties</b></div><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+parent = xhtml
+]]></script>
+</div></div>
+
+<p>An extended theme does not need to implement every single template that the <a shape="rect" href="struts-tags.html" title="Struts Tags">Struts Tags</a> expect. It only needs to implement the templates that change. The other templates are loaded from the parent template.</p>
+
+<p><img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" alt="" border="0"> See also <a shape="rect" class="external-link" href="http://www.vitarara.org/cms/struts_2_cookbook/creating_a_theme" rel="nofollow">Creating a Theme in Struts 2</a> (Mark Menard)</p>
+</div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file



Mime
View raw message