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)