jsp:forward标签转发到Struts 2动作

时间:2013-04-17 09:16:50

标签: java jsp redirect struts2 forward

我正在将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

那么前锋不能被派遣到Struts 2行动?

我的应用程序中有很多前锋,如果前锋在Struts 2中不起作用,它是唯一使用重定向而不是前进的解决方案吗?

实际上这个问题是基于我的分析,原来的工作是显示网站的欢迎页面。如果我使用jsp:forward转发到a.do,它就不起作用。我按照罗马的建议,使用result代替前进。那么现在的问题是如何为整个应用程序配置默认操作?

我尝试了<default-action-ref name="a"/>,但它仅适用于未映射的操作,例如http://localhost:8080/shell2/(some-unmapped-action).do,它会转到默认操作。但如果我没有指定".do",它就不起作用。

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

2 个答案:

答案 0 :(得分:4)

包含struts标记库

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

你可以简单地在你的jsp页面中写入for action to some action

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

答案 1 :(得分:1)

这是404,因为如果你同时使用它,struts2和struts1中没有映射/a.do的动作。 jsp标签应该可以正常工作,但最好尽可能移动到struts tags。 struts1的前进概念转移到了dispatcher result的概念。您必须从应用程序中删除所有转发并改为创建结果。