28

我试图让我的 Struts2 应用程序重定向到生成的 URL。在这种情况下,我希望 URL 使用当前日期,或者我在数据库中查找的日期。所以/section/document变成/section/document/2008-10-06

最好的方法是什么?

4

6 回答 6

65

我们是这样做的:

在 Struts.xml 中,有一个动态结果,例如:

<result name="redirect" type="redirect">${url}</result>

在行动中:

private String url;

public String getUrl()
{
 return url;
}

public String execute()
{
 [other stuff to setup your date]
 url = "/section/document" + date;
 return "redirect";
}

实际上,您可以使用相同的技术使用 OGNL 为 struts.xml 中的任何变量设置动态值。我们已经创建了各种动态结果,包括 RESTful 链接之类的东西。酷的东西。

于 2008-10-07T16:15:35.173 回答
15

也可以使用annotations和 Convention 插件来避免 struts.xml 中的重复配置:

@Result(location="${url}", type="redirect")

${url} 表示“使用 getUrl 方法的值”

于 2009-03-30T11:16:56.930 回答
3

如果有人想直接重定向ActionClass

public class RedirecActionExample extends ActionSupport {
HttpServletResponse response=(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);

    url="http://localhost:8080/SpRoom-1.0-SNAPSHOT/"+date;
    response.sendRedirect(url);
    return super.execute(); 
}

编辑:添加了一个缺少的报价。

于 2014-05-17T05:56:28.513 回答
2

我最终继承了 Struts'ServletRedirectResult并在调用之前覆盖了它的doExecute()方法来执行我的逻辑super.doExecute()。它看起来像这样:

public class AppendRedirectionResult extends ServletRedirectResult {
   private DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

  @Override
  protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
    String date = df.format(new Date());
    String loc = "/section/document/"+date;
    super.doExecute(loc, invocation);
  }
}

我不确定这是否是最好的方法,但它确实有效。

于 2008-10-06T12:43:06.540 回答
1

您可以使用注释重定向到另一个操作 -

@Result(
    name = "resultName",
    type = "redirectAction",
    params = { "actionName", "XYZAction" }
)
于 2014-07-22T15:17:06.217 回答
1

可以直接从拦截器重定向,而无需考虑涉及哪个操作。

在 struts.xml 中

    <global-results>
        <result name="redir" type="redirect">${#request.redirUrl}</result>
    </global-results>

在拦截器中

@Override
public String intercept(ActionInvocation ai) throws Exception
{
    final ActionContext context = ai.getInvocationContext();        
    HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);
    request.setAttribute("redirUrl", "http://the.new.target.org");
    return "redir";
}
于 2016-11-03T13:07:58.483 回答