我想在转发到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中做到这一点?
答案 0 :(得分:5)
简短的回答是,这是不可能的。请求参数应该来自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;
答案 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;