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

时间:2010-07-06 17:44:28

标签: java url-routing struts-1

我想在转发到action方法的其他操作之前添加一个URL参数。虽然HttpServletRequest有一个getParameter()方法,但它没有setParameter()方法。我知道setAttribute()在那里,但我需要它成为URL的一部分(比如?something = something& some2 = some2)。我知道我可以使用过滤器做到这一点,但这对于这项任务来说太过分了。

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

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

有没有人知道如何在struts 1.2中做到这一点?

2 个答案:

答案 0 :(得分:5)

简短的回答是,这是不可能的。请求参数应该来自HTTP请求。你可以假装使用ServletFilterHttpServletRequestWrapper的组合来添加它们,但这不在Struts之外。根据您要完成的任务,可能会有更好的解决方案。想要描述一下吗?

<强>更新

根据您添加的其他详细信息,我认为您可以尝试使用它来查看它是否符合您的需求:

import org.apache.struts.action.ActionRedirect;
...
ActionForward forward = action.forward("action_name");
ActionRedirect redirect = new ActionRedirect(forward);
redirect.addParameter("color", "red");
return redirect;

答案 1 :(得分:2)

我知道这是一篇陈旧且受理的帖子,但如果你无法升级你的struts(像我一样)那么这可能会有用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;