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 c042f722a Updates stage by Jenkins
c042f722a is described below

commit c042f722acdb31ede60d41e57357b267553cbe0f
Author: jenkins <[email protected]>
AuthorDate: Wed Jul 1 05:10:02 2026 +0000

    Updates stage by Jenkins
---
 content/announce-2026.html                         | 27 ++++++++
 .../struts-parameter-annotation.html               | 75 ++++++++++++++++++++--
 content/download.html                              | 58 ++++++++---------
 content/index.html                                 | 10 +--
 content/releases.html                              |  8 ++-
 5 files changed, 137 insertions(+), 41 deletions(-)

diff --git a/content/announce-2026.html b/content/announce-2026.html
index d9ab505f5..c799d76fa 100644
--- a/content/announce-2026.html
+++ b/content/announce-2026.html
@@ -157,6 +157,33 @@
   Skip to: <a href="announce-2025">Announcements - 2025</a>
 </p>
 
+<h4 id="a20260615">15 June 2026 - Apache Struts version 7.2.1 General 
Availability</h4>
+
+<p>The Apache Struts group is pleased to announce that Apache Struts version 
7.2.1 is available as a “General Availability”
+release. The GA designation is our highest quality grade.</p>
+
+<p>The Apache Struts is an elegant, extensible framework for creating 
enterprise-ready Java web applications.
+The framework has been designed to streamline the full development cycle, from 
building, to deploying,
+to maintaining applications over time.</p>
+
+<p>Please read the <a 
href="https://cwiki.apache.org/confluence/display/WW/Struts+6.x.x+to+7.x.x+migration";>Migration
 Guide</a> to find more details about
+how to adopt a new version.</p>
+
+<blockquote>
+  <p>Please read the <a 
href="https://cwiki.apache.org/confluence/display/WW/Version+Notes+7.2.1";>Version
 Notes</a> to find more details about performed
+bug fixes and improvements.</p>
+</blockquote>
+
+<p><strong>All developers are strongly advised to perform this 
upgrade.</strong></p>
+
+<p>The 7.x series of the Apache Struts framework has a minimum requirement of 
the following specification versions:
+Java 17 and JakartaEE.</p>
+
+<p>Should any issues arise with your use of any version of the Struts 
framework, please post your comments to the user list,
+and, if appropriate, file <a 
href="https://issues.apache.org/jira/projects/WW/";>a tracking ticket</a>.</p>
+
+<p>You can download this version from our <a 
href="download.cgi#struts-ga">download</a> page.</p>
+
 <h4 id="a20260525">25 May 2026 - Apache Struts version 6.10.0 General 
Availability</h4>
 
 <p>The Apache Struts group is pleased to announce that Apache Struts version 
6.10.0 is available as a “General Availability”
diff --git a/content/core-developers/struts-parameter-annotation.html 
b/content/core-developers/struts-parameter-annotation.html
index 6edf15f73..66d24905e 100644
--- a/content/core-developers/struts-parameter-annotation.html
+++ b/content/core-developers/struts-parameter-annotation.html
@@ -186,11 +186,65 @@ authorization performed during deserialization, so 
unauthorized fields are never
     </ul>
   </li>
   <li>
-    <p><strong>On a public getter method:</strong> Place the annotation on a 
getter method when you want to allow populating the properties of the object 
returned by the getter. The <code class="language-plaintext 
highlighter-rouge">depth</code> parameter is used to control how deep the 
object graph can be populated. This is typically used for complex objects or 
collections of complex objects.</p>
+    <p><strong>On a public getter method:</strong> Place the annotation on a 
getter method when you want to allow populating the properties of the object 
(or objects) returned by the getter. The <code class="language-plaintext 
highlighter-rouge">depth</code> parameter controls how deep into that object 
graph population is allowed — see <a 
href="#understanding-the-depth-parameter">Understanding the <code 
class="language-plaintext highlighter-rouge">depth</code> parameter</a> below. 
This i [...]
   </li>
   <li><strong>On a public field:</strong> For simple types, you can place the 
annotation directly on the public field as a shorthand for a setter 
annotation.</li>
 </ul>
 
+<h2 id="understanding-the-depth-parameter">Understanding the <code 
class="language-plaintext highlighter-rouge">depth</code> parameter</h2>
+
+<p>When you annotate a getter, <code class="language-plaintext 
highlighter-rouge">depth</code> limits how far Struts may traverse the object
+graph reachable from that getter while applying request parameters. 
<strong>Each
+navigation step counts as one level</strong> — following a property 
<em>or</em> indexing into a
+collection or map.</p>
+
+<p>To find the value you need, count the segments after the annotated property 
in the
+request expression:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>Request expression</th>
+      <th>Annotated getter</th>
+      <th>Steps beyond the getter</th>
+      <th>Required <code class="language-plaintext 
highlighter-rouge">depth</code></th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td><code class="language-plaintext 
highlighter-rouge">user.name</code></td>
+      <td><code class="language-plaintext 
highlighter-rouge">getUser()</code></td>
+      <td><code class="language-plaintext highlighter-rouge">.name</code></td>
+      <td><code class="language-plaintext highlighter-rouge">1</code></td>
+    </tr>
+    <tr>
+      <td><code class="language-plaintext 
highlighter-rouge">user.address.city</code></td>
+      <td><code class="language-plaintext 
highlighter-rouge">getUser()</code></td>
+      <td><code class="language-plaintext highlighter-rouge">.address</code> → 
<code class="language-plaintext highlighter-rouge">.city</code></td>
+      <td><code class="language-plaintext highlighter-rouge">2</code></td>
+    </tr>
+    <tr>
+      <td><code class="language-plaintext 
highlighter-rouge">users[0].name</code></td>
+      <td><code class="language-plaintext 
highlighter-rouge">getUsers()</code></td>
+      <td><code class="language-plaintext highlighter-rouge">[0]</code> → 
<code class="language-plaintext highlighter-rouge">.name</code></td>
+      <td><code class="language-plaintext highlighter-rouge">2</code></td>
+    </tr>
+  </tbody>
+</table>
+
+<p>The key point for collections and maps: <strong>indexing into the 
collection is itself a
+level.</strong> Reaching a property of a collection element therefore always 
costs one more
+level than reaching the same property on a plain object. This holds even when 
the
+element type is a flat POJO with only simple fields — populating <code 
class="language-plaintext highlighter-rouge">contents[0].title</code>
+still needs <code class="language-plaintext highlighter-rouge">depth = 
2</code> (one level to reach the element, one more to reach its
+property), not <code class="language-plaintext highlighter-rouge">depth = 
1</code>.</p>
+
+<p>In the annotation’s own terms, <code class="language-plaintext 
highlighter-rouge">depth</code> is <em>the number of periods or brackets that
+may appear in the parameter name</em>. The default is <code 
class="language-plaintext highlighter-rouge">depth = 0</code>, which permits 
only
+setters and fields directly on the action class. Reaching a property of a 
returned
+object needs <code class="language-plaintext highlighter-rouge">depth = 
1</code> or more; reaching a property of an object held in a
+collection or map needs <code class="language-plaintext 
highlighter-rouge">depth = 2</code> or more.</p>
+
 <h2 id="examples">Examples</h2>
 
 <h3 id="simple-field">Simple field</h3>
@@ -241,20 +295,29 @@ authorization performed during deserialization, so 
unauthorized fields are never
 <span class="o">}</span>
 </code></pre></div></div>
 
-<h4 id="populating-properties-of-objects-within-a-collection">Populating 
properties of objects within a collection</h4>
-
-<p>When populating properties of objects that are already in a collection, 
annotate the getter.</p>
+<p>When populating properties of objects that are already in a collection, 
annotate the
+getter. Because reaching an element’s property requires indexing into the 
collection
+<em>and then</em> following the property, this needs <code 
class="language-plaintext highlighter-rouge">depth = 2</code> (see
+<a href="#understanding-the-depth-parameter">Understanding the <code 
class="language-plaintext highlighter-rouge">depth</code> parameter</a>).</p>
 <div class="language-java highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">MyAction</span> <span 
class="o">{</span>
     <span class="kd">private</span> <span class="nc">List</span><span 
class="o">&lt;</span><span class="nc">User</span><span class="o">&gt;</span> 
<span class="n">users</span><span class="o">;</span> <span class="c1">// assume 
this is initialized in the constructor or elsewhere</span>
 
-    <span class="nd">@StrutsParameter</span><span class="o">(</span><span 
class="n">depth</span> <span class="o">=</span> <span class="mi">1</span><span 
class="o">)</span>
+    <span class="nd">@StrutsParameter</span><span class="o">(</span><span 
class="n">depth</span> <span class="o">=</span> <span class="mi">2</span><span 
class="o">)</span>
     <span class="kd">public</span> <span class="nc">List</span><span 
class="o">&lt;</span><span class="nc">User</span><span class="o">&gt;</span> 
<span class="nf">getUsers</span><span class="o">()</span> <span 
class="o">{</span>
         <span class="k">return</span> <span class="n">users</span><span 
class="o">;</span>
     <span class="o">}</span>
     <span class="c1">// ...</span>
 <span class="o">}</span>
 </code></pre></div></div>
-<p>This allows requests like <code class="language-plaintext 
highlighter-rouge">users[0].name=John</code>.</p>
+<p>This allows requests like <code class="language-plaintext 
highlighter-rouge">users[0].name=John</code>. Note that <code 
class="language-plaintext highlighter-rouge">depth = 2</code> is required
+even when <code class="language-plaintext highlighter-rouge">User</code> is a 
flat object with only simple properties — the extra level pays
+for indexing into the collection, not for nesting within the element.</p>
+
+<p>The same rule applies to JSON and REST payloads: a body such as
+<code class="language-plaintext 
highlighter-rouge">{"users":[{"name":"John"}]}</code> populates <code 
class="language-plaintext highlighter-rouge">users[0].name</code>, so the <code 
class="language-plaintext highlighter-rouge">getUsers()</code> getter
+must be annotated with <code class="language-plaintext 
highlighter-rouge">depth = 2</code> for the nested value to be accepted. 
Annotating
+only the setter is not enough — the JSON/REST authorization checks the getter 
when
+descending into the collection’s elements.</p>
 
 <h3 id="complex-object">Complex object</h3>
 
diff --git a/content/download.html b/content/download.html
index 9b6103c50..d9fb67d16 100644
--- a/content/download.html
+++ b/content/download.html
@@ -154,7 +154,7 @@
 
 <ul id="markdown-toc">
   <li><a href="#struts-ga" id="markdown-toc-struts-ga">Full Releases</a>    
<ul>
-      <li><a href="#struts711" id="markdown-toc-struts711">Struts 
7.1.1</a></li>
+      <li><a href="#struts721" id="markdown-toc-struts721">Struts 
7.2.1</a></li>
       <li><a href="#struts6100" id="markdown-toc-struts6100">Struts 
6.10.0</a></li>
     </ul>
   </li>
@@ -174,61 +174,61 @@ main distribution directory.</p>
 
 <h2 id="struts-ga">Full Releases</h2>
 
-<h3 id="struts711">Struts 7.1.1</h3>
+<h3 id="struts721">Struts 7.2.1</h3>
 
-<p>The <a href="//struts.apache.org">Apache Struts 7.1.1</a>  is an elegant, 
extensible framework
+<p>The <a href="//struts.apache.org">Apache Struts 7.2.1</a>  is an elegant, 
extensible framework
 for creating enterprise-ready Java web applications. It is available in a full 
distribution, or as separate library, 
-source, example and documentation distributions. Struts 7.1.1 is the “best 
available” 
+source, example and documentation distributions. Struts 7.2.1 is the “best 
available” 
 version of Struts in the 6.x series.</p>
 
 <ul>
-  <li><a 
href="https://cwiki.apache.org/confluence/display/WW/Version+Notes+7.1.1";>Version
 Notes</a></li>
+  <li><a 
href="https://cwiki.apache.org/confluence/display/WW/Version+Notes+7.2.1";>Version
 Notes</a></li>
   <li>Source:
     <ul>
-      <li><a 
href="[preferred]struts/7.1.1/struts-7.1.1-src.zip">struts-7.1.1-src.zip</a> 
(5.2MB)
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-src.zip.asc";>PGP</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-src.zip.sha256";>SHA256</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-src.zip.sha512";>SHA512</a></li>
+      <li><a 
href="[preferred]struts/7.2.1/struts-7.2.1-src.zip">struts-7.2.1-src.zip</a> 
(5.2MB)
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-src.zip.asc";>PGP</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-src.zip.sha256";>SHA256</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-src.zip.sha512";>SHA512</a></li>
     </ul>
   </li>
   <li>Full Distribution:
     <ul>
-      <li><a 
href="[preferred]struts/7.1.1/struts-7.1.1-all.zip">struts-7.1.1-all.zip</a> 
(75MB)
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-all.zip.asc";>PGP</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-all.zip.sha256";>SHA256</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-all.zip.sha512";>SHA512</a></li>
+      <li><a 
href="[preferred]struts/7.2.1/struts-7.2.1-all.zip">struts-7.2.1-all.zip</a> 
(75MB)
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-all.zip.asc";>PGP</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-all.zip.sha256";>SHA256</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-all.zip.sha512";>SHA512</a></li>
     </ul>
   </li>
   <li>Example Applications:
     <ul>
-      <li><a 
href="[preferred]struts/7.1.1/struts-7.1.1-apps.zip">struts-7.1.1-apps.zip</a> 
(39MB)
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-apps.zip.asc";>PGP</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-apps.zip.sha256";>SHA256</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-apps.zip.sha512";>SHA512</a></li>
+      <li><a 
href="[preferred]struts/7.2.1/struts-7.2.1-apps.zip">struts-7.2.1-apps.zip</a> 
(39MB)
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-apps.zip.asc";>PGP</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-apps.zip.sha256";>SHA256</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-apps.zip.sha512";>SHA512</a></li>
     </ul>
   </li>
   <li>Essential Dependencies Only:
     <ul>
-      <li><a 
href="[preferred]struts/7.1.1/struts-7.1.1-min-lib.zip">struts-7.1.1-min-lib.zip</a>
 (5.7MB)
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-min-lib.zip.asc";>PGP</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-min-lib.zip.sha256";>SHA256</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-min-lib.zip.sha512";>SHA512</a></li>
+      <li><a 
href="[preferred]struts/7.2.1/struts-7.2.1-min-lib.zip">struts-7.2.1-min-lib.zip</a>
 (5.7MB)
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-min-lib.zip.asc";>PGP</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-min-lib.zip.sha256";>SHA256</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-min-lib.zip.sha512";>SHA512</a></li>
     </ul>
   </li>
   <li>All Dependencies:
     <ul>
-      <li><a 
href="[preferred]struts/7.1.1/struts-7.1.1-lib.zip">struts-7.1.1-lib.zip</a> 
(18MB)
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-lib.zip.asc";>PGP</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-lib.zip.sha256";>SHA256</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-lib.zip.sha512";>SHA512</a></li>
+      <li><a 
href="[preferred]struts/7.2.1/struts-7.2.1-lib.zip">struts-7.2.1-lib.zip</a> 
(18MB)
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-lib.zip.asc";>PGP</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-lib.zip.sha256";>SHA256</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-lib.zip.sha512";>SHA512</a></li>
     </ul>
   </li>
   <li>Documentation:
     <ul>
-      <li><a 
href="[preferred]struts/7.1.1/struts-7.1.1-docs.zip">struts-7.1.1-docs.zip</a> 
(12MB)
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-docs.zip.asc";>PGP</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-docs.zip.sha256";>SHA256</a>
-<a 
href="https://downloads.apache.org/struts/7.1.1/struts-7.1.1-docs.zip.sha512";>SHA512</a></li>
+      <li><a 
href="[preferred]struts/7.2.1/struts-7.2.1-docs.zip">struts-7.2.1-docs.zip</a> 
(12MB)
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-docs.zip.asc";>PGP</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-docs.zip.sha256";>SHA256</a>
+<a 
href="https://downloads.apache.org/struts/7.2.1/struts-7.2.1-docs.zip.sha512";>SHA512</a></li>
     </ul>
   </li>
 </ul>
diff --git a/content/index.html b/content/index.html
index bc33e1b3a..54772851b 100644
--- a/content/index.html
+++ b/content/index.html
@@ -156,7 +156,7 @@
       extensible using a plugin architecture, and ships with plugins to support
       REST, AJAX and JSON.
     </p>
-    <a href="download.cgi#struts711" class="btn btn-primary btn-large">
+    <a href="download.cgi#struts721" class="btn btn-primary btn-large">
       <img src="img/download-icon.svg" alt="Download"> Download
     </a>
     <a href="primer.html" class="btn btn-info btn-large">
@@ -168,12 +168,12 @@
   <div class="col-md-12">
     <div class="row">
       <div class="column col-md-4">
-        <h2>Apache Struts 7.1.1 GA</h2>
+        <h2>Apache Struts 7.2.1 GA</h2>
         <p>
-          Apache Struts 7.1.1 GA has been released<br/>on 18 October 2025.
+          Apache Struts 7.2.1 GA has been released<br/>on 15 June 2026.
         </p>
-        Read more in <a href="announce-2025#a20251018">Announcement</a> or in
-        <a 
href="https://cwiki.apache.org/confluence/display/WW/Version+Notes+7.1.1";>Version
 notes</a>
+        Read more in <a href="announce-2026#a20260615">Announcement</a> or in
+        <a 
href="https://cwiki.apache.org/confluence/display/WW/Version+Notes+7.2.1";>Version
 notes</a>
       </div>
       <div class="column col-md-4">
         <h2>Apache Struts 6.10.0 GA</h2>
diff --git a/content/releases.html b/content/releases.html
index 39061a1ab..578dad84f 100644
--- a/content/releases.html
+++ b/content/releases.html
@@ -163,7 +163,7 @@ repositories, like <a 
href="http://ibiblio.org";>ibiblio.</a></p>
 <ul>
   <li><strong>General Availability (GA) Releases</strong> - <em>Ready for 
Prime Time!</em>
     <ul>
-      <li><a href="download.cgi#struts-ga">Struts 7.1.1</a> (“best 
available”)</li>
+      <li><a href="download.cgi#struts-ga">Struts 7.2.1</a> (“best 
available”)</li>
     </ul>
   </li>
   <li><strong>Extras</strong> - <em>Additional plugins and quick-fix 
solutions!</em>
@@ -213,6 +213,12 @@ page for available options.</p>
     </tr>
   </thead>
   <tbody>
+    <tr>
+      <td>Struts 7.1.1</td>
+      <td>18 October 2025</td>
+      <td> </td>
+      <td><a 
href="https://cwiki.apache.org/confluence/display/WW/Version+Notes+7.1.1";>Version
 notes</a></td>
+    </tr>
     <tr>
       <td>Struts 6.9.0</td>
       <td>27 April 2026</td>

Reply via email to