Using ServletActionRedirectResult (within @Result) and extra parameters.
------------------------------------------------------------------------

                 Key: WW-2297
                 URL: https://issues.apache.org/struts/browse/WW-2297
             Project: Struts 2
          Issue Type: Bug
    Affects Versions: 2.0.11
            Reporter: David Artiga


Given the following class and annotations:

@Results(
   @Result(name = Action.SUCCESS, value = "myAction", 
type=ServletActionRedirectResult.class, params = { "param1", "value1" })
)
public class MyAction implements Action {
   ...
}

In method 'buildResult' from 'com.opensymphony.xwork2ObjectFactory' class:

 if (resultClassName != null) {
            result = (Result) buildBean(resultClassName, extraContext);
            try {
                OgnlUtil.setProperties(resultConfig.getParams(), result, 
extraContext, true);
            } catch (XWorkException ex) {
                ...
            }
...
}

When dealing with the readult an ognl.NoSuchPropertyException is thrown for 
property 'param1'. 

This is not a problem if the action is mapped using a XML file, because 
"actionName" property has been set earlier (resultConfig.requestParameters = { 
"actionName=myAction","param1=value1"}).

But when using annotations, the requestParameters order changes( 
{"param1=value1", "actionName=myAction"}), so when throwing the exception 
"actioName" has not been set yet, and then the Result created has no actionName 
(=null).

That causes a NullPointerException when trying to process the result.

Possible patch (inform Ognl to not throw exceptions when setting properties):

OgnlUtil.setProperties(resultConfig.getParams(), result, extraContext, /* --> 
*/ false /* <-- */ );

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to