Johannes Mayer created WW-5534:
----------------------------------

             Summary: Actions with Spring's @Transactional and ModelDriven
                 Key: WW-5534
                 URL: https://issues.apache.org/jira/browse/WW-5534
             Project: Struts 2
          Issue Type: Bug
          Components: Core Interceptors, Plugin - Spring
    Affects Versions: 7.0.0
            Reporter: Johannes Mayer


Hi,

When using the ModelDriven interface, the getModel method has to be annotated 
with {_}@StrutsParameter{_}.

When Spring decides to wrap an Action object with SpringCGLIB (e.g. when 
annotating a method with {_}@Transactional){_}, one has to add the Package to 
the allowList, so execute can be called. No harm done, just add this to the 
{_}struts.xml{_}:

 
{code:java}
<constant name="struts.allowlist.packageNames" value="your.action.package"/> 
{code}
The now emerging problem is now, that  
_org.apache.struts2.interceptor.parameter.ParametersInterceptor_ is not able to 
map the request parameter to the model, because it is not able to find a 
suitable _getModel_ method. 

As a workaround, I can tell the ParameterInterceptor to not need a 
_@StrutsParameter_ annotation, but imo that defeats the purpose of this 
annotation.
{code:java}
<constant name="struts.parameters.requireAnnotations" value="false" /> {code}
Spring's AopUtils gives the option the get to the real class: 
_AopUtils.getTargetClass(springCGLIBObject);_

I created a project to showcase this: 
[https://github.com/sf-JMA/struts7-model-driven/|https://github.com/sf-JMA/struts7-model-driven/tree/main/src/main]

I added a test 
([GitHub|[https://github.com/sf-JMA/struts7-model-driven/blob/main/src/test/java/com/steadforce/aek/struts7modeldriven/SpringAopVersusModelDrivenTest.java])]
 to showcase the AopUtils method.

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to