Author: lukaszlenart Date: Sun Apr 23 18:10:14 2017 New Revision: 1010979 Log: Updates production
Added: websites/production/struts/content/getting-started/attachments/using_tags_form.png (with props) websites/production/struts/content/getting-started/attachments/using_tags_hello.png (with props) Modified: websites/production/struts/content/docs/actionmapper.html websites/production/struts/content/docs/ajax-head-template.html websites/production/struts/content/docs/div.html websites/production/struts/content/docs/file-upload.html websites/production/struts/content/docs/freemarker.html websites/production/struts/content/docs/interceptors.html websites/production/struts/content/docs/localization.html websites/production/struts/content/docs/plugin-developers-guide.html websites/production/struts/content/docs/plugins.html websites/production/struts/content/docs/s2-041.html websites/production/struts/content/docs/sitegraph-plugin.html websites/production/struts/content/docs/struts-23-to-25-migration.html websites/production/struts/content/docs/struts-defaultxml.html websites/production/struts/content/docs/struts-next.html websites/production/struts/content/docs/tiles-plugin.html websites/production/struts/content/docs/tree.html websites/production/struts/content/docs/type-conversion.html websites/production/struts/content/docs/typeconversion-annotation.html websites/production/struts/content/docs/validation.html websites/production/struts/content/docs/velocity-result.html websites/production/struts/content/getting-started/using-tags.html Modified: websites/production/struts/content/docs/actionmapper.html ============================================================================== --- websites/production/struts/content/docs/actionmapper.html (original) +++ websites/production/struts/content/docs/actionmapper.html Sun Apr 23 18:10:14 2017 @@ -140,11 +140,11 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1488973736511 {padding: 0px;} -div.rbtoc1488973736511 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1488973736511 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1492970082840 {padding: 0px;} +div.rbtoc1492970082840 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1492970082840 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1488973736511"> +/*]]>*/</style></p><div class="toc-macro rbtoc1492970082840"> <ul class="toc-indentation"><li><a shape="rect" href="#ActionMapper-Description">Description</a></li><li><a shape="rect" href="#ActionMapper-DefaultActionMapper">DefaultActionMapper</a> <ul class="toc-indentation"><li><a shape="rect" href="#ActionMapper-Methodprefix">Method prefix</a></li><li><a shape="rect" href="#ActionMapper-Actionprefix">Action prefix</a></li><li><a shape="rect" href="#ActionMapper-AllowedactionnameRegEx">Allowed action name RegEx</a></li><li><a shape="rect" href="#ActionMapper-AllowedmethodnameRegEx">Allowed method name RegEx</a></li></ul> </li><li><a shape="rect" href="#ActionMapper-CustomActionMapper">Custom ActionMapper</a></li><li><a shape="rect" href="#ActionMapper-CompositeActionMapper">CompositeActionMapper</a></li><li><a shape="rect" href="#ActionMapper-PrefixBasedActionMapper">PrefixBasedActionMapper</a></li><li><a shape="rect" href="#ActionMapper-ActionMapperandActionMappingobjects">ActionMapper and ActionMapping objects</a> Modified: websites/production/struts/content/docs/ajax-head-template.html ============================================================================== --- websites/production/struts/content/docs/ajax-head-template.html (original) +++ websites/production/struts/content/docs/ajax-head-template.html Sun Apr 23 18:10:14 2017 @@ -140,13 +140,13 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> <div id="ConfluenceContent"><p>The ajax <a shape="rect" href="head.html">head</a> template builds upon the <a shape="rect" href="xhtml-head-template.html">xhtml head template</a> by providing additional JavaScript includes for the <a shape="rect" class="external-link" href="http://dojotoolkit.org" rel="nofollow">Dojo Toolkit</a>, which is used by the <a shape="rect" href="ajax-a-template.html">ajax a template</a>, <a shape="rect" href="ajax-div-template.html">ajax div template</a> , and the <a shape="rect" href="ajax-tabbedpanel-template.html">ajax tabbedPanel template</a>. It is required to use this tag, <code><ww:head theme="ajax"/></code>, in your HTML <code><head></code> block if you wish to use AJAX feature. The contents of <strong>head.ftl</strong> are:</p> -An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=struts.git;a=blob_plain;hb=HEAD;f=plugins/dojo/src/main/resources/template/ajax/head.ftl status code: 404. The error has been recorded. +<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div> <div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> <p>If you are having trouble getting the AJAX theme to work, you should include the above JavaScript in your page manually, changing "isDebug: false" to "isDebug: true". This will log out debugging information directly to the screen.</p></div></div> <p>Note that Dojo is configured to use the same character encoding specified in <a shape="rect" href="strutsproperties.html">struts.properties</a>, typically UTF-8. For a simple example of how to use the <a shape="rect" href="head.html">head</a> tag with the AJAX theme, simply do the following in your HTML:</p> -An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=struts.git;a=blob_plain;hb=HEAD;f=apps/showcase/src/main/webapp/ajax/commonInclude.jsp status code: 404. The error has been recorded. +<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div> <div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> <p>The above sample is from Struts trunk; for 2.0.6 you should use <code><s:head debug="true"/></code>.</p></div></div></div> Modified: websites/production/struts/content/docs/div.html ============================================================================== --- websites/production/struts/content/docs/div.html (original) +++ websites/production/struts/content/docs/div.html Sun Apr 23 18:10:14 2017 @@ -141,7 +141,7 @@ under the License. <div class="wiki-content"> <div id="ConfluenceContent"><h2 id="div-Description">Description</h2> -An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=struts.git;a=blob_plain;hb=HEAD;f=core/src/main/java/org/apache/struts2/components/Div.java status code: 404. The error has been recorded. +<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div> <div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> <p>While this tag can be used with the <a shape="rect" href="simple-theme.html">simple theme</a>, <a shape="rect" href="xhtml-theme.html">xhtml theme</a>, and others, it is really designed to work best with the <a shape="rect" href="ajax-theme.html">ajax theme</a>. We recommend reading the <a shape="rect" href="ajax-div-template.html">ajax div template</a> documentation for more details.</p></div></div> Modified: websites/production/struts/content/docs/file-upload.html ============================================================================== --- websites/production/struts/content/docs/file-upload.html (original) +++ websites/production/struts/content/docs/file-upload.html Sun Apr 23 18:10:14 2017 @@ -140,15 +140,15 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> <div id="ConfluenceContent"><p>The Struts 2 framework provides built-in support for processing file uploads that conform to <a shape="rect" class="external-link" href="http://www.ietf.org/rfc/rfc1867.txt" rel="nofollow">RFC 1867</a>, "Form-based File Upload in HTML". When correctly configured the framework will pass uploaded file(s) into your Action class. Support for individual and multiple file uploads are provided. When a file is uploaded it will typically be stored in a temporary directory. Uploaded files should be processed or moved by your Action class to ensure the data is not lost. Be aware that servers may have a security policy in place that prohibits you from writing to directories other than the temporary directory and the directories that belong to your web application.</p><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1490256820465 {padding: 0px;} -div.rbtoc1490256820465 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1490256820465 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1492970337680 {padding: 0px;} +div.rbtoc1492970337680 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1492970337680 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1490256820465"> +/*]]>*/</style></p><div class="toc-macro rbtoc1492970337680"> <ul class="toc-indentation"><li><a shape="rect" href="#FileUpload-Dependencies">Dependencies</a></li><li><a shape="rect" href="#FileUpload-BasicUsage">Basic Usage</a></li><li><a shape="rect" href="#FileUpload-UploadingMultipleFiles">Uploading Multiple Files</a> <ul class="toc-indentation"><li><a shape="rect" href="#FileUpload-UploadingMultipleFilesusingArrays">Uploading Multiple Files using Arrays</a></li><li><a shape="rect" href="#FileUpload-UploadingMultipleFilesusingLists">Uploading Multiple Files using Lists</a></li></ul> </li><li><a shape="rect" href="#FileUpload-AdvancedConfiguration">Advanced Configuration</a> -<ul class="toc-indentation"><li><a shape="rect" href="#FileUpload-FileSizeLimits">File Size Limits</a></li><li><a shape="rect" href="#FileUpload-FileTypes">File Types</a></li><li><a shape="rect" href="#FileUpload-ErrorMessages">Error Messages</a></li><li><a shape="rect" href="#FileUpload-TemporaryDirectories">Temporary Directories</a></li><li><a shape="rect" href="#FileUpload-AlternateLibraries">Alternate Libraries</a></li><li><a shape="rect" href="#FileUpload-Requestvalidation">Request validation</a></li></ul> +<ul class="toc-indentation"><li><a shape="rect" href="#FileUpload-FileSizeLimits">File Size Limits</a></li><li><a shape="rect" href="#FileUpload-FileTypes">File Types</a></li><li><a shape="rect" href="#FileUpload-ErrorMessages">Error Messages</a></li><li><a shape="rect" href="#FileUpload-TemporaryDirectories">Temporary Directories</a></li><li><a shape="rect" href="#FileUpload-AlternateLibraries">Alternate Libraries</a></li><li><a shape="rect" href="#FileUpload-Requestvalidation">Request validation</a></li><li><a shape="rect" href="#FileUpload-Disablingfileuploadsupport">Disabling file upload support</a></li></ul> </li></ul> </div><h2 id="FileUpload-Dependencies">Dependencies</h2><p>The Struts 2 framework leverages add-on libraries to handle the parsing of uploaded files. These libraries are not included in the Struts distribution, you must add them into your project. The libraries needed are:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Library</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>URL</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Struts 2.0.x</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Struts 2.1.x</p></th><th colspan="1" rowspan="1" class="confluenceTh">Struts 2.5.x</th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Commons-FileUpload</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="http://commons.apache.org/fileupload/">http://commons.apache.org/fileupload/</a></td><td colspan="1" rowspan="1" class="confluenc eTd"><p>1.1.1</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>1.2.1</p></td><td colspan="1" rowspan="1" class="confluenceTd">1.3.2</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Commons-IO</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="http://commons.apache.org/io/">http://commons.apache.org/io/</a></td><td colspan="1" rowspan="1" class="confluenceTd"><p>1.0</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>1.3.2</p></td><td colspan="1" rowspan="1" class="confluenceTd">2.4</td></tr></tbody></table></div><p>If you are using Maven then you can add these libraries as dependencies in your project's pom.xml.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Struts 2.0.x File Upload Dependencies</b></div><div class="codeContent panelContent pdl"> <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"><dependency> @@ -374,7 +374,9 @@ struts.multipart.maxSize=2097152 </pre> </div></div><p>When the uploaded file type does not match one of the MIME types specified a field error will be created as described in the next section entitled Error Messages. Programmatically limiting the file type means using the information passed in to your Action class via the <code>setXContentType(String contentType)</code> method. The benefit to this type of approach would be that it's more flexible and no interceptor configuration would be needed if file sizes are keep under 2 megs.</p><h3 id="FileUpload-ErrorMessages">Error Messages</h3><p>If an error occurs several field errors will be added assuming that the action implements <code>com.opensymphony.xwork2.ValidationAware</code> or extends <code>com.opensymphony.xwork2.ActionSupport</code>. These error messages are based on several i18n values stored in struts-messages.properties, a default i18n file processed for all i18n requests. You can override the text of these messages by providing text for the following keys:</p> <div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Error Key</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>struts.messages.error.uploading</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A general error that occurs when the file could not be uploaded</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>struts.messages.error.file.too.large</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Occurs when the uploaded file is too large as specified by maximumSize.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>struts.messages.error.content.type.not.allowed</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Occurs when the uploaded file does not match the expected content types specified</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>struts. messages.error.file.extension.not.allowed</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Occurs when uploaded file has disallowed extension</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>struts.messages.upload.error.SizeLimitExceededException</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Occurs when the upload request (as a whole) exceed configured <strong>struts.multipart.maxSize</strong></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>struts.messages.upload.error.<Exception class SimpleName></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Occurs when any other exception took place during file upload process</p></td></tr></tbody></table></div><h3 id="FileUpload-TemporaryDirectories">Temporary Directories</h3><p>All uploaded files are saved to a temporary directory by the framework before being passed in to an Action. Depending on the allowed file sizes it may be necessary to have the framework s tore these temporary files in an alternate location. To do this change <code>struts.multipart.saveDir</code> to the directory where the uploaded files will be placed. If this property is not set it defaults to <code>javax.servlet.context.tempdir</code>. Keep in mind that on some operating systems, like Solaris, <code>/tmp</code> is memory based and files stored in that directory would consume an amount of RAM approximately equal to the size of the uploaded file.</p><h3 id="FileUpload-AlternateLibraries">Alternate Libraries</h3><p>The <code>struts.multipart.parser</code> used by the fileUpload interceptor to handle HTTP POST requests, encoded using the MIME-type multipart/form-data, can be changed out. Currently there are two choices, jakarta and pell. The jakarta parser is a standard part of the Struts 2 framework needing only its required libraries added to a project. The pell parser uses Jason Pell's multipart parser instead of the Commons-FileUpload library. The pell parser is a Struts 2 plugin, for more details see: <a shape="rect" href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=33353">pell multipart plugin</a>. There was a third alternative, cos, but it was removed due to licensing incompatibilities.</p><p>As from Struts version 2.3.18 a new implementation of <code>MultiPartRequest</code> was added - <code>JakartaStreamMultiPartRequest</code>. It can be used to handle large files, see <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-3025">WW-3025</a> for more details, but you can simple set</p><pre><constant name="struts.multipart.parser" value="jakarta-stream" /></pre><p>in struts.xml to start using it.</p><h3 id="FileUpload-Requestvalidation">Request validation</h3><p>The <code>struts.multipart.validationRegex</code> is used to define a RegEx to be used to validate if the incoming request is a multipart request. The request must use the <code>POST</code> metho d and match the RegEx, by default the RegEx is defined as follow:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">^multipart\\/form-data(; boundary=[a-zA-Z0-9]{1,70})?</pre> -</div></div><p>Please read <a shape="rect" class="external-link" href="https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html" rel="nofollow">RFC1341</a> the <strong>Multipart section</strong> for more details, existing Struts <code>Multipart</code> parsers support only <code>multipart/form-data</code> content type.</p><p> </p></div> +</div></div><p>Please read <a shape="rect" class="external-link" href="https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html" rel="nofollow">RFC1341</a> the <strong>Multipart section</strong> for more details, existing Struts <code>Multipart</code> parsers support only <code>multipart/form-data</code> content type. This option is available since Struts 2.3.11.</p><h3 id="FileUpload-Disablingfileuploadsupport">Disabling file upload support</h3><p>You can alternatively disable the whole file upload mechanism defining a constant in <code>struts.xml</code>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"><constant name="struts.multipart.enabled" value="false"/></pre> +</div></div><p>With this constant in place, Struts will ignore a <code>Content-Type</code> header and will treat each request as an ordinary http request. This option is available since Struts 2.3.11.</p><p> </p></div> </div> Modified: websites/production/struts/content/docs/freemarker.html ============================================================================== --- websites/production/struts/content/docs/freemarker.html (original) +++ websites/production/struts/content/docs/freemarker.html Sun Apr 23 18:10:14 2017 @@ -140,11 +140,11 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1488973678190 {padding: 0px;} -div.rbtoc1488973678190 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1488973678190 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1492970038118 {padding: 0px;} +div.rbtoc1492970038118 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1492970038118 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1488973678190"> +/*]]>*/</style></p><div class="toc-macro rbtoc1492970038118"> <ul class="toc-indentation"><li><a shape="rect" href="#FreeMarker-GettingStarted">Getting Started</a></li><li><a shape="rect" href="#FreeMarker-Servlet/JSPScopedObjects">Servlet / JSP Scoped Objects</a> <ul class="toc-indentation"><li><a shape="rect" href="#FreeMarker-ApplicationScopeAttribute">Application Scope Attribute</a></li><li><a shape="rect" href="#FreeMarker-SessionScopeAttribute">Session Scope Attribute</a></li><li><a shape="rect" href="#FreeMarker-RequestScopeAttribute">Request Scope Attribute</a></li><li><a shape="rect" href="#FreeMarker-RequestParameter">Request Parameter</a></li><li><a shape="rect" href="#FreeMarker-Contextparameter">Context parameter</a></li></ul> </li><li><a shape="rect" href="#FreeMarker-TemplateLoading">Template Loading</a></li><li><a shape="rect" href="#FreeMarker-VariableResolution">Variable Resolution</a></li><li><a shape="rect" href="#FreeMarker-TagSupport">Tag Support</a></li><li><a shape="rect" href="#FreeMarker-TipsandTricks">Tips and Tricks</a> Modified: websites/production/struts/content/docs/interceptors.html ============================================================================== --- websites/production/struts/content/docs/interceptors.html (original) +++ websites/production/struts/content/docs/interceptors.html Sun Apr 23 18:10:14 2017 @@ -140,11 +140,11 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> <div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-tip"><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The default Interceptor stack is designed to serve the needs of most applications. Most applications will <strong>not</strong> need to add Interceptors or change the Interceptor stack.</p></div></div><p>Many Actions share common concerns. Some Actions need input validated. Other Actions may need a file upload to be pre-processed. Another Action might need protection from a double submit. Many Actions need drop-down lists and other controls pre-populated before the page displays.</p><p>The framework makes it easy to share solutions to these concerns using an "Interceptor" strategy. When you request a resource that maps to an "action", the framework invokes the Action object. But, before the Action is executed, the invocatio n can be intercepted by another object. After the Action executes, the invocation could be intercepted again. Unsurprisingly, we call these objects "Interceptors."</p><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1488973538486 {padding: 0px;} -div.rbtoc1488973538486 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1488973538486 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1492969959447 {padding: 0px;} +div.rbtoc1492969959447 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1492969959447 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1488973538486"> +/*]]>*/</style></p><div class="toc-macro rbtoc1492969959447"> <ul class="toc-indentation"><li><a shape="rect" href="#Interceptors-UnderstandingInterceptors">Understanding Interceptors</a></li><li><a shape="rect" href="#Interceptors-ConfiguringInterceptors">Configuring Interceptors</a></li><li><a shape="rect" href="#Interceptors-StackingInterceptors">Stacking Interceptors</a> <ul class="toc-indentation"><li><a shape="rect" href="#Interceptors-TheDefaultConfiguration">The Default Configuration</a></li></ul> </li><li><a shape="rect" href="#Interceptors-FrameworkInterceptors">Framework Interceptors</a> @@ -317,8 +317,10 @@ div.rbtoc1488973538486 li {margin-left: <bean type="com.opensymphony.xwork2.conversion.impl.NumberConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.NumberConverter" scope="singleton"/> <bean type="com.opensymphony.xwork2.conversion.impl.StringConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.StringConverter" scope="singleton"/> - <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" scope="prototype" /> - <bean type="com.opensymphony.xwork2.LocaleProvider" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProvider" scope="singleton" /> + <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" scope="singleton" /> + <bean type="com.opensymphony.xwork2.LocalizedTextProvider" name="struts" class="com.opensymphony.xwork2.util.DefaultLocalizedTextProvider" scope="singleton" /> + <bean type="com.opensymphony.xwork2.TextProviderFactory" name="struts" class="com.opensymphony.xwork2.StrutsTextProviderFactory" scope="singleton" /> + <bean type="com.opensymphony.xwork2.LocaleProviderFactory" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProviderFactory" scope="singleton" /> <bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/> <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" class="org.apache.struts2.views.util.DefaultUrlHelper"/> @@ -327,7 +329,6 @@ div.rbtoc1488973538486 li {margin-left: <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider" /> <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory" /> - <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" /> <bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler" /> <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager" /> Modified: websites/production/struts/content/docs/localization.html ============================================================================== --- websites/production/struts/content/docs/localization.html (original) +++ websites/production/struts/content/docs/localization.html Sun Apr 23 18:10:14 2017 @@ -140,11 +140,11 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1490686613414 {padding: 0px;} -div.rbtoc1490686613414 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1490686613414 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1492970016830 {padding: 0px;} +div.rbtoc1492970016830 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1492970016830 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1490686613414"> +/*]]>*/</style></p><div class="toc-macro rbtoc1492970016830"> <ul class="toc-indentation"><li><a shape="rect" href="#Localization-Overview">Overview</a></li><li><a shape="rect" href="#Localization-ResourceBundleSearchOrder">Resource Bundle Search Order</a> <ul class="toc-indentation"><li><a shape="rect" href="#Localization-Defaultaction'sclass">Default action's class</a></li><li><a shape="rect" href="#Localization-UsinggetTextfromaTag">Using getText from a Tag</a></li><li><a shape="rect" href="#Localization-Usingthetexttag">Using the text tag</a></li><li><a shape="rect" href="#Localization-UsingtheI18ntag">Using the I18n tag</a></li><li><a shape="rect" href="#Localization-UsingtheKeyattributeofUITags">Using the Key attribute of UI Tags</a></li></ul> </li><li><a shape="rect" href="#Localization-I18nInterceptor">I18n Interceptor</a></li><li><a shape="rect" href="#Localization-GlobalResources(struts.custom.i18n.resources)instruts.properties">Global Resources (struts.custom.i18n.resources) in struts.properties</a></li><li><a shape="rect" href="#Localization-FormattingDatesandNumbers">Formatting Dates and Numbers</a></li><li><a shape="rect" href="#Localization-ComparisonwithStruts1">Comparison with Struts 1</a></li><li><a shape="rect" href="#Localization-CustomTextProviderandTextProviderFactory">Custom TextProvider and TextProviderFactory</a></li><li><a shape="rect" href="#Localization-Next:">Next: Type Conversion</a></li></ul> Modified: websites/production/struts/content/docs/plugin-developers-guide.html ============================================================================== --- websites/production/struts/content/docs/plugin-developers-guide.html (original) +++ websites/production/struts/content/docs/plugin-developers-guide.html Sun Apr 23 18:10:14 2017 @@ -125,7 +125,7 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> - <div id="ConfluenceContent">Apache Struts 2 provides a simple <a shape="rect" href="plugins.html">plugin architecture</a> so that developers can extend the framework just by adding a JAR to the application's classpath. Since plugins are contained in a JAR, they are easy to share with others. Several plugins are bundled with the framework, and others are available from third-party sources.<ul><li><a shape="rect" href="plugins.html">Plugins</a></li><li><a shape="rect" href="extending-an-application-with-custom-plugins.html">Extending an Application with Custom Plugins</a></li></ul><h3 id="PluginDevelopersGuide-BundledPlugins">Bundled Plugins</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><ul><li><a shape="rect" href="bean-validation-plugin.html">Bean Validation Plugin</a> (2.5+)</li><li><a shape="rect" href="cdi-plugin.html">CDI (JSR 299) Plugin</a> (2.3.1+)</li><li><a shape="rect" href="codebehind-plu gin.html">Codebehind Plugin</a> (< 2.5)</li><li><a shape="rect" href="config-browser-plugin.html">Config Browser Plugin</a></li><li><a shape="rect" href="convention-plugin.html">Convention Plugin</a> (2.1.3+)</li><li><a shape="rect" href="dwr-plugin.html">DWR Plugin</a></li><li><a shape="rect" href="embedded-jsp-plugin.html">Embedded JSP Plugin</a> (2.1.7+)</li><li><a shape="rect" href="jasperreports-plugin.html">JasperReports Plugin</a></li><li><a shape="rect" href="java-8-support-plugin.html">Java 8 Support Plugin</a> (2.3.21 - 2.5.2)</li><li><a shape="rect" href="javatemplates-plugin.html">Javatemplates Plugin</a> (2.1.3+)</li><li><a shape="rect" href="jfreechart-plugin.html">JFreeChart Plugin</a></li><li><a shape="rect" href="jsf-plugin.html">JSF Plugin</a> <span>(</span>< 2.5<span>)</span></li><li><a shape="rect" href="json-plugin.html">JSON Plugin</a> (2.1.7+)</li><li><a shape="rect" href="junit-plugin.html">JUnit Plugin</a></li></ul></td><td colspan="1" rowspan="1" clas s="confluenceTd"><ul><li><a shape="rect" href="oval-plugin.html">OVal Plugin</a> (2.1.7+)</li><li><a shape="rect" href="osgi-plugin.html">OSGi Plugin</a> (2.1.7+)</li><li><a shape="rect" href="plexus-plugin.html">Plexus Plugin</a></li><li><a shape="rect" href="portlet-plugin.html">Portlet Plugin</a></li><li><a shape="rect" href="portlet-tiles-plugin.html">Portlet Tiles Plugin</a> (2.3.5+)</li><li><a shape="rect" href="rest-plugin.html">REST Plugin</a> (2.1.1+)</li><li><a shape="rect" href="sitegraph-plugin.html">SiteGraph Plugin</a></li><li><a shape="rect" href="sitemesh-plugin.html">SiteMesh Plugin</a></li><li><a shape="rect" href="spring-plugin.html">Spring Plugin</a></li><li><a shape="rect" href="struts-1-plugin.html">Struts 1 Plugin</a> <span>(</span>< 2.5<span>)</span></li><li><a shape="rect" href="testng-plugin.html">TestNG Plugin</a></li><li><a shape="rect" href="tiles-plugin.html">Tiles Plugin</a></li><li><a shape="rect" href="tiles-3-plugin.html">Tiles 3 Plugin</a> (< 2.5)</li></ul></td></tr></tbody></table></div><p><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"> For a complete list of bundled and third-party plugins, visit the <a shape="rect" class="external-link" href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin Registry.</a>.</p><h2 id="PluginDevelopersGuide-Next:">Next: <a shape="rect" href="architects-guide.html">Architects Guide</a></h2></div> + <div id="ConfluenceContent">Apache Struts 2 provides a simple <a shape="rect" href="plugins.html">plugin architecture</a> so that developers can extend the framework just by adding a JAR to the application's classpath. Since plugins are contained in a JAR, they are easy to share with others. Several plugins are bundled with the framework, and others are available from third-party sources.<ul><li><a shape="rect" href="plugins.html">Plugins</a></li><li><a shape="rect" href="extending-an-application-with-custom-plugins.html">Extending an Application with Custom Plugins</a></li></ul><h3 id="PluginDevelopersGuide-BundledPlugins">Bundled Plugins</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><ul><li><a shape="rect" href="bean-validation-plugin.html">Bean Validation Plugin</a> (2.5+)</li><li><a shape="rect" href="cdi-plugin.html">CDI (JSR 299) Plugin</a> (2.3.1+)</li><li><a shape="rect" href="codebehind-plu gin.html">Codebehind Plugin</a> (< 2.5)</li><li><a shape="rect" href="config-browser-plugin.html">Config Browser Plugin</a></li><li><a shape="rect" href="convention-plugin.html">Convention Plugin</a> (2.1.3+)</li><li><a shape="rect" href="dwr-plugin.html">DWR Plugin</a></li><li><a shape="rect" href="embedded-jsp-plugin.html">Embedded JSP Plugin</a> (2.1.7+)</li><li><a shape="rect" href="jasperreports-plugin.html">JasperReports Plugin</a></li><li><a shape="rect" href="java-8-support-plugin.html">Java 8 Support Plugin</a> (2.3.21 - 2.5.2)</li><li><a shape="rect" href="javatemplates-plugin.html">Javatemplates Plugin</a> (2.1.3+)</li><li><a shape="rect" href="jfreechart-plugin.html">JFreeChart Plugin</a></li><li><a shape="rect" href="jsf-plugin.html">JSF Plugin</a> <span>(</span>< 2.5<span>)</span></li><li><a shape="rect" href="json-plugin.html">JSON Plugin</a> (2.1.7+)</li><li><a shape="rect" href="junit-plugin.html">JUnit Plugin</a></li></ul></td><td colspan="1" rowspan="1" clas s="confluenceTd"><ul><li><a shape="rect" href="oval-plugin.html">OVal Plugin</a> (2.1.7+)</li><li><a shape="rect" href="osgi-plugin.html">OSGi Plugin</a> (2.1.7+)</li><li><a shape="rect" href="plexus-plugin.html">Plexus Plugin</a></li><li><a shape="rect" href="portlet-plugin.html">Portlet Plugin</a></li><li><a shape="rect" href="portlet-tiles-plugin.html">Portlet Tiles Plugin</a> (2.3.5+)</li><li><a shape="rect" href="rest-plugin.html">REST Plugin</a> (2.1.1+)</li><li>Deprecated: <a shape="rect" href="sitegraph-plugin.html">SiteGraph Plugin</a></li><li><a shape="rect" href="sitemesh-plugin.html">SiteMesh Plugin</a></li><li><a shape="rect" href="spring-plugin.html">Spring Plugin</a></li><li><a shape="rect" href="struts-1-plugin.html">Struts 1 Plugin</a> <span>(</span>< 2.5<span>)</span></li><li><a shape="rect" href="testng-plugin.html">TestNG Plugin</a></li><li><a shape="rect" href="tiles-plugin.html">Tiles Plugin</a></li><li><a shape="rect" href="tiles-3-plugin.html">Tiles 3 Plug in</a> (< 2.5)</li></ul></td></tr></tbody></table></div><p><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"> For a complete list of bundled and third-party plugins, visit the <a shape="rect" class="external-link" href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin Registry.</a>.</p><h2 id="PluginDevelopersGuide-Next:">Next: <a shape="rect" href="architects-guide.html">Architects Guide</a></h2></div> </div> <div class="tabletitle"> Modified: websites/production/struts/content/docs/plugins.html ============================================================================== --- websites/production/struts/content/docs/plugins.html (original) +++ websites/production/struts/content/docs/plugins.html Sun Apr 23 18:10:14 2017 @@ -146,10 +146,10 @@ under the License. <link rel="stylesheet" type="text/css" href="%{#css}" /> </pre> </div></div><p>Read also <a shape="rect" class="external-link" href="http://struts.apache.org/2.x/struts2-core/apidocs/org/apache/struts2/dispatcher/StaticContentLoader.html">StaticContentLoader JavaDoc</a>.</p><h2 id="Plugins-ExtensionPoints">Extension Points</h2><p>Extension points allow a plugin to override a key class in the Struts framework with an alternate implementation. For example, a plugin could provide a new class to create Action classes or map requests to Actions.</p><p>The following extension points are available in Struts 2:</p><p><table border="1" summary=""><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.ActionFactory</td><td colspan="1" rowspan="1">struts.objectFactory.actionFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Dedicated factory used to create Actions, you can implement/extend existing one instead of defining new ObjectFactory</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.factory.InterceptorFactory</td><td colspan="1" rowspan="1">struts.objectFactory.interceptorFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Dedicated factory used to create Interceptors, you can implement/extend e xisting one instead of defining new ObjectFactory</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.factory.ConverterFactory</td><td colspan="1" rowspan="1">struts.objectFactory.converterFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Dedicated factory used to create TypeConverters, you can implement/extend existing one instead of defining new ObjectFactory</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.factory.ValidatorFactory</td><td colspan="1" rowspan="1">struts.objectFactory.validatorFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Dedicated factory used to create Validators, 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">Creates the Actio nProxy</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, + 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">DEPRECATED! Allows provide custom TextProvider for whole application - instead this endpoint use <b>struts.localeProviderFactory</b></td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.LocaleProviderFactory</td><td colspan="1" rowspan="1">struts.localeProviderFactory</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowsp an="1">Allows provide custom LocaleProvider 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" rowsp an="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.pro perties 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.parse r</td><td colspan="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 - implementation what kind of opening char to use (#, $, %, etc)</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.ExcludedPatternsChecker</td><td colspan="1" rowspan="1">struts.excludedPatterns.checker</td><td colspan="1" rowspan="1">request</td><td colspan="1" rowspan="1">Used across different interceptors to check if given string matches one of the excluded patterns</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.AcceptedPatternsChecker</td><td colspan="1" rowspan="1">struts.acceptedPatterns.checker</td><td colspan="1" rowspan="1">request</td><td colspan="1" rowspan="1">Used across different interceptors to check if given string matches one of the accepted patterns</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.util.ContentTypeMatcher</td><td colspan="1" rowspan="1">struts.contentTypeMatcher</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Matches content type of uploaded files (since 2.3.22)</td></tr></t able></p> + implementation what kind of opening char to use (#, $, %, etc)</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.ExcludedPatternsChecker</td><td colspan="1" rowspan="1">struts.excludedPatterns.checker</td><td colspan="1" rowspan="1">request</td><td colspan="1" rowspan="1">Used across different interceptors to check if given string matches one of the excluded patterns</td></tr><tr><td colspan="1" rowspan="1">com.opensymphony.xwork2.AcceptedPatternsChecker</td><td colspan="1" rowspan="1">struts.acceptedPatterns.checker</td><td colspan="1" rowspan="1">request</td><td colspan="1" rowspan="1">Used across different interceptors to check if given string matches one of the accepted patterns</td></tr><tr><td colspan="1" rowspan="1">org.apache.struts2.util.ContentTypeMatcher</td><td colspan="1" rowspan="1">struts.contentTypeMatcher</td><td colspan="1" rowspan="1">singleton</td><td colspan="1" rowspan="1">Matches content type of uploaded files (since 2.3.22)</td></tr><tr ><td colspan="1" >rowspan="1">com.opensymphony.xwork2.LocalizedTextProvider</td><td colspan="1" >rowspan="1">struts.localizedTextProvider</td><td colspan="1" >rowspan="1">singleton</td><td colspan="1" rowspan="1">Provides access to >resource bundles used to localise messages (since >2.5.11)</td></tr></table></p> <h2 id="Plugins-PluginExamples">Plugin Examples</h2><p>Let's look at two similar but different plugins bundled with the core distribution.</p><h3 id="Plugins-Sitemeshplugin">Sitemesh plugin</h3><p><a shape="rect" class="external-link" href="http://opensymphony.com/sitemesh/" rel="nofollow">SiteMesh</a> is a popular alternative to Tiles. SiteMesh provides a common look-and-feel to an application's pages by automatically wrapping a plain page with common elements like headers and menubars.</p><p>The <code>sitemesh-plugin.jar</code> contains several classes, a standard JAR manifest, and a plugin configuration file.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"> + META-INF/ + manifest.mf Modified: websites/production/struts/content/docs/s2-041.html ============================================================================== --- websites/production/struts/content/docs/s2-041.html (original) +++ websites/production/struts/content/docs/s2-041.html Sun Apr 23 18:10:14 2017 @@ -139,7 +139,7 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> - <div id="ConfluenceContent"><h2 id="S2-041-Summary">Summary</h2>Possible DoS attack when using <code>URLValidator</code><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Who should read this</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>All Struts 2 developers and users</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Impact of vulnerability</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Possible DoS attack when using URLValidator</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Maximum security rating</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Low</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Recommendation</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Upgrade to<span> </span><a shape="rect" href="version-notes-2329.html">Struts 2.3.29</a> or <a shape="rect" href="version-notes-2 51.html">Struts 2.5.1</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Affected Software</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Struts 2.3.20 - Struts <span style="color: rgb(23,35,59);">Struts 2.3.28.1 and Struts 2.5</span></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Reporter</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>ASAI Ken tc535mr2 at gmail dot com</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>CVE Identifier</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>CVE-2016-4465</p></td></tr></tbody></table></div><h2 id="S2-041-Problem">Problem</h2><p>If an application allows enter na URL field in a form and built-in <code>URLValidator</code> is used, it is possible to prepare a special URL which will be used to overload server process when performing validation of the URL.</p><h2 id="S2-041-Solution">Solution</h2><p>Upgrade to Apache Struts version 2.3.29 or 2.5 .1.</p><h2 id="S2-041-Backwardcompatibility">Backward compatibility</h2><p>No backward incompatibility issues are expected.</p><h2 id="S2-041-Workaround">Workaround</h2><p>You can redefine RegEx used by <code>URLValidator</code> as below:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> + <div id="ConfluenceContent"><h2 id="S2-041-Summary">Summary</h2>Possible DoS attack when using <code>URLValidator</code><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Who should read this</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>All Struts 2 developers and users</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Impact of vulnerability</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Possible DoS attack when using URLValidator</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Maximum security rating</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Low</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Recommendation</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Upgrade to<span> </span><a shape="rect" href="version-notes-2329.html">Struts 2.3.29</a> or <a shape="rect" href="version-notes-2 51.html">Struts 2.5.1</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Affected Software</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Struts 2.3.20 -<span style="color: rgb(23,35,59);"> 2.3.28.1 and Struts 2.5</span></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Reporter</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>ASAI Ken tc535mr2 at gmail dot com</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>CVE Identifier</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>CVE-2016-4465</p></td></tr></tbody></table></div><h2 id="S2-041-Problem">Problem</h2><p>If an application allows enter na URL field in a form and built-in <code>URLValidator</code> is used, it is possible to prepare a special URL which will be used to overload server process when performing validation of the URL.</p><h2 id="S2-041-Solution">Solution</h2><p>Upgrade to Apache Struts version 2.3.29 or 2.5.1.</p><h2 id= "S2-041-Backwardcompatibility">Backward compatibility</h2><p>No backward incompatibility issues are expected.</p><h2 id="S2-041-Workaround">Workaround</h2><p>You can redefine RegEx used by <code>URLValidator</code> as below:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"><validator type="url"> <param name="fieldName">myHomePage</param> <param name="urlRegex">^(https?|ftp):\\/\\/(([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+(:([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+)?@)?(#?)((([a-z0-9]\\.|[a-z0-9][a-z0-9-]*[a-z0-9]\\.)*[a-z][a-z0-9-]*[a-z0-9]|((\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5]))(:\\d+)?)(((\\/{0,1}([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)*(\\?([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)?)?)?(#([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)?$</param> Modified: websites/production/struts/content/docs/sitegraph-plugin.html ============================================================================== --- websites/production/struts/content/docs/sitegraph-plugin.html (original) +++ websites/production/struts/content/docs/sitegraph-plugin.html Sun Apr 23 18:10:14 2017 @@ -139,7 +139,7 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> - <div id="ConfluenceContent"><p>The SiteGraph plugingenerates graphical diagrams representing the flow of your web application.</p><p>SiteGraph works by parsing your configuration files, Action classes, and view files (JSP, Velocity, and FreeMarker), and displaying a visual map.</p><p>Additional information can be found in the JavaDocs:</p><p></p><p> + <div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This plugin got marked as deprecated since Struts 2.5.11!</p></div></div><p> </p><p>The SiteGraph plugingenerates graphical diagrams representing the flow of your web application.</p><p>SiteGraph works by parsing your configuration files, Action classes, and view files (JSP, Velocity, and FreeMarker), and displaying a visual map.</p><p>Additional information can be found in the JavaDocs:</p><p></p><p> SiteGraph is a tool that renders out GraphViz-generated images depicting your Struts-powered web application's flow. SiteGraph requires GraphViz be installed and that the "dot" executable be in your command path. You can find GraphViz @@ -164,7 +164,7 @@ If you wish to use SiteGraph through its you can do that as well. All you need to do is create a new SiteGraph instance, optionally specify a Writer to output the dot content to, and then call #prepare(). -</p><p>The command line version of SiteGraph does exactly this (except for overriding the Writer):</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</p>The command line version of SiteGraph does exactly this (except for overriding the Writer):<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ SiteGraph siteGraph = new SiteGraph(configDir, views, output, namespace); siteGraph.prepare(); Modified: websites/production/struts/content/docs/struts-23-to-25-migration.html ============================================================================== --- websites/production/struts/content/docs/struts-23-to-25-migration.html (original) +++ websites/production/struts/content/docs/struts-23-to-25-migration.html Sun Apr 23 18:10:14 2017 @@ -140,13 +140,13 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1490686616575 {padding: 0px;} -div.rbtoc1490686616575 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1490686616575 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1492970356602 {padding: 0px;} +div.rbtoc1492970356602 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1492970356602 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1490686616575"> +/*]]>*/</style></p><div class="toc-macro rbtoc1492970356602"> <ul class="toc-indentation"><li><a shape="rect" href="#Struts2.3to2.5migration-Dependencies">Dependencies</a></li><li><a shape="rect" href="#Struts2.3to2.5migration-StrutsPrepareAndExecuteFilter">StrutsPrepareAndExecuteFilter</a></li><li><a shape="rect" href="#Struts2.3to2.5migration-DTD">DTD</a></li><li><a shape="rect" href="#Struts2.3to2.5migration-Tagsattributes">Tags attributes</a></li><li><a shape="rect" href="#Struts2.3to2.5migration-Divtag">Div tag</a></li><li><a shape="rect" href="#Struts2.3to2.5migration-Fieldnames">Field names</a></li><li><a shape="rect" href="#Struts2.3to2.5migration-Tiles">Tiles</a></li><li><a shape="rect" href="#Struts2.3to2.5migration-Temp/WorkdirectoryofApplicationServer/ServletContainer">Temp/Work directory of ApplicationServer/ServletContainer</a></li></ul> -</div><h3 id="Struts2.3to2.5migration-Dependencies">Dependencies</h3><p>Update Struts dependencies to 2.5.<br clear="none"><br clear="none">Remove the following plugin dependencies because they were dropped and aren't supported anymore.</p><ul><li>Dojo Plugin</li><li>Codebehind Plugin</li><li>JSF Plugin</li><li>Struts1 Plugin</li></ul><h3 id="Struts2.3to2.5migration-StrutsPrepareAndExecuteFilter">StrutsPrepareAndExecuteFilter</h3><p>The <code>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</code> was moved to <code>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</code>.<br clear="none"><br clear="none">In web.xml replace this:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div><h3 id="Struts2.3to2.5migration-Dependencies">Dependencies</h3><p>Update Struts dependencies to 2.5.<br clear="none"><br clear="none">Remove the following plugin dependencies because they were dropped and aren't supported anymore.</p><ul><li>Dojo Plugin</li><li>Codebehind Plugin</li><li>JSF Plugin</li><li>Struts1 Plugin</li></ul><p>Please be aware that the framework is using Log4j2 now as a main logging layer, the existing old logging layer is deprecated and will be removed soon. Log4j2 supports many different logging implementations, please check documentations for more details.</p><h3 id="Struts2.3to2.5migration-StrutsPrepareAndExecuteFilter">StrutsPrepareAndExecuteFilter</h3><p>The <code>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</code> was moved to <code>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</code>.<br clear="none"><br clear="none">In web.xml replace this:</p><div class="code panel pdl" style="border-width: 1px;" ><div class="codeContent panelContent pdl"> <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"><filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> Modified: websites/production/struts/content/docs/struts-defaultxml.html ============================================================================== --- websites/production/struts/content/docs/struts-defaultxml.html (original) +++ websites/production/struts/content/docs/struts-defaultxml.html Sun Apr 23 18:10:14 2017 @@ -273,8 +273,10 @@ under the License. <bean type="com.opensymphony.xwork2.conversion.impl.NumberConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.NumberConverter" scope="singleton"/> <bean type="com.opensymphony.xwork2.conversion.impl.StringConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.StringConverter" scope="singleton"/> - <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" scope="prototype" /> - <bean type="com.opensymphony.xwork2.LocaleProvider" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProvider" scope="singleton" /> + <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" scope="singleton" /> + <bean type="com.opensymphony.xwork2.LocalizedTextProvider" name="struts" class="com.opensymphony.xwork2.util.DefaultLocalizedTextProvider" scope="singleton" /> + <bean type="com.opensymphony.xwork2.TextProviderFactory" name="struts" class="com.opensymphony.xwork2.StrutsTextProviderFactory" scope="singleton" /> + <bean type="com.opensymphony.xwork2.LocaleProviderFactory" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProviderFactory" scope="singleton" /> <bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/> <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" class="org.apache.struts2.views.util.DefaultUrlHelper"/> @@ -283,7 +285,6 @@ under the License. <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider" /> <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory" /> - <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" /> <bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler" /> <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager" /> Modified: websites/production/struts/content/docs/struts-next.html ============================================================================== --- websites/production/struts/content/docs/struts-next.html (original) +++ websites/production/struts/content/docs/struts-next.html Sun Apr 23 18:10:14 2017 @@ -125,15 +125,15 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> - <div id="ConfluenceContent"><h3 id="StrutsNext-/*<![CDATA[*/div.rbtoc1488974254023{padding:0px;}div.rbtoc1488974254023ul{list-style:disc;margin-left:0px;}div.rbtoc1488974254023li{margin-left:0px;padding-left:0px;}/*]]>*/#StrutsNext-Whatshouldbeimproved/changed#StrutsNext-Whatshouldbeimprove"><style type="text/css">/*<![CDATA[*/ -div.rbtoc1488974254023 {padding: 0px;} -div.rbtoc1488974254023 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1488974254023 li {margin-left: 0px;padding-left: 0px;} + <div id="ConfluenceContent"><h3 id="StrutsNext-/*<![CDATA[*/div.rbtoc1492970343672{padding:0px;}div.rbtoc1492970343672ul{list-style:disc;margin-left:0px;}div.rbtoc1492970343672li{margin-left:0px;padding-left:0px;}/*]]>*/#StrutsNext-Whatshouldbeimproved/changed#StrutsNext-Whatshouldbeimprove"><style type="text/css">/*<![CDATA[*/ +div.rbtoc1492970343672 {padding: 0px;} +div.rbtoc1492970343672 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1492970343672 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></h3><div class="toc-macro rbtoc1488974254023"> +/*]]>*/</style></h3><div class="toc-macro rbtoc1492970343672"> <ul class="toc-indentation"><li><a shape="rect" href="#StrutsNext-"></a></li></ul> <ul><li><a shape="rect" href="#StrutsNext-Whatshouldbeimproved/changed">What should be improved / changed</a></li><li><a shape="rect" href="#StrutsNext-DevelopmentplanofStruts3">Development plan of Struts 3</a> -<ul class="toc-indentation"><li><a shape="rect" href="#StrutsNext-M1(akaStruts2.5)">M1 (aka Struts 2.5)</a></li><li><a shape="rect" href="#StrutsNext-M2(alphaStruts3)">M2 (alpha Struts 3)</a></li><li><a shape="rect" href="#StrutsNext-M3(alphaStruts3)">M3 (alpha Struts 3)</a></li><li><a shape="rect" href="#StrutsNext-M4(beta1Struts3)">M4 (beta 1 Struts 3)</a></li></ul> +<ul class="toc-indentation"><li><a shape="rect" href="#StrutsNext-M1(akaStruts2.5)">M1 (aka Struts 2.5)</a></li><li><a shape="rect" href="#StrutsNext-M2(akaStruts2.6)">M2 (aka Struts 2.6)</a></li><li><a shape="rect" href="#StrutsNext-M3(beta1Struts3)">M3 (beta 1 Struts 3)</a></li><li><a shape="rect" href="#StrutsNext-M4(beta2Struts3)">M4 (beta 2 Struts 3)</a></li></ul> </li><li><a shape="rect" href="#StrutsNext-Cleanupwebsite">Cleanup website</a></li><li><a shape="rect" href="#StrutsNext-Undiscussedideas">Undiscussed ideas</a></li></ul> </div><h1 id="StrutsNext-Whatshouldbeimproved/changed">What should be improved / changed</h1><p><a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW/fixforversion/12319158">Issues</a> connected with the new version <br clear="none"> <a shape="rect" class="external-link" href="https://builds.apache.org/view/S-Z/view/Struts/job/Struts3/">Build</a> of the latest version</p><ul><li>Use Git instead Svn <img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></li><li>Switch to Java 7 <img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></li><li>Update "internal" injection to use current Guice version<ul><li>Consider usage of <a shape="rect" class ="external-link" href="http://onami.apache.org/">http://onami.apache.org/</a></li></ul></li><li>Refactorings for further extensibility based on questions on the list, on CodeRanch, and Stack Overflow<ul><li>JR plugin refactoring. Allow compiled reports as classpath resources.</li></ul></li><li>Refactor conversion of primitives (and wrappers) in XWork</li><li>Switch to <a shape="rect" class="external-link" href="http://commons.apache.org/ognl">OGNL 4.0</a>.</li><li>Consider renaming packages to org.apache.struts3</li><li>Remove deprecated Plugins <img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"><ul><li>Codebehind</li><li>Dojo</li><li>Struts1 ?</li></ul></li><li>Normalize property name camel-casing (foo.bar.BazPlugh to foo.bar.bazPlugh)</li><li>Check possible usage of Tiles Auto Tag (<a shape="rect" class="external-link" hr ef="http://tiles.apache.org/tiles-autotag/">http://tiles.apache.org/tiles-autotag/</a>) instead of Struts Annotations</li><li>Convention plugin should be the "normal" way of using Struts</li><li>Plugin to map websocket requests to Struts actions</li><li>API to customize property finding via arbitrary request parameter names ("a" -> getFoo())<ul><li>Happily breaks apart the 1:1 relationship between property paths and HTTP parameter names</li><li>Will be useful for obfuscation (doesn't expose java model)</li><li>Can be used to shorten request payload (smaller names)</li><li>Can be taken advantage by HDIV</li></ul></li><li>Themes cleanup<ul><li>Support HTML 5 features and Single Page Application development paradigm</li><li>Must output valid markup</li><li>Should be compatible with bootstrap, bootstrap validator, and other major UI platforms</li></ul></li></ul><h1 id="StrutsNext-DevelopmentplanofStruts3">Development plan of Struts 3</h1><h2 id="StrutsNext-M1(akaStruts2.5)">M1 (aka S truts 2.5)</h2><ul class="inline-task-list" data-inline-tasks-content-id="27832363"><li class="checked" data-inline-task-id="3">Request Git repo from INFRA</li><li class="checked" data-inline-task-id="4"><span style="line-height: 1.4285715;">Import project</span></li><li class="checked" data-inline-task-id="31">Remove deprecated plugins - moved to <a shape="rect" class="external-link" href="https://git1-us-west.apache.org/repos/asf?p=struts-archive.git">struts-archive.git </a>repo<ul class="inline-task-list" data-inline-tasks-content-id="27832363"><li class="checked" data-inline-task-id="16">we need place for deprecated stuff (to move the source code to) - new project "struts-archive"</li><li class="checked" data-inline-task-id="17">drop support for Struts 1 (remove plugin)</li><li class="checked" data-inline-task-id="18">dojo plugin</li><li class="checked" data-inline-task-id="19">codebehind plugin</li><li class="checked" data-inline-task-id="20">jsf plugin</li></ul> @@ -141,9 +141,9 @@ div.rbtoc1488974254023 li {margin-left: </li><li class="checked" data-inline-task-id="38">Upgrade spring plugins spring version to 4.x </li><li class="checked" data-inline-task-id="48">Move struts2 blank, jboss-blank and mailreader app to struts2-examples</li><li class="checked" data-inline-task-id="35">Switch to strict DMI by default - allow only defined methods to be accessible via DMI - user can always change that list</li><li class="checked" data-inline-task-id="49">prepare second beta</li><li data-inline-task-id="50">drop support for "top" object - this can be painful, users are using so migration path is needed</li><li data-inline-task-id="40">Cleanup website<ul class="inline-task-list" data-inline-tasks-content-id="27832363"><li data-inline-task-id="8">new user guide totally developed out of Confluence - people will be able to contribute to it via GitHub</li><li data-inline-task-id="9">Confluence (wiki) used only to explain more detailed given aspect of the framework (ie.: how to implement your own converter i n details)</li><li class="checked" data-inline-task-id="10">keep just one version of the doc (no more release/2.3.x, release/2.2.x and so on - Google indexes everything and people are confused)</li></ul> -</li><li data-inline-task-id="51">prepare the last beta</li></ul> +</li><li class="checked" data-inline-task-id="51">prepare the last beta</li></ul> -<h2 id="StrutsNext-M2(alphaStruts3)">M2 (alpha Struts 3)</h2><ol><li>Finish merging XWork code base (rename packages)</li><li>Rename Struts 2 packages to org.apache.struts3</li><li>Switch to OGNL 4<ol><li>we must release it first</li><li>also we need better API interfaces to allow integrate Struts with other EL engines, ie.: MVEL - right now the whole conversion layer is hardly tied with OGNL</li></ol></li><li>Switch to Servlet Specification 3.0<ol><li>drop <span style="color: rgb(34,34,34);">embedded JSP plugin</span></li></ol></li></ol><h2 id="StrutsNext-M3(alphaStruts3)">M3 (alpha Struts 3)</h2><ol><li>Divide core into api and spi</li></ol><h2 id="StrutsNext-M4(beta1Struts3)">M4 (beta 1 Struts 3)</h2><ol><li>move plugins to separated project<ol><li>disconnect plugins release cycle from core release</li></ol></li></ol><h1 id="StrutsNext-Cleanupwebsite">Cleanup website</h1><p>There should be just one project website - Apache Struts. Right now there is the main website - Apache Struts project, subsite Apache Struts 1 and another subsite Apache Struts 2. After announcing EOL of Struts 1, we basically supporting just one version or rather branch - Apache Struts 2 which should be at some point converted just into Apache Struts (version 2.5, version 3.0, version 3.1, etc.).</p><p>With that in mind we should have just one website to manage the project.</p><h1 id="StrutsNext-Undiscussedideas">Undiscussed ideas</h1><ul><li>JSR 371 support (<a shape="rect" class="external-link" href="https://jcp.org/en/jsr/detail?id=371" rel="nofollow">https://jcp.org/en/jsr/detail?id=371</a>)</li><li>Better support for modern webframeworks like AngularJS (@grobmeier)</li><li>Make use of slf4j and probably log4j2 (@grobmeier) - support for slf4j is already there, thanks to Johannes, check <a shape="rect" href="logging.html">Logging</a></li><li>Provide alternatives to java property file translations (@grobmeier)</li><li>Replace css and xhtml theme with an new html5 theme. (@jogep) </li><li>Extract XML configuration to dedicated plugin - XWork will provide only configuration via code, then user can decide which configuration to use - code, XML, convention, DB?</li><li>Should plugins move out of the Struts release cycle so they can independently released? (@pbenedict)</li><li>Turn all request and response processing into interceptors (perhaps introduce a "system stack" to complement a "user stack" to simplify configuration) (@pbenedict)</li></ul></div> +<h2 id="StrutsNext-M2(akaStruts2.6)">M2 (aka Struts 2.6)</h2><ol><li><p>Servlets 2.5, JSP 2.1, Java 7</p></li><li><code>struts-api</code> module</li><li>Drop support for internal logging layer and use Log4j2 only</li></ol><h2 id="StrutsNext-M3(beta1Struts3)">M3 (beta 1 Struts 3)</h2><ol><li>Servlets 3.0, JSP 2.2, Java 8</li><li>Finish merging XWork code base (rename packages)</li><li>Rename Struts 2 packages to org.apache.struts3</li><li>Switch to OGNL 4<ol><li>we must release it first</li><li>also we need better API interfaces to allow integrate Struts with other EL engines, ie.: MVEL - right now the whole conversion layer is hardly tied with OGNL</li></ol></li><li>Switch to Servlet Specification 3.0<ol><li>drop <span style="color: rgb(34,34,34);">embedded JSP plugin</span></li></ol></li></ol><h2 id="StrutsNext-M4(beta2Struts3)">M4 (beta 2 Struts 3)</h2><ol><li>move plugins to separated project (need to be discussed)<ol><li>disconnect plugins release cycle from core relea se</li></ol></li></ol><h1 id="StrutsNext-Cleanupwebsite">Cleanup website</h1><p>There should be just one project website - Apache Struts. Right now there is the main website - Apache Struts project, subsite Apache Struts 1 and another subsite Apache Struts 2. After announcing EOL of Struts 1, we basically supporting just one version or rather branch - Apache Struts 2 which should be at some point converted just into Apache Struts (version 2.5, version 3.0, version 3.1, etc.).</p><p>With that in mind we should have just one website to manage the project.</p><h1 id="StrutsNext-Undiscussedideas">Undiscussed ideas</h1><ul><li>JSR 371 support (<a shape="rect" class="external-link" href="https://jcp.org/en/jsr/detail?id=371" rel="nofollow">https://jcp.org/en/jsr/detail?id=371</a>)</li><li>Better support for modern webframeworks like AngularJS (@grobmeier)</li><li>Make use of slf4j and probably log4j2 (@grobmeier) - support for slf4j is already there, thanks to Johannes, check <a shape="re ct" href="logging.html">Logging</a></li><li>Provide alternatives to java property file translations (@grobmeier)</li><li>Replace css and xhtml theme with an new html5 theme. (@jogep)</li><li>Extract XML configuration to dedicated plugin - XWork will provide only configuration via code, then user can decide which configuration to use - code, XML, convention, DB?</li><li>Should plugins move out of the Struts release cycle so they can independently released? (@pbenedict)</li><li>Turn all request and response processing into interceptors (perhaps introduce a "system stack" to complement a "user stack" to simplify configuration) (@pbenedict)</li></ul></div> </div> Modified: websites/production/struts/content/docs/tiles-plugin.html ============================================================================== --- websites/production/struts/content/docs/tiles-plugin.html (original) +++ websites/production/struts/content/docs/tiles-plugin.html Sun Apr 23 18:10:14 2017 @@ -140,11 +140,11 @@ under the License. <div class="pagecontent"> <div class="wiki-content"> <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1488973982587 {padding: 0px;} -div.rbtoc1488973982587 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1488973982587 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1492970273720 {padding: 0px;} +div.rbtoc1492970273720 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1492970273720 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1488973982587"> +/*]]>*/</style></p><div class="toc-macro rbtoc1492970273720"> <ul class="toc-indentation"><li><a shape="rect" href="#TilesPlugin-Features">Features</a></li><li><a shape="rect" href="#TilesPlugin-Usage">Usage</a> <ul class="toc-indentation"><li><a shape="rect" href="#TilesPlugin-AccessingStrutsattributes">Accessing Struts attributes</a></li><li><a shape="rect" href="#TilesPlugin-I18N">I18N</a></li></ul> </li><li><a shape="rect" href="#TilesPlugin-Example">Example</a></li><li><a shape="rect" href="#TilesPlugin-Settings">Settings</a></li><li><a shape="rect" href="#TilesPlugin-Installation">Installation</a></li></ul>