名称空间(和操作)应该以斜线开头吗?

Should the namespace (and action) start with a slash?

我们正在开发 Struts 2 基础 Web 应用程序。

请告诉我 Strust 2 应用程序中哪个是正确的(标准)

<s:url var="url" action="foo" namespace="bar" />
<s:url var="url" action="/foo" namespace="/bar" />
<s:url var="url" action="foo" namespace="/bar" />

长话短说:

为了得到一个动作url我们总是在下面使用

<s:url var="url" action="foo" namespace="bar" />

我们尝试将休息支持添加到我们的应用程序中,并使我们的应用程序支持休息和非休息操作,与 REST and non-RESTful URL's Together Configuration

中提到的相同

还有Struts2 REST and Non-REST action together.

似乎 <s:url var="url" action="foo" namespace="bar" /> 总是映射到默认操作,而 <s:url var="url" action="/foo" namespace="/bar" /> 工作正常。

这是 org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper 中的错误 class 还是操作和命名空间应该始终带有斜线?

线下

REST and non-RESTful URL's Together Configuration

And, again, we're relying on the Convention plugin to find our controllers, so we need to configure the convention plugin a bit:

<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="example"/>

说你应该使用约定插件,这意味着基于约定的动作映射器。此映射器 允许 带有前导斜杠的操作名称。您使用 Struts 多年,应该知道默认操作映射器不会。

s:url 标记没有在配置中定义任何名称空间或操作,它使用 UrlHelper 根据自己的逻辑生成 url。生成的内容用于访问动作映射器。通常 URL 是用

生成的
 http://<host>:<port>/<context>/<namespace>/<action>[.<extension>]

如果您打印从标签生成的 url,您会看到哪个是正确的。我们在 action 属性中使用带有前导斜杠和不带斜杠的动作名称的命名空间。这些值应与配置设置相对应。