struts 2应该命名空间(和action)以斜杠开头

时间:2017-06-17 07:21:43

标签: java rest struts2

我们正在开发一个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" />

长篇故事:

要获取我们一直使用的动作网址

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

我们尝试将其余支持添加到我们的应用程序中,并使我们的应用程序支持与

中提到的相同的休息和非休息操作

http://struts.apache.org/docs/rest-plugin.html#RESTPlugin-RESTandnon-RESTfulURL%27sTogetherConfiguration

以及

https://github.com/sivailango/struts2-rest-nonrest

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

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

1 个答案:

答案 0 :(得分:1)

在线下

  

REST and non-RESTful URL's Together Configuration

     

而且,我们再一次依靠“公约”插件找到我们的   控制器,所以我们需要稍微配置一下约定插件:

<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"/>

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

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

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

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