This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/struts-site.git


The following commit(s) were added to refs/heads/asf-staging by this push:
     new a5c1e9b931 Updates stage by Jenkins
a5c1e9b931 is described below

commit a5c1e9b93167c7dd52f8724ff61cfc8faafdeeee
Author: jenkins <[email protected]>
AuthorDate: Sat Nov 7 17:55:00 2026 +0000

    Updates stage by Jenkins
---
 content/core-developers/coep-interceptor.html      | 29 +++++++----
 content/core-developers/coop-interceptor.html      | 29 +++++++----
 .../fetch-metadata-interceptor.html                | 56 +++++++++++++++++++---
 content/core-developers/interceptors.html          |  4 ++
 content/core-developers/struts-default-xml.html    |  4 ++
 content/getting-started/coding-actions.html        | 10 +++-
 content/plugins/rest/index.html                    |  3 +-
 7 files changed, 106 insertions(+), 29 deletions(-)

diff --git a/content/core-developers/coep-interceptor.html 
b/content/core-developers/coep-interceptor.html
index f57ebac0f4..a5aa77cd94 100644
--- a/content/core-developers/coep-interceptor.html
+++ b/content/core-developers/coep-interceptor.html
@@ -171,23 +171,32 @@ by another document with COEP. All descendents of a 
document with COEP will also
 <h2 id="parameters">Parameters</h2>
 
 <ul>
-  <li><code class="language-plaintext highlighter-rouge">exemptedPaths</code> 
- Set of opt out endpoints that are meant to serve cross-site traffic. Paths 
should contain leading
- slashes and must be relative. This field is empty by default.</li>
+  <li><code class="language-plaintext highlighter-rouge">exemptedPaths</code> 
- Comma-separated list of request paths the COEP header is not sent on. Each 
entry is compared exactly
+with the path of the request inside the web application: the servlet path plus 
the path info, without the context path
+and without the query string. Include the action extension, e.g. <code 
class="language-plaintext highlighter-rouge">/embed/widget.action</code>; if an 
action is reachable
+with several extensions, list each form. This field is empty by default.</li>
   <li><code class="language-plaintext highlighter-rouge">enforcingMode</code> 
- Boolean variable allowing the user to let COEP operate in <code 
class="language-plaintext highlighter-rouge">enforcing</code>, which blocks 
both resource 
  and reports violations, or <code class="language-plaintext 
highlighter-rouge">report-only</code> mode, which only reports violations. 
Default value for field is <code class="language-plaintext 
highlighter-rouge">false</code>.</li>
   <li><code class="language-plaintext highlighter-rouge">disabled</code> - 
Boolean variable disabling and enabling COEP. Default value for field is <code 
class="language-plaintext highlighter-rouge">false</code>.</li>
 </ul>
 
+<p class="alert alert-warning">Before Struts 7.5.0 and 6.13.0 <code 
class="language-plaintext highlighter-rouge">exemptedPaths</code> was compared 
with the context path of the application, so an entry
+naming a request path had no effect and an entry equal to the context path 
disabled the interceptor for the whole
+application. Use <code class="language-plaintext 
highlighter-rouge">disabled</code> if you relied on the latter.</p>
+
 <h2 id="examples">Examples</h2>
 
-<div class="language-xml highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nt">&lt;action</span>  <span 
class="na">name=</span><span class="s">"someAction"</span> <span 
class="na">class=</span><span class="s">"com.examples.SomeAction"</span><span 
class="nt">&gt;</span>
-    <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"defaultStack"</span><span 
class="nt">&gt;</span>
-        <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"coep.exemptedPaths"</span><span 
class="nt">&gt;</span>/path1,/path2,/path3<span class="nt">&lt;/param&gt;</span>
-        <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"coep.enforcingMode"</span><span class="nt">&gt;</span>false<span 
class="nt">&lt;/param&gt;</span>
-        <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"coep.disabled"</span><span class="nt">&gt;</span>false<span 
class="nt">&lt;/param&gt;</span>
-    <span class="nt">&lt;/interceptor-ref&gt;</span>
-    <span class="nt">&lt;result</span> <span class="na">name=</span><span 
class="s">"success"</span><span class="nt">&gt;</span>good_result.ftl<span 
class="nt">&lt;/result&gt;</span>
-<span class="nt">&lt;/action&gt;</span>
+<div class="language-xml highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nt">&lt;package</span> <span 
class="na">name=</span><span class="s">"default"</span> <span 
class="na">extends=</span><span class="s">"struts-default"</span><span 
class="nt">&gt;</span>
+    <span class="nt">&lt;interceptors&gt;</span>
+        <span class="nt">&lt;interceptor-stack</span> <span 
class="na">name=</span><span class="s">"appDefaultStack"</span><span 
class="nt">&gt;</span>
+            <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"defaultStack"</span><span 
class="nt">&gt;</span>
+                <span class="nt">&lt;param</span> <span 
class="na">name=</span><span class="s">"coep.exemptedPaths"</span><span 
class="nt">&gt;</span>/embed/widget.action<span class="nt">&lt;/param&gt;</span>
+                <span class="nt">&lt;param</span> <span 
class="na">name=</span><span class="s">"coep.enforcingMode"</span><span 
class="nt">&gt;</span>false<span class="nt">&lt;/param&gt;</span>
+            <span class="nt">&lt;/interceptor-ref&gt;</span>
+        <span class="nt">&lt;/interceptor-stack&gt;</span>
+    <span class="nt">&lt;/interceptors&gt;</span>
+    <span class="nt">&lt;default-interceptor-ref</span> <span 
class="na">name=</span><span class="s">"appDefaultStack"</span><span 
class="nt">/&gt;</span>
+<span class="nt">&lt;/package&gt;</span>
 </code></pre></div></div>
 
   </section>
diff --git a/content/core-developers/coop-interceptor.html 
b/content/core-developers/coop-interceptor.html
index da27218051..a8aa365993 100644
--- a/content/core-developers/coop-interceptor.html
+++ b/content/core-developers/coop-interceptor.html
@@ -187,21 +187,32 @@ to allow popups they open to be in their browsing context 
group (unless the popu
 <h2 id="parameters">Parameters</h2>
 
 <ul>
-  <li><code class="language-plaintext highlighter-rouge">exemptedPaths</code> 
- Set of opt out endpoints that are meant to serve cross-site traffic. Paths 
should contain leading 
-slashes and must be relative. This field is empty by default.</li>
+  <li><code class="language-plaintext highlighter-rouge">exemptedPaths</code> 
- Comma-separated list of request paths the COOP header is not sent on. Each 
entry is compared exactly
+with the path of the request inside the web application: the servlet path plus 
the path info, without the context path
+and without the query string. Include the action extension, e.g. <code 
class="language-plaintext highlighter-rouge">/popup/callback.action</code>; if 
an action is reachable
+with several extensions, list each form. This field is empty by default.</li>
   <li><code class="language-plaintext highlighter-rouge">mode</code> - The 
policy mode COOP should follow. Available modes are <code 
class="language-plaintext highlighter-rouge">same-origin</code>, <code 
class="language-plaintext highlighter-rouge">same-origin-allow-popups</code>, 
 <code class="language-plaintext highlighter-rouge">unsafe-none</code>. Default 
mode is <code class="language-plaintext 
highlighter-rouge">same-origin</code>.</li>
+  <li><code class="language-plaintext highlighter-rouge">disabled</code> - Set 
to <code class="language-plaintext highlighter-rouge">true</code> to skip the 
interceptor for an action. Default value is <code class="language-plaintext 
highlighter-rouge">false</code>.</li>
 </ul>
 
+<p class="alert alert-warning">Before Struts 7.5.0 and 6.13.0 <code 
class="language-plaintext highlighter-rouge">exemptedPaths</code> was compared 
with the context path of the application, so an entry
+naming a request path had no effect and an entry equal to the context path 
disabled the interceptor for the whole
+application. Use <code class="language-plaintext 
highlighter-rouge">disabled</code> if you relied on the latter.</p>
+
 <h2 id="examples">Examples</h2>
 
-<div class="language-xml highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nt">&lt;action</span>  <span 
class="na">name=</span><span class="s">"someAction"</span> <span 
class="na">class=</span><span class="s">"com.examples.SomeAction"</span><span 
class="nt">&gt;</span>
-    <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"defaultStack"</span><span 
class="nt">&gt;</span>
-        <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"coop.exemptedPaths"</span><span 
class="nt">&gt;</span>/path1,/path2,/path3<span class="nt">&lt;/param&gt;</span>
-        <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"coop.mode"</span><span class="nt">&gt;</span>same-origin<span 
class="nt">&lt;/param&gt;</span>
-    <span class="nt">&lt;/interceptor-ref&gt;</span>
-    <span class="nt">&lt;result</span> <span class="na">name=</span><span 
class="s">"success"</span><span class="nt">&gt;</span>good_result.ftl<span 
class="nt">&lt;/result&gt;</span>
-<span class="nt">&lt;/action&gt;</span>
+<div class="language-xml highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nt">&lt;package</span> <span 
class="na">name=</span><span class="s">"default"</span> <span 
class="na">extends=</span><span class="s">"struts-default"</span><span 
class="nt">&gt;</span>
+    <span class="nt">&lt;interceptors&gt;</span>
+        <span class="nt">&lt;interceptor-stack</span> <span 
class="na">name=</span><span class="s">"appDefaultStack"</span><span 
class="nt">&gt;</span>
+            <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"defaultStack"</span><span 
class="nt">&gt;</span>
+                <span class="nt">&lt;param</span> <span 
class="na">name=</span><span class="s">"coop.exemptedPaths"</span><span 
class="nt">&gt;</span>/popup/callback.action<span 
class="nt">&lt;/param&gt;</span>
+                <span class="nt">&lt;param</span> <span 
class="na">name=</span><span class="s">"coop.mode"</span><span 
class="nt">&gt;</span>same-origin<span class="nt">&lt;/param&gt;</span>
+            <span class="nt">&lt;/interceptor-ref&gt;</span>
+        <span class="nt">&lt;/interceptor-stack&gt;</span>
+    <span class="nt">&lt;/interceptors&gt;</span>
+    <span class="nt">&lt;default-interceptor-ref</span> <span 
class="na">name=</span><span class="s">"appDefaultStack"</span><span 
class="nt">/&gt;</span>
+<span class="nt">&lt;/package&gt;</span>
 </code></pre></div></div>
 
   </section>
diff --git a/content/core-developers/fetch-metadata-interceptor.html 
b/content/core-developers/fetch-metadata-interceptor.html
index 2c3d0fdbe4..6570b3d519 100644
--- a/content/core-developers/fetch-metadata-interceptor.html
+++ b/content/core-developers/fetch-metadata-interceptor.html
@@ -160,32 +160,74 @@
 information leaks. Uses a default Resource Isolation Policy to 
programmatically reject cross-origin requests.</p>
 
 <p>A Resource Isolation Policy is a strong defense in-depth mechanism that 
prevents the resources on a server from being 
-requested by external websites. This policy can be enabled either for all 
endpoints of the application and  endpoints 
+requested by external websites. The interceptor is part of the <code 
class="language-plaintext highlighter-rouge">defaultStack</code> and is enabled 
by default; endpoints
 that are meant to be loaded in a cross-site context can be exempted from the 
policy.</p>
 
 <p>The browser provides information about the context of an HTTP request in a 
set of <code class="language-plaintext highlighter-rouge">Sec-Fetch-*</code> 
headers. This allows 
 the server processing the request to make decisions on whether the request 
should be accepted or rejected based 
 on the preferred resource isolation policy. Struts provides a default 
<em>Resource Isolation Policy</em> that rejects 
-<em>cross-origin</em> requests that aren’t top level navigations.</p>
+<em>cross-site</em> requests that aren’t simple top level navigations:</p>
 
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>Sec-Fetch-Site == 'cross-site' AND (Sec-Fetch-Mode != 
'navigate'/'nested-navigate' OR method NOT IN [GET, HEAD])
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>Sec-Fetch-Site == 'cross-site' AND (Sec-Fetch-Mode != 
'navigate' OR method NOT IN [GET, HEAD] OR Sec-Fetch-Dest IN [object, embed])
 </code></pre></div></div>
 
+<p>Requests without a <code class="language-plaintext 
highlighter-rouge">Sec-Fetch-Site</code> header and <code 
class="language-plaintext highlighter-rouge">same-origin</code>, <code 
class="language-plaintext highlighter-rouge">same-site</code> and <code 
class="language-plaintext highlighter-rouge">none</code> requests are always 
accepted.</p>
+
 <p>Refer to <a 
href="https://web.dev/fetch-metadata/#implementing-a-resource-isolation-policy";>Implementing
 a Resource Isolation Policy</a> 
 for further information on implementing effective Resource Isolation Policies. 
Fetch Metadata is supported in all major browsers.</p>
 
+<h2 id="cross-site-form-posts">Cross-site form posts</h2>
+
+<p class="alert alert-info">Since Struts 7.5.0 and 6.13.0 cross-site <code 
class="language-plaintext highlighter-rouge">POST</code> navigations are 
rejected with <code class="language-plaintext highlighter-rouge">403</code>.</p>
+
+<p>Flows where another site posts the user’s browser back to your application 
are affected, for example:</p>
+
+<ul>
+  <li>a SAML assertion consumer service or an OpenID Connect <code 
class="language-plaintext highlighter-rouge">form_post</code> response,</li>
+  <li>a payment gateway returning the user to the shop.</li>
+</ul>
+
+<p>Exempt the endpoints receiving these requests, either by path with <code 
class="language-plaintext highlighter-rouge">exemptedPaths</code> or per action 
with the <code class="language-plaintext highlighter-rouge">disabled</code>
+parameter, see the examples below.</p>
+
 <h2 id="parameters">Parameters</h2>
 
 <ul>
-  <li><code class="language-plaintext highlighter-rouge">exemptedPaths</code> 
- Set of opt out endpoints that are meant to serve cross-site traffic. Paths 
should contain leading 
- slashes and must be relative. This field is empty by default.</li>
+  <li><code class="language-plaintext highlighter-rouge">exemptedPaths</code> 
- Comma-separated list of request paths the policy is not applied to. Each 
entry is compared exactly
+with the path of the request inside the web application: the servlet path plus 
the path info, without the context path
+and without the query string. Include the action extension, e.g. <code 
class="language-plaintext highlighter-rouge">/saml/acs.action</code>; if an 
action is reachable with
+several extensions, list each form. This field is empty by default.</li>
+  <li><code class="language-plaintext highlighter-rouge">disabled</code> - Set 
to <code class="language-plaintext highlighter-rouge">true</code> to skip the 
interceptor for an action. Default value is <code class="language-plaintext 
highlighter-rouge">false</code>.</li>
 </ul>
 
+<p class="alert alert-warning">Before Struts 7.5.0 and 6.13.0 <code 
class="language-plaintext highlighter-rouge">exemptedPaths</code> was compared 
with the context path of the application, so an entry
+naming a request path had no effect and an entry equal to the context path 
disabled the interceptor for the whole
+application. Use <code class="language-plaintext 
highlighter-rouge">disabled</code> if you relied on the latter.</p>
+
+<p>When <code class="language-plaintext 
highlighter-rouge">struts.mapper.action.prefix.enabled</code> is set to <code 
class="language-plaintext highlighter-rouge">true</code> (it is <code 
class="language-plaintext highlighter-rouge">false</code> by default), a 
request to an exempted path
+can use the <code class="language-plaintext highlighter-rouge">action:</code> 
parameter prefix to execute another action in the same namespace.</p>
+
 <h2 id="examples">Examples</h2>
 
-<div class="language-xml highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nt">&lt;action</span>  <span 
class="na">name=</span><span class="s">"someAction"</span> <span 
class="na">class=</span><span class="s">"com.examples.SomeAction"</span><span 
class="nt">&gt;</span>
+<p>Exempt selected paths for every action using the stack:</p>
+
+<div class="language-xml highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nt">&lt;package</span> <span 
class="na">name=</span><span class="s">"default"</span> <span 
class="na">extends=</span><span class="s">"struts-default"</span><span 
class="nt">&gt;</span>
+    <span class="nt">&lt;interceptors&gt;</span>
+        <span class="nt">&lt;interceptor-stack</span> <span 
class="na">name=</span><span class="s">"appDefaultStack"</span><span 
class="nt">&gt;</span>
+            <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"defaultStack"</span><span 
class="nt">&gt;</span>
+                <span class="nt">&lt;param</span> <span 
class="na">name=</span><span 
class="s">"fetchMetadata.exemptedPaths"</span><span 
class="nt">&gt;</span>/saml/acs.action,/payment/return.action<span 
class="nt">&lt;/param&gt;</span>
+            <span class="nt">&lt;/interceptor-ref&gt;</span>
+        <span class="nt">&lt;/interceptor-stack&gt;</span>
+    <span class="nt">&lt;/interceptors&gt;</span>
+    <span class="nt">&lt;default-interceptor-ref</span> <span 
class="na">name=</span><span class="s">"appDefaultStack"</span><span 
class="nt">/&gt;</span>
+<span class="nt">&lt;/package&gt;</span>
+</code></pre></div></div>
+
+<p>Disable the interceptor for a single action:</p>
+
+<div class="language-xml highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nt">&lt;action</span> <span 
class="na">name=</span><span class="s">"acs"</span> <span 
class="na">class=</span><span 
class="s">"com.examples.SamlAssertionConsumerAction"</span><span 
class="nt">&gt;</span>
     <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"defaultStack"</span><span 
class="nt">&gt;</span>
-            <span class="nt">&lt;param</span> <span 
class="na">name=</span><span 
class="s">"fetchMetadata.exemptedPaths"</span><span 
class="nt">&gt;</span>/path1,/path2,/path3<span class="nt">&lt;/param&gt;</span>
+        <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"fetchMetadata.disabled"</span><span class="nt">&gt;</span>true<span 
class="nt">&lt;/param&gt;</span>
     <span class="nt">&lt;/interceptor-ref&gt;</span>
     <span class="nt">&lt;result</span> <span class="na">name=</span><span 
class="s">"success"</span><span class="nt">&gt;</span>good_result.ftl<span 
class="nt">&lt;/result&gt;</span>
 <span class="nt">&lt;/action&gt;</span>
diff --git a/content/core-developers/interceptors.html 
b/content/core-developers/interceptors.html
index 145ff51526..325013d9ce 100644
--- a/content/core-developers/interceptors.html
+++ b/content/core-developers/interceptors.html
@@ -339,6 +339,7 @@ than reiterate the same list of Interceptors, we can bundle 
these Interceptors t
             <span class="nt">&lt;interceptor</span> <span 
class="na">name=</span><span class="s">"noop"</span> <span 
class="na">class=</span><span 
class="s">"org.apache.struts2.interceptor.NoOpInterceptor"</span><span 
class="nt">/&gt;</span>
             <span class="nt">&lt;interceptor</span> <span 
class="na">name=</span><span class="s">"fetchMetadata"</span> <span 
class="na">class=</span><span 
class="s">"org.apache.struts2.interceptor.FetchMetadataInterceptor"</span><span 
class="nt">/&gt;</span>
             <span class="nt">&lt;interceptor</span> <span 
class="na">name=</span><span class="s">"httpMethod"</span> <span 
class="na">class=</span><span 
class="s">"org.apache.struts2.interceptor.httpmethod.HttpMethodInterceptor"</span>
 <span class="nt">/&gt;</span>
+            <span class="nt">&lt;interceptor</span> <span 
class="na">name=</span><span class="s">"actionExtension"</span> <span 
class="na">class=</span><span 
class="s">"org.apache.struts2.interceptor.ActionExtensionInterceptor"</span><span
 class="nt">/&gt;</span>
 
             <span class="c">&lt;!-- Empty stack - performs no operations 
--&gt;</span>
             <span class="nt">&lt;interceptor-stack</span> <span 
class="na">name=</span><span class="s">"emptyStack"</span><span 
class="nt">&gt;</span>
@@ -350,6 +351,7 @@ than reiterate the same list of Interceptors, we can bundle 
these Interceptors t
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"exception"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"servletConfig"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"httpMethod"</span><span 
class="nt">/&gt;</span>
+                <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"actionExtension"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"prepare"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"checkbox"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"datetime"</span><span 
class="nt">/&gt;</span>
@@ -412,6 +414,7 @@ than reiterate the same list of Interceptors, we can bundle 
these Interceptors t
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"params"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"servletConfig"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"httpMethod"</span><span 
class="nt">/&gt;</span>
+                <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"actionExtension"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"prepare"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"chain"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"modelDriven"</span><span 
class="nt">/&gt;</span>
@@ -444,6 +447,7 @@ than reiterate the same list of Interceptors, we can bundle 
these Interceptors t
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"alias"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"servletConfig"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"httpMethod"</span><span 
class="nt">/&gt;</span>
+                <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"actionExtension"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"i18n"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"csp"</span><span class="nt">&gt;</span>
                     <span class="nt">&lt;param</span> <span 
class="na">name=</span><span class="s">"disabled"</span><span 
class="nt">&gt;</span>false<span class="nt">&lt;/param&gt;</span>
diff --git a/content/core-developers/struts-default-xml.html 
b/content/core-developers/struts-default-xml.html
index 26974a9c26..acba826565 100644
--- a/content/core-developers/struts-default-xml.html
+++ b/content/core-developers/struts-default-xml.html
@@ -253,6 +253,7 @@ setting in <a 
href="default-properties">default.properties</a>.</p>
             <span class="nt">&lt;interceptor</span> <span 
class="na">name=</span><span class="s">"noop"</span> <span 
class="na">class=</span><span 
class="s">"org.apache.struts2.interceptor.NoOpInterceptor"</span><span 
class="nt">/&gt;</span>
             <span class="nt">&lt;interceptor</span> <span 
class="na">name=</span><span class="s">"fetchMetadata"</span> <span 
class="na">class=</span><span 
class="s">"org.apache.struts2.interceptor.FetchMetadataInterceptor"</span><span 
class="nt">/&gt;</span>
             <span class="nt">&lt;interceptor</span> <span 
class="na">name=</span><span class="s">"httpMethod"</span> <span 
class="na">class=</span><span 
class="s">"org.apache.struts2.interceptor.httpmethod.HttpMethodInterceptor"</span>
 <span class="nt">/&gt;</span>
+            <span class="nt">&lt;interceptor</span> <span 
class="na">name=</span><span class="s">"actionExtension"</span> <span 
class="na">class=</span><span 
class="s">"org.apache.struts2.interceptor.ActionExtensionInterceptor"</span><span
 class="nt">/&gt;</span>
 
             <span class="c">&lt;!-- Empty stack - performs no operations 
--&gt;</span>
             <span class="nt">&lt;interceptor-stack</span> <span 
class="na">name=</span><span class="s">"emptyStack"</span><span 
class="nt">&gt;</span>
@@ -264,6 +265,7 @@ setting in <a 
href="default-properties">default.properties</a>.</p>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"exception"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"servletConfig"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"httpMethod"</span><span 
class="nt">/&gt;</span>
+                <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"actionExtension"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"prepare"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"checkbox"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"datetime"</span><span 
class="nt">/&gt;</span>
@@ -326,6 +328,7 @@ setting in <a 
href="default-properties">default.properties</a>.</p>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"params"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"servletConfig"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"httpMethod"</span><span 
class="nt">/&gt;</span>
+                <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"actionExtension"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"prepare"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"chain"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"modelDriven"</span><span 
class="nt">/&gt;</span>
@@ -358,6 +361,7 @@ setting in <a 
href="default-properties">default.properties</a>.</p>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"alias"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"servletConfig"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"httpMethod"</span><span 
class="nt">/&gt;</span>
+                <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"actionExtension"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"i18n"</span><span 
class="nt">/&gt;</span>
                 <span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"csp"</span><span class="nt">&gt;</span>
                     <span class="nt">&lt;param</span> <span 
class="na">name=</span><span class="s">"disabled"</span><span 
class="nt">&gt;</span>false<span class="nt">&lt;/param&gt;</span>
diff --git a/content/getting-started/coding-actions.html 
b/content/getting-started/coding-actions.html
index 678c46bd19..cefa391119 100644
--- a/content/getting-started/coding-actions.html
+++ b/content/getting-started/coding-actions.html
@@ -262,7 +262,15 @@ those form field values provided it has a public set 
method that matches the for
 
 <p>To personalize the MessageStore message (recall that class MessageStore is 
storing the message to display) 
 add the following Java code to the HelloWorldAction’s execute method after the 
statement that instantiates 
-the MessageStore object.</p>
+the MessageStore object. Before doing so, you need to add the following <code 
class="language-plaintext highlighter-rouge">setMessage</code> method to
+<code class="language-plaintext highlighter-rouge">MessageStore</code> 
class.</p>
+
+<p><strong>Add setMessage method to MessageStore</strong></p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="kd">public</span> <span 
class="kt">void</span> <span class="nf">setMessage</span><span 
class="o">(</span><span class="nc">String</span> <span 
class="n">message</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span 
class="na">message</span> <span class="o">=</span> <span 
class="n">message</span><span class="o">;</span>
+<span class="o">}</span>
+</code></pre></div></div>
 
 <p><strong>Add userName value to message</strong></p>
 
diff --git a/content/plugins/rest/index.html b/content/plugins/rest/index.html
index 61ef803e9a..ac31915aa2 100644
--- a/content/plugins/rest/index.html
+++ b/content/plugins/rest/index.html
@@ -242,7 +242,7 @@ to truncate the identifier from the url and store it as a 
parameter.</li>
   <li><code class="language-plaintext 
highlighter-rouge">struts.mapper.postMethodName</code>  - The method name to 
call for a POST  request with no id parameter. Defaults to 
<strong>create</strong>.</li>
   <li><code class="language-plaintext 
highlighter-rouge">struts.mapper.putMethodName</code>  - The method name to 
call for a PUT  request with an id parameter. Defaults to 
<strong>update</strong>.</li>
   <li><code class="language-plaintext 
highlighter-rouge">struts.mapper.deleteMethodName</code>  - The method name to 
call for a DELETE  request with an id parameter. Defaults to 
<strong>destroy</strong>.</li>
-  <li><code class="language-plaintext 
highlighter-rouge">struts.mapper.editMethodName</code>  - The method name to 
call for a GET  request with an id parameter and the <strong>edit</strong> view 
specified. Defaults to <strong>edit</strong>.</li>
+  <li><code class="language-plaintext 
highlighter-rouge">struts.mapper.editMethodName</code>  - The method whose 
result is rendered when a PUT request fails validation. Defaults to 
<strong>edit</strong>. The mapper itself no longer reads it: the 
<strong>edit</strong> view is selected by the <code class="language-plaintext 
highlighter-rouge">/edit</code> URL form, which names the method.</li>
   <li><code class="language-plaintext 
highlighter-rouge">struts.mapper.newMethodName</code>  - The method name to 
call for a GET  request with no id parameter and the <strong>new</strong> view 
specified. Defaults to <strong>editNew</strong>.</li>
 </ul>
 
@@ -251,7 +251,6 @@ to truncate the identifier from the url and store it as a 
parameter.</li>
 <ul>
   <li><code class="language-plaintext highlighter-rouge">GET: /movies</code> 
=&gt; method=<strong>index</strong></li>
   <li><code class="language-plaintext highlighter-rouge">GET: 
/movies/Thrillers</code> =&gt; method=<strong>show</strong>, 
id=<strong>Thrillers</strong></li>
-  <li><code class="language-plaintext highlighter-rouge">GET: 
/movies/Thrillers;edit</code>  =&gt; method=<strong>edit</strong>, 
id=<strong>Thrillers</strong></li>
   <li><code class="language-plaintext highlighter-rouge">GET: 
/movies/Thrillers/edit</code>  =&gt; method=<strong>edit</strong>, 
id=<strong>Thrillers</strong></li>
   <li><code class="language-plaintext highlighter-rouge">GET: 
/movies/new</code>  =&gt; method=<strong>editNew</strong></li>
   <li><code class="language-plaintext highlighter-rouge">POST: /movies</code>  
=&gt; method=<strong>create</strong></li>

Reply via email to