3

这是我的 index.jsp 文件:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  <head>
    <title>HOME</title>
  </head>

  <body>
    <s:action name="getUrl"></s:action>
  </body>
</html>

这是我的 struts.xml:

<struts>
  <action name="getUrl" class="UrlAction">
    <result name="redirect" type="redirect">${url}</result>
  </action>
</struts>

这是我的动作课:

public class UrlAction extends ActionSupport {

  private String url;

  public void setUrl(String url) {
    this.url = url;
  }

  public String getUrl(){
    return url;
  }

  public String execute() throws Exception {
    System.out.println("Entering execute() of Action");
    url = "https://www.google.com/";
    return "redirect";
  }

}

因此,当我运行 index.jsp 时,它应该将我重定向到https://www.google.com,但我不明白。它正在打印“输入操作的执行()”。这意味着它正在进入 Action 类。如果我做错了什么,请纠正我。

4

1 回答 1

8

你应该改变

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

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

<s:action name="getUrl"></s:action>

<s:action name="getUrl" executeResults="true"></s:action>

让它发挥作用;

但是,即使这样做了,你也不会重定向你的页面,因为这不是标签<s:action>的作用,根据文档

此标记使开发人员能够通过指定操作名称和可选名称空间直接从 JSP 页面调用操作。标记的正文内容用于呈现动作的结果。除非指定了 executeResult 参数,否则 struts.xml 中为此操作定义的任何结果处理器都将被忽略。

您可以在此处找到使用示例:http ://www.mkyong.com/struts2/struts-2-action-tag-example/

我猜你可能会在你的标签中看到重定向的谷歌页面(修改后)


编辑

你应该准确地描述你想要达到的目标;你首先问了一个关于<s:action>标签的问题,但我很确定这不是你需要的(尽管我仍然不明白你想要什么,除了某个地方的“重定向”)

如果您想在打开页面时立即重定向,只需使用<s:url>标记将 url 挂载到您的操作,并将其放入更改位置的 javascript 脚本中:

<script>
    location.href = "<s:url action="getUrl.action" />";
</script>

(但这会很奇怪,因为如果您在来自另一个动作时需要重定向,则没有理由从 JSP 页面传递,只需使用redirectActionresult 而不是redirectresult )

如果您想在按下按钮时重定向,请使用<s:submit>标签:

<s:submit action="getUrl.action" value="press here to redirect" />

首先确定并不可知地描述目标,然后获取有关帮助您实现目标的技术的信息。

于 2013-05-29T23:22:57.513 回答