2

我想在从动作方法转发到另一个动作之前添加一个 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中做到这一点?

4

2 回答 2

7

简短的回答是这是不可能的。请求参数应该来自 HTTP 请求。您可以使用 aServletFilter和 an的组合来伪造添加它们,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;
于 2010-07-06T18:12:57.783 回答
3

我知道这是一个古老且被接受的帖子,但如果你不能升级你的 struts(像我一样),那么这可能很有用http://www.coderanch.com/t/45890/Struts/Adding-parameters-struts-行动

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;
于 2015-02-25T23:31:15.253 回答