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"><</span><span class="nc">User</span><span class="o">></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"><</span><span class="nc">User</span><span class="o">></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>