有索引时Struts2和convention-plugin的行为(扩展ActionSupport)

时间:2012-11-21 02:13:08

标签: struts2 action-mapping struts2-namespace

我们在com.example.common.action下有一个名为'Index'的Action类,并注释了@ParentPackage('default'),它在struts.xml的package指令中声明,并且其命名空间为“/”扩展“struts-default”。它还声明@Result,以便它响应jsp文件,对应其execute()方法返回的字符串值。

在我们的struts.xml中,配置了以下struts设置以及convention-plugin所需的其他必要配置。

<constant name="struts.action.extension" value=","/>

当访问/ my_context / none_existing_path时,请求显然会命中此Index类,并返回在Index的@Result部分中声明的jsp的内容。 但是,如果我们提供/ my_context /,则会收到以下错误:

HTTP状态404-没有为名称空间[/]和与上下文路径[/ my_context]相关联的动作名称[]映射的动作。

我们想知道访问/ my_context / none_existing_path的原因,其中none_existing_path没有匹配的操作,可以回退到Index类,但是当请求的URL只是/ my_context /时,会返回错误。

目前,我们的约会插件设置声明如下:

<constant name="struts.convention.package.locators.basePackage" value="com.example"/>

<constant name="struts.convention.package.locators" value="action"/>

奇怪的是,如果我们将struts.convention.package.locators.basePackage的值更改为 om.example.common,其中可以通过缩小搜索范围立即找到上述索引文件,请求/ my_context /显示在Index类的@Result部分中声明的jsps的内容。但是,由于我们的操作类分布在整个com.example。[a-z] .action packages中,其中[a-z]表示我们在包结构中拥有的大量目录,因此我们不能将此技巧用作解决方法。我们还尝试将index.jsp放在类路径的顶层,并将index.jsp重定向到/ my_context / index,这有效但不是我们想要的。这可能是个错误吗?

感谢您的回复。 提前谢谢。

编辑:JIRA registered, problem solved (from Struts 2.3.12 up)

1 个答案:

答案 0 :(得分:0)

尝试将struts.convention.redirect.to.slash设置为false,看看是否有帮助:

<constant name="struts.convention.redirect.to.slash" value="false" />