Author: lukaszlenart Date: Tue Jul 30 09:36:06 2013 New Revision: 871833 Log: Updates draft docs
Modified: websites/production/struts/content/development/2.x/docs/interceptors.html websites/production/struts/content/development/2.x/docs/objectfactory.html websites/production/struts/content/development/2.x/docs/parameters-interceptor.html websites/production/struts/content/development/2.x/docs/plugins.html websites/production/struts/content/development/2.x/docs/result-types.html websites/production/struts/content/development/2.x/docs/struts-control-tags.html websites/production/struts/content/development/2.x/docs/struts-defaultxml.html websites/production/struts/content/development/2.x/docs/strutsxml-examples.html websites/production/struts/content/development/2.x/docs/using-struts-2-tags.html Modified: websites/production/struts/content/development/2.x/docs/interceptors.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/interceptors.html (original) +++ websites/production/struts/content/development/2.x/docs/interceptors.html Tue Jul 30 09:36:06 2013 @@ -240,6 +240,8 @@ under the License. <struts> <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" /> <bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" /> + <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="xwork" class="org.apache.struts2.factory.StrutsResultFactory" /> + <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="struts" class="org.apache.struts2.factory.StrutsResultFactory" /> <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" name="system" scope="singleton"/> Modified: websites/production/struts/content/development/2.x/docs/objectfactory.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/objectfactory.html (original) +++ websites/production/struts/content/development/2.x/docs/objectfactory.html Tue Jul 30 09:36:06 2013 @@ -138,6 +138,7 @@ under the License. <h2><a shape="rect" name="ObjectFactory-Customize"></a>Customize</h2> +<h3><a shape="rect" name="ObjectFactory-ExtendObjectFactory"></a>Extend ObjectFactory</h3> <div class="panelMacro"><table class="noteMacro"><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/warning.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">Customized ObjectFactory must extend ObjectFactory or any of its descendants and have a default, no-argument constructor.</td></tr></table></div> <p>To register a customized ObjectFactory, add or edit an entry in <tt>struts.properties</tt></p> @@ -156,6 +157,15 @@ public class MyObjectFactory extends Obj ]]></script> </div></div> +<h3><a shape="rect" name="ObjectFactory-Definededicatedbuilder"></a>Define dedicated builder</h3> +<p>If you want to just extend one part of ObjectFactory, ie. to change how <a shape="rect" href="result-types.html" title="Result Types">Result Types</a> are build, you can implement <tt>ResultBuilder</tt> interface below and register it with dedicated name, see <a shape="rect" href="plugins.html#Plugins-ExtensionPoints">Extension Points</a> for more details. All these builders are available as from version 2.3.16.</p> + +<p>List of Builder interfaces:</p> +<ul class="alternate" type="square"><li><tt>ResultBuilder</tt> - dedicated interfaces used to build <a shape="rect" href="result-types.html" title="Result Types">Result Types</a> + <ul class="alternate" type="square"><li><tt>StrutsResultBuilder</tt> it's internal implementation which checks if Result implements <tt>ParamNameAwareResult</tt> interface to restrict names of parameters set on the instance of Result, see <a shape="rect" href="result-types.html" title="Result Types">Result Types</a> for more info.</li></ul> + </li></ul> + + <h2><a shape="rect" name="ObjectFactory-Next%3AActionMapper"></a>Next: <a shape="rect" href="actionmapper.html" title="ActionMapper">ActionMapper</a></h2></div> </div> Modified: websites/production/struts/content/development/2.x/docs/parameters-interceptor.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/parameters-interceptor.html (original) +++ websites/production/struts/content/development/2.x/docs/parameters-interceptor.html Tue Jul 30 09:36:06 2013 @@ -186,6 +186,13 @@ ParametersInterceptor}. For example, act blacklist of paramters they will reject to prevent clients from setting other unexpected (and possibly dangerous) parameters.</p> +<p>Using ParameterNameAware could be dangerous as ParameterNameAware#acceptableParameterName(String) takes precedence +over ParametersInterceptor which means if ParametersInterceptor excluded given parameter name you can accept it with +ParameterNameAware#acceptableParameterName(String).</p> + +<p>The best idea is to define very tight restrictions with ParametersInterceptor and relax them per action with +ParameterNameAware#acceptableParameterName(String)</p> + <h2><a shape="rect" name="ParametersInterceptor-Parameters"></a>Parameters</h2> @@ -234,12 +241,12 @@ actions. However, if you wish to apply a this interceptor and override the #acceptableName(String) method.</p> -<div class="panelMacro"><table class="warningMacro"><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/forbidden.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1"><p>Using ParameterNameAware could be dangerous as @{link ParameterNameAware#acceptableParameterName(String)} takes precedence +<div class="panelMacro"><table class="warningMacro"><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/forbidden.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1"><p>Using ParameterNameAware could be dangerous as ParameterNameAware#acceptableParameterName(String) takes precedence over ParametersInterceptor which means if ParametersInterceptor excluded given parameter name you can accept it with -@{link ParameterNameAware#acceptableParameterName(String)}.</p> +ParameterNameAware#acceptableParameterName(String).</p> <p>The best idea is to define very tight restrictions with ParametersInterceptor and relax them per action with -@{link ParameterNameAware#acceptableParameterName(String)}</p></td></tr></table></div> +ParameterNameAware#acceptableParameterName(String)</p></td></tr></table></div> <h2><a shape="rect" name="ParametersInterceptor-Warningonmissingparameters"></a>Warning on missing parameters</h2> Modified: websites/production/struts/content/development/2.x/docs/plugins.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/plugins.html (original) +++ websites/production/struts/content/development/2.x/docs/plugins.html Tue Jul 30 09:36:06 2013 @@ -173,7 +173,7 @@ Assuming /static/main.css is inside a pl <p>The following extension points are available in Struts 2:</p> -<p><table border="1"><tr><th colspan="1" rowspan="1">Type</th><th colspan="1" rowspan="1">Property</th><th colspan="1" rowspan="1">Scope</th><th colspan="1" rowspan="1">Description</th></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.ObjectFactory</td><td colspan="1" rowspan="1">struts.objectFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Creates actions, results, and interceptors</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.ActionProxyFactory</td><td colspan="1" rowspan="1">struts.actionProxyFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Creates the ActionProxy</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.util.ObjectTypeDeterminer</td><td colspan="1" rowspan="1">struts.objectTypeDeterminer</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Determines what the key and element class of a Map or Collection should be</td></tr><tr><td colspan="1 " rowspan="1">org.apache.struts2.dispatcher.mapper.ActionMapper</td><td colspan="1" rowspan="1">struts.mapper.class</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Determines the ActionMapping from a request and a URI from an ActionMapping</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.dispatcher.multipart.MultiPartRequest</td><td colspan="1" rowspan="1">struts.multipart.parser</td><td colspan="1" rowspan="1">per request</td><td colspan="1" rowspan="1">Parses a multipart request (file upload)</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.views.freemarker.FreemarkerManager</td><td colspan="1" rowspan="1">struts.freemarker.manager.classname</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Loads and processes Freemarker templates</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.views.velocity.VelocityManager</td><td colspan="1" rowspan="1">struts.velocity.manager.classname</td><td colspan="1" rowsp an="1">singleton</td><td colspan="1" rowspan="1">Loads and processes Velocity templates</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.validator.ActionValidatorManager</td><td colspan="1" rowspan="1">struts.actionValidatorManager</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Main interface for validation managers (regular and annotation based). Handles both the loading of +<p><table border="1"><tr><th colspan="1" rowspan="1">Type</th><th colspan="1" rowspan="1">Property</th><th colspan="1" rowspan="1">Scope</th><th colspan="1" rowspan="1">Description</th></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.ObjectFactory</td><td colspan="1" rowspan="1">struts.objectFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Creates actions, results, and interceptors</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.factory.ResultFactory</td><td colspan="1" rowspan="1">struts.objectFactory.resultFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Dedicated factory used to create Results, you can implement/extend existing one instead of defining new ObjectFactory</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.ActionProxyFactory</td><td colspan="1" rowspan="1">struts.actionProxyFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Creat es the ActionProxy</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.util.ObjectTypeDeterminer</td><td colspan="1" rowspan="1">struts.objectTypeDeterminer</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Determines what the key and element class of a Map or Collection should be</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.dispatcher.mapper.ActionMapper</td><td colspan="1" rowspan="1">struts.mapper.class</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Determines the ActionMapping from a request and a URI from an ActionMapping</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.dispatcher.multipart.MultiPartRequest</td><td colspan="1" rowspan="1">struts.multipart.parser</td><td colspan="1" rowspan="1">per request</td><td colspan="1" rowspan="1">Parses a multipart request (file upload)</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.views.freemarker.FreemarkerManager</td><td colspan="1" rowspan="1">struts.freemarker.manager.classname</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Loads and processes Freemarker templates</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.views.velocity.VelocityManager</td><td colspan="1" rowspan="1">struts.velocity.manager.classname</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Loads and processes Velocity templates</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.validator.ActionValidatorManager</td><td colspan="1" rowspan="1">struts.actionValidatorManager</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Main interface for validation managers (regular and annotation based). Handles both the loading of configuration and the actual validation (since 2.1)</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.util.ValueStackFactory</td><td colspan="1" rowspan="1">struts.valueStackFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Creates value stacks (since 2.1)</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.reflection.ReflectionProvider</td><td colspan="1" rowspan="1">struts.reflectionProvider</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Provides reflection services, key place to plug in a custom expression language (since 2.1)</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.reflection.ReflectionContextFactory</td><td colspan="1" rowspan="1">struts.reflectionContextFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Creates reflection context maps used for reflection and expression language operations (since 2.1)</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.config.PackageProvider</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">All beans registered as PackageProvider implementations will be automatically included in configuration building (since 2.1)</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.util.PatternMatcher</td><td colspan="1" rowspan="1">struts.patternMatcher</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Matches patterns, such as action names, generally used in configuration (since 2.1)</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.views.dispatcher.DefaultStaticContentLoader</td><td colspan="1" rowspan="1">struts.staticContentLoader</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Loads static resources (since 2.1)</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.impl.XWorkConverter</td><td colspan="1" rowspan="1">strut s.xworkConverter</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Handles conversion logic and allows to load custom converters per class or per action</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.TextProvider</td><td colspan="1" rowspan="1">struts.xworkTextProvider</td><td colspan="1" rowspan="1">default</td><td colspan="1" rowspan="1">Allows provide custom TextProvider for whole application</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.LocaleProvider</td><td colspan="1" rowspan="1">struts.localeProvider</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Allows provide custom TextProvider for whole application</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.components.UrlRenderer</td><td colspan="1" rowspan="1">struts.urlRenderer</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Allows provide custom implementation of environment specific URL rendering/creating class</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.UnknownHandlerManager</td><td colspan="1" rowspan="1">struts.unknownHandlerManager</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Implementation of this interface allows handle logic of unknown Actions, Methods or Results</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.views.util.UrlHelper</td><td colspan="1" rowspan="1">struts.view.urlHelper</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Helper class used with URLRenderer to provide exact logic for building URLs</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.FileManagerFactory</td><td colspan="1" rowspan="1">struts.fileManagerFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Used to create FileManager instance to access files on the File System as also to monitor if reload is needed, can be implemented / overwritten to meet specific an application server needs </td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.impl.CollectionConverter</td><td colspan="1" rowspan="1">struts.converter.collection</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Converter used to convert any object to Collection and back</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.impl.ArrayConverter</td><td colspan="1" rowspan="1">struts.converter.array</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Converter used to convert any object to Array and back</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.impl.DateConverter</td><td colspan="1" rowspan="1">struts.converter.date</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Converter used to convert any object to Date and back</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.impl.NumberConverter</td><td colspan="1" rowspan="1">struts.conv erter.number</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Converter used to convert any object to Number and back</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.impl.StringConverter</td><td colspan="1" rowspan="1">struts.converter.string</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Converter used to convert any object to String and back</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.ConversionPropertiesProcessor</td><td colspan="1" rowspan="1">struts.conversion.properties.processor</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Process Properties to create converters</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.ConversionPropertiesProcessor</td><td colspan="1" rowspan="1">struts.converter.file.processor</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Process <class>-conversion.propertie s file create converters</class></td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.ConversionAnnotationProcessor</td><td colspan="1" rowspan="1">struts.converter.annotation.processor</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Process TypeConversion annotation to create converters</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.TypeConverterCreator</td><td colspan="1" rowspan="1">struts.converter.creator</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Creates user converters</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.conversion.TypeConverterHolder</td><td colspan="1" rowspan="1">struts.converter.holder</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Holds user converters' instances</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.util.TextParser</td><td colspan="1" rowspan="1">struts.expression.parser</td><td co lspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Used to parse expressions like ${foo.bar} or %{bar.foo} but it is up tp the TextParser's Modified: websites/production/struts/content/development/2.x/docs/result-types.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/result-types.html (original) +++ websites/production/struts/content/development/2.x/docs/result-types.html Tue Jul 30 09:36:06 2013 @@ -175,6 +175,26 @@ under the License. <p>All Result Types are plugged in via the <a shape="rect" href="result-configuration.html" title="Result Configuration">Result Configuration</a>.</p> +<h3><a shape="rect" name="ResultTypes-Extending"></a>Extending</h3> + +<p>You can always extend defined result types and implement whatever logic you need. To simplify process of that, you can define you custom <tt>ResultBuilder</tt> and use it with connection with custom interface which your Result implements. Check <a shape="rect" href="objectfactory.html#ObjectFactory-DefineDedicatedBuilder">Define dedicated builder</a> to see how to do it.</p> + +<p>Struts 2 provides one such extension for you: <tt>ParamNameAwareResult</tt> interface when used with <tt>StrutsResultBuilder</tt> can limit parameters assigned to the result. So you can simple extend existing result with such a functionality as below:</p> + +<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> +<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +public class MyResult extends ServletDispatcherResult implements ParamNameAwareResult { + + public boolean acceptParamName(String name, String value) { + return "accept".equals(name); + } + +} +]]></script> +</div></div> + +<p>and then register it and use instead of default <tt>dispatcher</tt> result.</p> + <h2><a shape="rect" name="ResultTypes-Next%3ADispatcherListener"></a>Next: <a shape="rect" href="dispatcherlistener.html" title="DispatcherListener">DispatcherListener</a></h2></div> </div> Modified: websites/production/struts/content/development/2.x/docs/struts-control-tags.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/struts-control-tags.html (original) +++ websites/production/struts/content/development/2.x/docs/struts-control-tags.html Tue Jul 30 09:36:06 2013 @@ -38,6 +38,7 @@ under the License. <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; @@ -148,7 +149,7 @@ under the License. <p>In the example application's thankyou.jsp is this markup.</p> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[ <s:if test="personBean.over21"> @@ -172,7 +173,7 @@ under the License. <p>The value of the test attribute must be an expression that evaluates to true or false, but doesn't need to be a method call that returns a boolean. For example this s:if tag that is in thankyou.jsp has a more complicated expression.</p> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[ <s:if test="personBean.carModels.length > 1"> @@ -199,7 +200,7 @@ under the License. <p>The Struts iterator tag is used to generate a loop that iterates over each item in a collection. In the thankyou.jsp is this markup.</p> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[ <table style="margin-left:15px"> @@ -208,8 +209,7 @@ under the License. <tr><td><s:property /></td></tr> </s:iterator> - - + </table> @@ -226,7 +226,7 @@ under the License. <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[ <table style="margin-left:15px"> Modified: websites/production/struts/content/development/2.x/docs/struts-defaultxml.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/struts-defaultxml.html (original) +++ websites/production/struts/content/development/2.x/docs/struts-defaultxml.html Tue Jul 30 09:36:06 2013 @@ -172,6 +172,8 @@ under the License. <struts> <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" /> <bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" /> + <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="xwork" class="org.apache.struts2.factory.StrutsResultFactory" /> + <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="struts" class="org.apache.struts2.factory.StrutsResultFactory" /> <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" name="system" scope="singleton"/> Modified: websites/production/struts/content/development/2.x/docs/strutsxml-examples.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/strutsxml-examples.html (original) +++ websites/production/struts/content/development/2.x/docs/strutsxml-examples.html Tue Jul 30 09:36:06 2013 @@ -151,20 +151,23 @@ under the License. <h2><a shape="rect" name="struts.xmlExamples-TheStruts2DocumentTypeDefinition%28DTD%29"></a>The Struts 2 Document Type Definition (DTD)</h2> -<div class="panel" style="border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;"><b>Struts 2.0 DTD</b></div><div class="panelContent"> +<div class="panel" style="border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;"><b>Struts 2.3 DTD</b></div><div class="panelContent"> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> <script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ <!-- Struts configuration DTD. Use the following DOCTYPE - - <!DOCTYPE struts PUBLIC - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" - "http://struts.apache.org/dtds/struts-2.0.dtd"> + + <!DOCTYPE struts PUBLIC + "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" + "http://struts.apache.org/dtds/struts-2.3.dtd"> --> -<!ELEMENT struts (package|include|bean|constant)*> +<!ELEMENT struts ((package|include|bean|constant)*, unknown-handler-stack?)> +<!ATTLIST struts + order CDATA #IMPLIED +> <!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-exception-mappings?, action*)> <!ATTLIST package @@ -172,6 +175,7 @@ under the License. extends CDATA #IMPLIED namespace CDATA #IMPLIED abstract CDATA #IMPLIED + strict-method-invocation CDATA #IMPLIED externalReferenceResolver NMTOKEN #IMPLIED > @@ -221,7 +225,7 @@ under the License. <!ELEMENT global-exception-mappings (exception-mapping+)> -<!ELEMENT action (param|result|interceptor-ref|exception-mapping)*> +<!ELEMENT action ((param|result|interceptor-ref|exception-mapping)*,allowed-methods?)> <!ATTLIST action name CDATA #REQUIRED class CDATA #IMPLIED @@ -247,6 +251,8 @@ under the License. result CDATA #REQUIRED > +<!ELEMENT allowed-methods (#PCDATA)> + <!ELEMENT include (#PCDATA)> <!ATTLIST include file CDATA #REQUIRED @@ -265,7 +271,13 @@ under the License. <!ELEMENT constant (#PCDATA)> <!ATTLIST constant name CDATA #REQUIRED - value CDATA #REQUIRED + value CDATA #REQUIRED +> + +<!ELEMENT unknown-handler-stack (unknown-handler-ref*)> +<!ELEMENT unknown-handler-ref (#PCDATA)> +<!ATTLIST unknown-handler-ref + name CDATA #REQUIRED > ]]></script> Modified: websites/production/struts/content/development/2.x/docs/using-struts-2-tags.html ============================================================================== --- websites/production/struts/content/development/2.x/docs/using-struts-2-tags.html (original) +++ websites/production/struts/content/development/2.x/docs/using-struts-2-tags.html Tue Jul 30 09:36:06 2013 @@ -178,7 +178,7 @@ If you want to actually read the Struts <p>Examine the struts.xml configuration in the Hello World tutorial and you will find this:</p> <div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>struts.xml</b></div><div class="codeContent panelContent"> -<script class="theme: Default; brush: html; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ ... <action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp</result>