【发布时间】:2014-05-06 02:50:38
【问题描述】:
我正在使用具有以下操作映射的 Struts 2 webapp:
<action name="something_*" class="foo.whatever.MyAction" method="{1}">
<result>blah/myJsp.jsp</result>
...
</action>
因此,如果我加载 URL /something_load.action,它会调用 MyAction.load(),依此类推。小菜一碟。令我困惑的是加载/something.action 也确实有效(我猜它正在调用execute() 方法)。 怎么可能? 我的操作映射应该匹配“something_”,但我的网址中没有下划线。 它应该给我一个错误!不应该吗?
我已经仔细检查了 struts 配置文件中没有“something.action”的另一个映射。我还检查了 web.xml 文件,以防万一……
我能想到的唯一解释是,如果我使用通配符映射,Struts 中会忽略下划线。但是,加载 /something_load.action、/some_thing_lo_ad.action... 并没有什么区别,这不是真的。
我知道这一定是一个非常愚蠢的问题,但我无法解决这个谜团,既没有查看 Stackoverflow 问题,也没有查看 Struts documentation。
这是主要的 struts.xml 文件:
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.freemarker.templatesCache" value="true" />
<package name="default" extends="struts-default">
<!-- interceptors ... -->
<!-- global results for error pages -->
</package>
<!-- lots of includes -->
</struts>
【问题讨论】:
-
似乎最后一个下划线被“修剪”了(显然,动作名称中间的那些没有)。奇怪的东西,+1
-
@AndreaLigios 感谢您的编辑,我想知道为什么我的 XML 显示时没有语法高亮 :)
-
是的,如果无法通过标签准确推断语言,则需要添加该语法突出显示代码(将问题标记为“xml”只是为了拥有它是不正确的格式化:)
-
可能与
default-action-ref或index.action 有关?ActionSupport为execute()方法提供默认的SUCCESS结果,它将用作默认操作。您是否尝试过准备一个小型演示应用来重现该问题? -
这个答案应该可以帮助你stackoverflow.com/a/17673308/573032