Java 在struts中的操作方法中设置url参数

Java 在struts中的操作方法中设置url参数,java,url-routing,struts-1,Java,Url Routing,Struts 1,我想在从操作方法转发到另一个操作之前添加URL参数。尽管HttpServletRequest有一个getParameter()方法,但它没有setParameter()方法。我知道setAttribute()存在,但我需要它成为URL的一部分(比如?something=something&somet2=somet2)。我知道我可以使用过滤器来完成这项任务,但对于这项任务来说,这是一种过分的做法 基本上,我们有一个外部管理的过滤器,当该参数设置时,它将更改页面上的某些内容。假设页面的颜色将作为UR

我想在从操作方法转发到另一个操作之前添加URL参数。尽管HttpServletRequest有一个getParameter()方法,但它没有setParameter()方法。我知道setAttribute()存在,但我需要它成为URL的一部分(比如?something=something&somet2=somet2)。我知道我可以使用过滤器来完成这项任务,但对于这项任务来说,这是一种过分的做法

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

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


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

简而言之,这是不可能的。请求参数应该来自HTTP请求。您可以使用
ServletFilter
HttpServletRequestWrapper
的组合来假装添加它们,但这不属于Struts。根据你想要完成的事情,可能会有更好的解决方案。想再描述一下吗

更新

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

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

我知道这是一篇古老且被接受的文章,但是如果你不能升级你的struts(像我一样),那么这可能会很有用

import org.apache.struts.action.ActionForward;
公共类ParameteredForward扩展了ActionForward
{
公共参数化转发(ActionForward)
{
super(forward.getPath(),forward.getRedirect());
}
public void addParameter(字符串键、字符串值)
{
StringBuffer sb=新的StringBuffer(getPath());
if(key==null | | key.length()<1)
返回;
if(getPath().indexOf('?')=-1)
某人附加(“?”);
其他的
某人附加('&');
sb.追加(键+“=”+值);
setPath(sb.toString());
}
}
ParameterizedForward fwd=新的ParameterizedForward(mapping.findForward(“success”);
fwd.addParameter(“名称”、“jason”);
fwd.addParameter(“用户级别”、“上帝”);
返回fwd;

是的,我知道我可以使用过滤器来完成,但是仅仅设置URL参数就太麻烦了。为什么不能在请求对象上使用setAttribute?因为更改页面颜色的过滤器需要它作为请求参数。我已经考虑了很多,如果不通过java脚本添加url参数,我不知道如何解决这个问题。我只是看到您之前编辑了您的问题并添加了更多细节。我将更新我的答案。我认为org.apache.struts.action.ActionRedirect在struts 1.2中不可用,除非我做了一些愚蠢的事情。
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;