【问题标题】:Underscores and wildcard action mapping in Struts 2Struts 2 中的下划线和通配符操作映射
【发布时间】: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 有关? ActionSupportexecute() 方法提供默认的 SUCCESS 结果,它将用作默认操作。您是否尝试过准备一个小型演示应用来重现该问题?
  • 这个答案应该可以帮助你stackoverflow.com/a/17673308/573032

标签: struts2 wildcard-mapping


【解决方案1】:

为了支持某些遗留语法,通配符的匹配似乎很松散。所以问题不在于下划线,而在于松散的匹配模式。

来自javadocs

可以选择“松散地”匹配模式。当模式的结尾匹配\*[^*]\*$(通配符、无通配符、通配符)时,如果模式失败,则也匹配,就好像最后两个字符不存在一样。目标是支持旧的"*!*" 语法,其中"!*" 是可选的。

【讨论】:

  • 我在 Struts 2.3 文档中看到了该段落。它没有出现在我们正在使用的 Struts 2.0.x 的等效页面上。我想它的行为完全一样,尽管文档中没有提到......我想运行一个小测试来完全确定,但我没有时间去做(这就是为什么我花了这么长时间才接受答案,对此感到抱歉:)
猜你喜欢
  • 2011-07-25
  • 2016-09-10
  • 2012-01-15
  • 1970-01-01
  • 2010-11-18
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多