We have just upgraded our applications from Struts 2.2.1 into Struts 2.2.3 
(which was released on May 9, 2011). We saw and identified an issue in our 
application after the upgrade, and the issue exists in the library 
struts2-json-plugin-2.2.3.jar. Basically in the class 
org.apache.struts2.json.JSONResult.java, the following method tries to find 
rootObject, and when this.root is null, rootObject is set by the statement 
"rootObject = invocation.getStack().peek();", but the previous versions 2.2.1.1 
and 2.2.1 set it by using "rootObject = invocation.getAction();". Therefore, in 
Struts 2.2.3 version, the first element is set to rootObject instead of action, 
which in our case is a skin object, but we need to set action object to the 
rootObject instead of first element by peek() process. Could you consider 
modify this behavior to set it like the way Struts 2.2.1 does by using 
"rootObject = invocation.getAction();"? If you need more information or test 
data about it, please let me know.

    private Object findRootObject(ActionInvocation invocation) {
        Object rootObject;
        if (this.root != null) {
            ValueStack stack = invocation.getStack();
            rootObject = stack.findValue(root);
        } else {
            rootObject = invocation.getStack().peek(); // model overrides action
        }
        return rootObject;
    }

Thanks.
Jerry


Reply via email to