You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Jeromy Evans (JIRA)" <ji...@apache.org> on 2008/04/18 02:42:05 UTC

[jira] Commented: (WW-2598) automatically set ActionMapper for ServletRedirectResult

    [ https://issues.apache.org/struts/browse/WW-2598?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43635#action_43635 ] 

Jeromy Evans commented on WW-2598:
----------------------------------

I agree with the issue but not with the proposed approach.  We shouldn't instantiate the Result ourselves using the *new* operator.
Instead we should be asking the Container's ObjectFactory to create a Result with the necessary dependences already injected.

That should be simple, but it's not.  

The ObjectFactory includes a buildResult method but it's not appropriate for use in an action.
Result result = objectFactory.buildResult(resultConfig, invocationContext.getContextMap());

Alternate proposal: expose a new API that requests the container to create a result.

The least effort would be something like this:
eg. return ResultBuilder.createResult("redirectAction").withParam("actionName", "${value1}");
where ResultBuilder either provides a static factory method or an instance can injected into the action 

(I'm not sure if the container supports static injection)



> automatically set ActionMapper for ServletRedirectResult
> --------------------------------------------------------
>
>                 Key: WW-2598
>                 URL: https://issues.apache.org/struts/browse/WW-2598
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Core Actions
>            Reporter: Brad Cupit
>            Priority: Minor
>
> when a ServletRedirectResult (or a subclass of it, like ServletRedirectActionResult) is instantiated and returned as the Result for the Action, the ActionMapper must be manually set by the developer. So, instead of this
> // ideal situation
> public Result submit() {
> 	return new ServletActionRedirectResult("actionName").addParameter("param1", "${value1}");
> }
> the user must code this:
> // manually set the ActionMapper
> public Result submit() throws Exception {
> 	ServletActionRedirectResult result = new ServletActionRedirectResult("actionName").addParameter("param1", "${value1}");
> 	result.setActionMapper(actionMapper);
> 	return result;
> }
> and to get the ActionMapper in the Action, you have to add this setter:
> @Inject
> public void setActionMapper(ActionMapper actionMapper) { ... }
> This is a feature request/improvement so that the ActionMapper can be automatically set in (or looked up by) the ServletRedirectResult.
> see this mailing list post:
> http://article.gmane.org/gmane.comp.jakarta.struts.user/155271
> and this reply by Don Brown:
> http://article.gmane.org/gmane.comp.jakarta.struts.user/155272

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