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

在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请求。您可以使用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; 
+0

是的,我知道我可以使用过滤器做有用但是这仅仅设置URL参数的工作太多了。 – CoolBeans 2010-07-06 18:59:19

+0

为什么你不能在请求对象上使用setAttribute? – laz 2010-07-06 22:02:47

+0

因为更改页面颜色的过滤器需要它作为请求参数。我已经想了很多,我没有看到如何解决这个问题,没有通过Java脚本添加url参数。 – CoolBeans 2010-07-07 03:52:38

我知道这是一个古老并接受交,但如果你不能升级的支柱(像我一样),那么这可能是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; 
+0

Upvoted,谢谢! – CoolBeans 2015-02-26 20:36:27