我们正在开发一个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" />
我们尝试将其余支持添加到我们的应用程序中,并使我们的应用程序支持与
中提到的相同的休息和非休息操作以及
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
类中的错误还是操作和命名空间应该总是有斜杠
答案 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
根据自己的逻辑生成网址。生成的内容用于访问动作映射器。通常使用
http://<host>:<port>/<context>/<namespace>/<action>[.<extension>]
如果您打印从标签生成的网址,您将看到哪个网址是正确的。我们在action属性中使用带有斜杠和动作名称的名称空间而没有斜杠。这些值应与配置设置相对应。