在struts中的action方法中设置url参数
我想在从action方法转发到另一个action之前添加一个URL参数。尽管HttpServletRequest有一个getParameter()方法,但它没有setParameter()方法。我知道setAttribute()在那里,但我需要它成为URL的一部分(比如?something = & some2 = some2)。我知道我可以使用过滤器来完成,但这对于这项任务来说太过矫枉过正。在struts中的action方法中设置url参数
基本上我们有一个外部管理的过滤器,当设置参数时,它会改变页面上的内容。假设页面的颜色将作为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;
我知道这是一个古老并接受交,但如果你不能升级的支柱(像我一样),那么这可能是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;
Upvoted,谢谢! – CoolBeans 2015-02-26 20:36:27
是的,我知道我可以使用过滤器做有用但是这仅仅设置URL参数的工作太多了。 – CoolBeans 2010-07-06 18:59:19
为什么你不能在请求对象上使用setAttribute? – laz 2010-07-06 22:02:47
因为更改页面颜色的过滤器需要它作为请求参数。我已经想了很多,我没有看到如何解决这个问题,没有通过Java脚本添加url参数。 – CoolBeans 2010-07-07 03:52:38