[
https://issues.apache.org/jira/browse/WW-5070?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17090256#comment-17090256
]
Lukasz Lenart commented on WW-5070:
-----------------------------------
I think the main case here is {{ModelDriven}} because in such case it supposed
to be the very top object and the comments states this clear:
{noformat}
rootObject = invocation.getStack().peek(); // model overrides action
{noformat}
If we will turn into searching the action explicitly this will break
model-driven actions as in such case model will be skipped even if on the top
of the stack. And there is no named param to identify model eg.: {{#model}} so
a workaround won't be possible.
> JSONResult default root object should be set explicitly, rather than from
> result of ValueStack.peek()
> -----------------------------------------------------------------------------------------------------
>
> Key: WW-5070
> URL: https://issues.apache.org/jira/browse/WW-5070
> Project: Struts 2
> Issue Type: Improvement
> Components: Core Results
> Affects Versions: 2.5.17
> Environment: Struts 2.5.17
> Tomcat 8.0.24
> Reporter: Michael Hum
> Priority: Minor
>
> JSONResult#setRoot() is documented as follows:
> {quote}
> Sets the root object to be serialized, defaults to the Action
> {quote}
> This is implemented in {{org.apache.struts2.json.JSONResult#findRootObject}}:
> {code:java}
> if (this.root != null) {
> ValueStack stack = invocation.getStack();
> rootObject = stack.findValue(root);
> } else {
> rootObject = invocation.getStack().peek(); // model overrides
> action
> }
> {code}
> We have just run into an issue with our application where this expectation
> did not turn out to be true, due to a race condition in some of our custom
> results/interceptors (triggered by multiple requests) that results in the top
> of the stack not being the action. We've mitigated the issue by explicitly
> setting the root for serialization as the action:
> {code:java}
> @Result(name = FooAction.JSON, type = "json", params = {"root", "#action",
> "noCache", "true", "ignoreHierarchy", "false"}),
> {code}
> While not a bug triggered by any struts code, it would make more sense in
> this case to explicitly find the action instead of assuming that the top of
> the stack is the action. The ValueStack is able to be manipulated freely by
> developers, so this would guarantee that the default be correct regardless of
> external manipulation.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)