1

我们正在开发一个基于 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 和非 RESTful URL 的共同配置中提到的相同

还有Struts2 REST 和 Non-REST action 一起

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

它是类中的错误org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper还是动作和命名空间应该总是有斜线?

4

1 回答 1

1

线下

REST 和非 RESTful URL 的共同配置

而且,我们再次依赖 Convention 插件来查找我们的控制器,因此我们需要稍微配置一下 Convention 插件:

<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 属性中使用带有前导斜杠的命名空间和不带斜杠的动作名称。这些值应与配置设置相对应。

于 2017-06-17T14:32:21.630 回答