I'm investigating some of issues related to the s:action tag. This tag sets up a new context and ActionInvocation and invokes the action and result correctly. The problem is that within that process the DefaultActionInvocation replaces the ActionInvocation in the ThreadLocal ActionContext with the tag's own invocation:

// Setting this so that other classes, like object factories, can use the ActionProxy and other
       // contextual information to operate
       ActionContext actionContext = ActionContext.getContext();

       if(actionContext != null) {
           actionContext.setActionInvocation(this);
       }

The effect is that after completion of the tag, the ActionInvocation in the ThreadLocal ActionContext still references the tag's temporary invocation instead of the "parent" action's invocation. From that point, anything can happen, and does (WW-2079, WW-2290, WW-2599 and a few more that got me started down this path).

I'm not sure how to fix this. If actions can rely on the ThreadLocal ActionContext (they do), the current invocation needs to be there, but the invocation has no sensible way to know that it should restore the previous state. I don't want to pass more flags in from the action tag.

Has anyone got some suggestions on a tidy way to resolve this? Removing the ThreadLocals would be nice.

cheers,
Jeromy Evans

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to