代码之家  ›  专栏  ›  技术社区  ›  CoolBeans Jake

在struts的action方法中设置url参数

  •  0
  • CoolBeans Jake  · 技术社区  · 14 年前

    基本上,我们有一个外部管理的过滤器,当参数被设置时,它将改变页面上的某些内容。假设页面的颜色将作为URL参数的一部分传递。当该参数存在时,servlet过滤器将获取该参数并更改该页面的颜色。我知道这是一个非常奇怪的方式,但这就是他们在这里设置的方式。

    我知道如何使用基于java脚本的表单submit,将URL参数添加到操作URL(即“/someAction.do?color=red”)中。但对于某些操作,它实际上在代码中执行action.forward(“action\u name”)。对于那些我不知道该怎么办的人。

    2 回复  |  直到 14 年前
        1
  •  6
  •   laz    14 年前

    简而言之,这是不可能的。请求参数应该来自HTTP请求。您可以使用 ServletFilter 和一个 HttpServletRequestWrapper

    更新

    根据您添加的其他细节,我想您可以尝试一下,看看它是否满足您的需求:

    import org.apache.struts.action.ActionRedirect;
    ...
    ActionForward forward = action.forward("action_name");
    ActionRedirect redirect = new ActionRedirect(forward);
    redirect.addParameter("color", "red");
    return redirect;
    
        2
  •  2
  •   davibq    10 年前

    http://www.coderanch.com/t/45890/Struts/Adding-parameters-struts-action

    import org.apache.struts.action.ActionForward;
    public class ParameterizedForward extends ActionForward
    {
        public ParameterizedForward(ActionForward forward)
        {
            super(forward.getPath(), forward.getRedirect());
        }
        public void addParameter(String key, String value)
        {
            StringBuffer sb = new StringBuffer(getPath());
            if (key == null || key.length() < 1)
                return;
            if (getPath().indexOf('?') == -1)
                sb.append('?');
            else
                sb.append('&');
            sb.append(key + "=" + value);
            setPath(sb.toString());
        }
    }
    
    ParameterizedForward fwd = new ParameterizedForward(mapping.findForward("success"));
    fwd.addParameter("name","jason");
    fwd.addParameter("userLevel", "god");
    return fwd;