How would Struts know to inject the helper class?  It wouldn't be creating
it, it would conceivably be created either as a singleton (static or
otherwise) and those configuration and action mapping classes are critical
to the functioning of the method.  I'd love to find a way to move this out
of my inheritance hierarchy, so do tell?
  (*Chris*)

On Sat, Dec 18, 2010 at 12:14 PM, Dave Newton <[email protected]> wrote:

> There's no reason it couldn't work in a "helper class", though; you can
> define arbitrary beans etc. inside the config.
>
> Dave
>
> On Sat, Dec 18, 2010 at 3:12 PM, Chris Pratt <[email protected]
> >wrote:
>
> > I assume what you want to do is turn an action name into a URL.  Here's
> > what
> > I've used before, I'm not sure if there's a better way, but this was
> > adapted
> > from code inside struts.  You could put it in your action's super class
> to
> > make it more reusable, but because of the injection required it wouldn't
> > really work in a helper class.
> >  (*Chris*)
> >
> >   /**
> >   * Struts: Inject a flag as to whether Dynamic Method Invocation is
> > enabled
> >   *
> >   * @param enable "true" to enable
> >   */
> >  @Inject(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION)
> >  public void setEnableDynamicMethodInvocation (String enable) {
> >    enableDynamicMethodInvocation = Boolean.parseBoolean(enable);
> >  } //setEnableDynamicMethodInvocation
> >
> >  /**
> >   * Struts: Inject the Struts Configuration for looking up the proper
> > Action
> >   *
> >   * @param configuration The Struts Configuration
> >   */
> >  @Inject
> >  public void setConfiguration (Configuration configuration) {
> >    this.configuration = configuration;
> >  } //setConfiguration
> >
> >  /**
> >   * Struts: Inject the Action Mapper
> >   *
> >   * @param actionMapper The Action Mapper
> >   */
> >  @Inject
> >  public void setActionMapper (ActionMapper actionMapper) {
> >    this.actionMapper = actionMapper;
> >  } //setActionMapper
> >
> >  /**
> >   * Process the Action Attribute
> >   *
> >   * @param ctx The Action Context
> >   * @param stack The Value Stack
> >   * @param action The action attribute value
> >   * @param namespace The namespace attribute value
> >   * @return The action attribute of the generated form
> >   */
> >  protected String processAction (ActionContext ctx,ValueStack
> > stack,String action,String namespace) {
> >    HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
> >    HttpServletResponse res =
> > (HttpServletResponse)pageContext.getResponse();
> >    if(action == null) {
> >        // no action supplied, default to the current request
> >      ActionInvocation invoke =
> >
> (ActionInvocation)stack.getContext().get(ActionContext.ACTION_INVOCATION);
> >      if(invoke != null) {
> >        ActionProxy proxy = invoke.getProxy();
> >        action = proxy.getActionName();
> >        namespace = proxy.getNamespace();
> >      } else {
> >        String uri = req.getRequestURI();
> >        action = uri.substring(uri.lastIndexOf('/'));
> >      }
> >    }
> >    String method = "";
> >    if(enableDynamicMethodInvocation) {
> >      int bang;
> >      if((bang = action.lastIndexOf('!')) != -1) {
> >        method = action.substring(bang + 1);
> >        action = action.substring(0,bang);
> >      }
> >    }
> >    if(namespace == null) {
> >      namespace = "";
> >    }
> >    ActionConfig config =
> >
> configuration.getRuntimeConfiguration().getActionConfig(namespace,action);
> >    if(config != null) {
> >      return UrlHelper.buildUrl(actionMapper.getUriFromActionMapping(new
> > ActionMapping(action,namespace,method,null)),req,res,null);
> >    } else if(action != null) {
> >      return UrlHelper.buildUrl(action,req,res,null);
> >    }
> >    return null;
> >  } //processAction
> >
> >
> >
> > On Fri, Dec 17, 2010 at 1:58 PM, Ken McWilliams <
> [email protected]
> > >wrote:
> >
> > > I want <s:url> tag like functionality from within my action, so I can
> > > build a url with parameters so I can return it as a JSON result.
> > >
> > > So is there a method I can call from perhaps an AwareInterface that can
> > > accomplish this?
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [email protected]
> > > For additional commands, e-mail: [email protected]
> > >
> > >
> >
>

Reply via email to