Tell you the truth, I don't really dig the idea of having to specify parameter in config file like that - I think it adds another thing that can go wrong when you're refactoring. And it also needs special testing requirements.

In fact OGNL is pretty much persona non grata around here.

I can't see that my requirement is such an exceptional case. The method I ended up writing would be fit well in the ActionSupport class.

So anyway after a coffee and a fresh look at the ActionInvocation mechanism, I worked out what to do programmatically without jumping through any hoops, so I'm sorted now - at least until the next big version number increment :(



Musachy Barroso on 05/02/09 14:10, wrote:
If all you want to do is pass a parameter, then why don't you make it
available in your action and then juts pass it to the result using
OGNL? See this:

http://struts.apache.org/2.x/docs/parameters-in-configuration-results.html

Overall it is not a good idea to use internal Struts classes, as they
can change, and they often do.

musachy


On Thu, Feb 5, 2009 at 4:28 AM, Adam Hardy
<ahardy.str...@cyberspaceroad.com> wrote:
Hi Musachy,

I'm adding it in my action.

That's why it gets overwritten - because when Action's method returns,
struts calls for the Result, presumably re-creating it even though it's
there.

I don't understand why because there appears to be the code to provide an
existing Result rather than recreating it, I just haven't delved as far into
the underbelly of the struts mechanism calling the
ActionInvocation#getResult().



Musachy Barroso on 04/02/09 19:07, wrote:
Lets take one step back, are you adding this param in an interceptor
or in your action?

musachy

On Wed, Feb 4, 2009 at 1:49 PM, Adam Hardy
<ahardy.str...@cyberspaceroad.com> wrote:
Now that 2.1.6 won't let me add to the resultConfig to add my redirect
httpParameters myself, I figured I'd have to obtain the actual Result
object.

The way that DefaultActionInvocation is programmed to do this though
makes
it impossible, despite the Javadocs explicitly stating otherwise e.g.

http://struts.apache.org/2.1.6/struts2-core/apidocs/com/opensymphony/xwork2/ActionInvocation.html#getResult()

Then I can't call the create result method since it's not on the
interface.

Even when I cast the ActionInvocation and call the create method and
faithfully add my redirect parameter, the result gets overwritten later
anyway.

It looks like I must downgrade from here - unless anyone can think of
another way of programmatically adding the parameters to the redirect
URL.


Adam





Adam Hardy on 04/02/09 16:34, wrote:
 From the ActionConfig.Builder#build() javadoc:

"The builder for this object.  An instance of this object is the only
way
to construct a new instance.  The purpose is to enforce the immutability
of
the object.  The methods are structured in a way to support chaining.
After
setting any values you need, call the {...@link #build()} method to create
the object."


I assume there was some issue behind the scenes with robustness.

For the long term it would be good to have an official struts method to
set the HTTP params programmatically.

What I'm going to do now is code up a Result class to extend
ServletActionRedirectResult - someone give me a shout if I'm barking up
the
wrong tree.

Thanks
Adam


Adam Hardy (struts) on 04/02/09 15:16, wrote:
I'm prevented from adding my redirect parameter programmatically with
2.1.6!

Look:

Map<String, ResultConfig> resultsMap =
  ServletActionContext.getActionContext(getRequest())
      .getActionInvocation().getProxy().getConfig().getResults();
ResultConfig config = resultsMap.get(resultName);
Map<String, String> params = config.getParams();
params.put(paramName, paramValue.toString());
 causes:
java.lang.UnsupportedOperationException
  at java.util.Collections$UnmodifiableMap.put(Collections.java:1285)

Or am I jumping to conclusions again?

Adam

--- original message author="Musachy Barroso"
I think just need to pass a string, instead of an object in the value
param.
musachy

On Mon, Jan 26, 2009 at 10:37 AM, Adam Hardy wrote:
Hi,

got a compilation error after upgrading from 2.0.11 to 2.1.6 due to
changes
in com.opensymphony.xwork2.config.entities.ResultConfig

I am doing this:

 public boolean addRedirectParameter(String resultName, String
paramName,
     Object paramValue)
 {
     Map<String, ResultConfig> resultsMap =
         ServletActionContext.getActionContext(getRequest())

.getActionInvocation().getProxy().getConfig().getResults();
     ResultConfig config = resultsMap.get(resultName);
     if (config == null)
     {
         return false;
     }
     else
     {
         config.addParam(paramName, paramValue);  // 2.1.6 COMPILE
ERROR
         return true;
     }
 }


which I can call in my actions in order to put another parameter onto
the
redirect URL of my result.

In 2.1.6, ResultConfig has no addParam() method anymore.

After checking the upgrade troubleshooting guide and the user lists,
it
seems nobody else is suffering from this problem. Could somebody give
me an
 idea how to deal with this?


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to