我正在将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完成,但我不想使用这种方法。
答案 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的概念。您必须从应用程序中删除所有转发并改为创建结果。