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

lukaszlenart pushed a commit to branch feat/struts-730-modernization
in repository https://gitbox.apache.org/repos/asf/struts-examples.git

commit 5cb54f0af3d2f2bfef01a8e502a3069ab03f630a
Author: Lukasz Lenart <[email protected]>
AuthorDate: Fri Aug 14 13:05:45 2026 +0200

    Add missing @StrutsParameter annotations found by whole-branch review
    
    The original audit matched only name= on <s:*> tags (missing key=,
    which also sets the parameter name) and did not consider accessors
    inherited from a superclass. This let three modules silently drop
    every submitted parameter: bean-validation and themes-override
    (EditAction.getPersonBean(), whose JSPs use key=) and mailreader2
    (MailreaderSupport, the shared base class for RegistrationAction,
    SubscriptionAction, and LoginAction). Adds 9 annotations across the
    three modules, bringing the running total to 17 across 8 modules, and
    corrects the two now-false claims in the modernization plan doc.
    
    Co-Authored-By: Claude Opus 5 <[email protected]>
---
 .../src/main/java/org/apache/struts/edit/action/EditAction.java   | 2 ++
 docs/superpowers/plans/2026-08-14-struts-730-modernization.md     | 6 ++++--
 .../org/apache/struts/examples/mailreader2/MailreaderSupport.java | 8 ++++++++
 .../src/main/java/org/apache/struts/edit/action/EditAction.java   | 2 ++
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git 
a/bean-validation/src/main/java/org/apache/struts/edit/action/EditAction.java 
b/bean-validation/src/main/java/org/apache/struts/edit/action/EditAction.java
index 04179b3..e63e345 100755
--- 
a/bean-validation/src/main/java/org/apache/struts/edit/action/EditAction.java
+++ 
b/bean-validation/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -6,6 +6,7 @@ import org.apache.struts.edit.model.State;
 import org.apache.struts.edit.service.EditService;
 import org.apache.struts.edit.service.EditServiceInMemory;
 import org.apache.struts2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -40,6 +41,7 @@ public class EditAction extends ActionSupport {
         return INPUT;
     }
 
+    @StrutsParameter(depth = 1)
     public Person getPersonBean() {
         return personBean;
     }
diff --git a/docs/superpowers/plans/2026-08-14-struts-730-modernization.md 
b/docs/superpowers/plans/2026-08-14-struts-730-modernization.md
index 2478f47..20fadda 100644
--- a/docs/superpowers/plans/2026-08-14-struts-730-modernization.md
+++ b/docs/superpowers/plans/2026-08-14-struts-730-modernization.md
@@ -311,7 +311,9 @@ Co-Authored-By: Claude Opus 5 <[email protected]>"
 
 ### Task 4: Fix missing `@StrutsParameter` annotations
 
-Eight fixes across five classes in four modules. Each was hand-verified 
against the submitting JSP form. **Do not add annotations beyond these eight** 
— the audit confirmed every other action is either correct, ModelDriven-exempt, 
or has a property that is never submitted (annotating those would wrongly widen 
the injection surface).
+Eight fixes across five classes in four modules. Each was hand-verified 
against the submitting JSP form.
+
+**Correction (added after the final whole-branch review):** the audit above 
was not exhaustive. It matched only `name=` on `<s:*>` tags — missing `key=`, 
which also sets the parameter name — and it did not consider accessors 
inherited from a superclass. This let three modules slip through with every 
submitted parameter silently dropped: `bean-validation` and `themes-override` 
(`EditAction.getPersonBean()`, JSPs use `key=`) and `mailreader2` 
(`MailreaderSupport`, the shared base class for [...]
 
 Rules being applied, from 
`ParametersInterceptor.hasValidAnnotatedPropertyDescriptor`:
 - depth 0 → annotation goes on the **setter**
@@ -764,4 +766,4 @@ Expected: roughly 140–150 files. The per-task counts are 
the authoritative che
   - `text-provider` — `SystemAction.setTextProvider` is `@Inject`-driven, not 
a request parameter.
   - `file-upload` and `sitemesh3` — `UploadAction implements 
UploadedFilesAware` and receives files via 
`withUploadedFiles(List<UploadedFile>)`. There is no `setUpload`; `<s:file>` is 
consumed by the file-upload interceptor, not `ParametersInterceptor`.
   - `struts-parameter` — `users[%{#status.index}].id` evaluates to 
`users[0].id`, depth 2. The existing `@StrutsParameter(depth = 2)` is already 
correct.
-- **No `unverified` rows.** Every action's parameters were traceable to a JSP 
form, a validation descriptor, or an assignment in `execute()`.
+- **No `unverified` rows** — but this was not accurate: the audit missed three 
modules by matching only `name=` on `<s:*>` tags (not `key=`) and by not 
considering accessors inherited from a superclass. The final whole-branch 
review caught `bean-validation`, `themes-override`, and `mailreader2` and added 
9 further annotations, bringing the total to 17 across 8 modules.
diff --git 
a/mailreader2/src/main/java/org/apache/struts/examples/mailreader2/MailreaderSupport.java
 
b/mailreader2/src/main/java/org/apache/struts/examples/mailreader2/MailreaderSupport.java
index e112c29..c6a6edf 100644
--- 
a/mailreader2/src/main/java/org/apache/struts/examples/mailreader2/MailreaderSupport.java
+++ 
b/mailreader2/src/main/java/org/apache/struts/examples/mailreader2/MailreaderSupport.java
@@ -30,6 +30,7 @@ import 
org.apache.struts.examples.mailreader2.dao.impl.memory.MemoryUser;
 import org.apache.struts2.ActionSupport;
 import org.apache.struts2.action.ApplicationAware;
 import org.apache.struts2.action.SessionAware;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
 
 import java.util.Map;
 
@@ -160,6 +161,7 @@ public class MailreaderSupport extends ActionSupport 
implements SessionAware, Ap
      *
      * @param value The task to set.
      */
+    @StrutsParameter
     public void setTask(String value) {
         task =  value;
     }
@@ -216,6 +218,7 @@ public class MailreaderSupport extends ActionSupport 
implements SessionAware, Ap
      *
      * @param value
      */
+    @StrutsParameter
     public void setHost(String value) {
         host = value;
     }
@@ -245,6 +248,7 @@ public class MailreaderSupport extends ActionSupport 
implements SessionAware, Ap
      *
      * @param value The password to set.
      */
+    @StrutsParameter
     public void setPassword(String value) {
         password = value;
     }
@@ -275,6 +279,7 @@ public class MailreaderSupport extends ActionSupport 
implements SessionAware, Ap
      *
      * @param value The confirmation password to set.
      */
+    @StrutsParameter
     public void setPassword2(String value) {
         password2 = value;
     }
@@ -304,6 +309,7 @@ public class MailreaderSupport extends ActionSupport 
implements SessionAware, Ap
      *
      * @param value The username to set.
      */
+    @StrutsParameter
     public void setUsername(String value) {
         username = value;
     }
@@ -341,6 +347,7 @@ public class MailreaderSupport extends ActionSupport 
implements SessionAware, Ap
      *
      * @return User object for authenticated user.
      */
+    @StrutsParameter(depth = 1)
     public User getUser() {
         return (User) getSession().get(Constants.USER_KEY);
     }
@@ -465,6 +472,7 @@ public class MailreaderSupport extends ActionSupport 
implements SessionAware, Ap
      *
      * @return Cached Subscription object or null
      */
+    @StrutsParameter(depth = 1)
     public Subscription getSubscription() {
         return (Subscription) getSession().get(Constants.SUBSCRIPTION_KEY);
     }
diff --git 
a/themes-override/src/main/java/org/apache/struts/edit/action/EditAction.java 
b/themes-override/src/main/java/org/apache/struts/edit/action/EditAction.java
index 728a4fc..3fb99b2 100644
--- 
a/themes-override/src/main/java/org/apache/struts/edit/action/EditAction.java
+++ 
b/themes-override/src/main/java/org/apache/struts/edit/action/EditAction.java
@@ -5,6 +5,7 @@ import org.apache.struts.edit.model.State;
 import org.apache.struts.edit.service.EditService;
 import org.apache.struts.edit.service.EditServiceInMemory;
 import org.apache.struts2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -48,6 +49,7 @@ public class EditAction extends ActionSupport {
                return INPUT;
        }
 
+       @StrutsParameter(depth = 1)
        public Person getPersonBean() {
 
 

Reply via email to