我正在尝试在Struts 2动作名称中启用斜杠。我把它放在我的配置文件中:
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.action.extension" value=","/>
<constant name="struts.multipart.maxSize" value="2147483648" />
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<package name="myApp" extends="struts-default">
<action name="home" class="net.myapp.actions.HomeAction" method="execute">
<result name="landing">/landing.jsp</result>
</action>
<action name="/ajax/foo" class="net.myApp.actions.ajax.FooAction" method="execute">
<result name="success">/foo.jsp</result>
</action>
</package>
</struts>
当我转到此应用的主页时,例如http://localhost:8034/myApp
,我正确看到了主页。但是,如果我访问http://localhost:8034/myApp/ajax/foo
,我会收到错误:There is no Action mapped for action name ajax/foo.
,即使我已将其描述为第二个操作。
我做错了什么?
答案 0 :(得分:3)
我说你也需要一个命名空间,所以ajax
就是你的命名空间:
<package name="myApp" extends="struts-default" namespace="/ajax">
<action name="foo" class="net.myApp.actions.ajax.FooAction" method="execute">
<result name="success">/foo.jsp</result>
</action>
</package>
请注意,您可以在动作名称中使用斜杠,例如foo/bar
,但这不可取,因为某些插件(例如会话插件)可能难以从/ajax/foo/bar
这样的字符串中确定命名空间和操作。
顺便说一下,错误消息显示为There is no Action mapped for action name ajax/foo.
,即struts会查找名为ajax/foo
的动作但您只有/ajax/foo
的动作。