【问题标题】:jsp:forward tag forwards to Struts 2 actionjsp:forward 标签转发到 Struts 2 动作
【发布时间】:2023-04-10 08:04:01
【问题描述】:

我正在将一个 Struts 应用程序迁移到 Struts 2。它是四年前由 Struts 1.2 开发的。

我的问题是:

在我的JSP中,有这样的说法:

<jsp:forward page="/a.do" />

它在 Struts 1 中运行良好,但在 Struts 2 中不起作用,当我访问这个 JSP 文件时它告诉我 HTTP 404 错误。

但是,如果我访问http://localhost:8080/shell/a.do,它运行良好。

我想知道原因,是不是因为向前动作不能被 Struts 2 过滤器捕获? (org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)

所以无法将 forward 分派给 Struts 2 动作?

我的应用程序中有很多转发,如果转发在 Struts 2 中无法工作,它是否是使用重定向而不是转发的唯一解决方案?

其实这个问题是基于我的分析,原来的工作是显示网站的欢迎页面。如果我使用jsp:forward 转发到a.do,它不起作用。

我听从了 Roman 的建议,使用 result 而不是 forward。那么现在的问题是如何配置整个应用的默认动作呢?

我试过&lt;default-action-ref name="a"/&gt;,但它只适用于未映射的操作,例如http://localhost:8080/shell2/(some-unmapped-action).do,它会转到默认操作。但如果我不指定".do",它就不起作用。

当然这可以通过url-rewrite来完成,但是我不想用这种方式。

【问题讨论】:

  • 大家好,我认为这个问题可以关闭,因为只有在我的web.xml中为struts2过滤器添加&lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;&lt;dispatcher&gt;INCLUDE&lt;/dispatcher&gt;&lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt;,这个问题才能得到解决。仅供参考。

标签: java jsp redirect struts2 forward


【解决方案1】:

包含struts标签库

<%@ taglib prefix="s" uri="/struts-tags" %>

你可以简单地在你的jsp页面中写一些动作

<s:action name="YourAction" namespace="/PackageNamespace" executeResult="true" />

【讨论】:

  • 为什么我们不能使用纯 html 而不是 struts2。除了直接提到 YourAction 之外,还有其他优势吗?
【解决方案2】:

Struts 1 中的forward 概念移至dispatcher result 概念。您必须从应用程序中删除所有 forwards 并创建 results。

【讨论】:

  • "您必须从您的应用程序中删除所有转发并创建结果。"这是一个很好的指针!但是,我真正的问题是当我输入localhost:8080/shell2时,我的意思是去主页,所以在我的welcom.jsp文件中(在web.xml中配置,welcome-file-list),请求可以是转发到一个 struts 1 动作。但这不能在struts 2中完成。我想做的只是转发到home.do(struts 2动作)。可能吗?我尝试过的方法如下: 1. ,失败,这只是匹配的URL不存在;
  • 2. 这行得通,但是所有不存在的url都会转到主页,这不是我想看到的。我想得到的只是一个默认的 HOME 动作。在struts 2中可以吗?再次非常感谢!
  • 默认操作是引用该操作来处理请求的操作,其中在包中找不到该操作的映射。如果您想将“/shell”映射到转发到“/home”的操作,您可以在包中使用namespace="/" do &lt;action name="shell2"&gt;&lt;result&gt;/home&lt;/result&gt;&lt;/action&gt;
  • 谢谢,罗曼。我试过你的建议,失败了。为了清楚起见,我想说,shell2 是我的应用程序名称。这是我的 struts.xml:&lt;package name="default" extends="struts-default" namespace="/"&gt; &lt;action name="shell2"&gt;&lt;result&gt;/home&lt;/result&gt; &lt;/action&gt; &lt;action name="home" class="com.broadvision.webflow.action.Struts2Action"&gt; &lt;param name="pack"&gt;&amp;packName;&lt;/param&gt; &lt;param name="flow"&gt;&amp;xflowDir;/{1}.xflow&lt;/param&gt; &lt;param name="loginRequired"&gt;false&lt;/param&gt; &lt;result name="success" type="redirect"&gt;/x3.jsp&lt;/result&gt; &lt;/action&gt; &lt;/package&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多