0

我正在尝试在 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.即使我在上面将其描述为第二个动作。

我究竟做错了什么?

4

1 回答 1

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

于 2013-10-01T10:54:57.397 回答