2

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

在我们的 struts.xml 中,配置了以下 struts 设置以及约定插件所需的其他必要配置。

<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,通过缩小搜索范围可以立即找到前面提到的Index文件,请求/my_context/显示的内容在 Index 类的 @Result 部分中声明的 jsps。但是,由于我们的操作类分布在 com.example.[az].action 包中,其中 [az] 表示我们在包结构中拥有的大量目录,因此我们不能使用此技巧作为解决方法。我们还尝试将 index.jsp 放置在类路径的顶层,并将 index.jsp 重定向到 /my_context/index,这确实有效,但不是我们想要的。这可能是一个错误吗?

我们感谢您的回复。先感谢您。

编辑:已注册 JIRA,问题已解决(从 Struts 2.3.12 开始)

4

1 回答 1

0

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

<constant name="struts.convention.redirect.to.slash" value="false" />
于 2013-02-12T07:53:11.350 回答