【问题标题】:setting url parameter in an action method in struts在struts的动作方法中设置url参数
【发布时间】:2010-07-06 17:44:27
【问题描述】:

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

【问题讨论】:

    标签: java url-routing struts-1


    【解决方案1】:

    简短的回答是这是不可能的。请求参数应该来自 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;
    

    【讨论】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多