0
点赞
收藏
分享

微信扫一扫

struts中3种情况通配符的使用方法 及 动态方法调用


一、概念

应用可能有很多个action 声明,可把多个相似的映射关系简化为一个映射关系的机制 (多个Action类----一个action标签)
     通配符映射规则:

一般使用“*” 匹配零个或多个字符,被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用。 {1} 匹配第一个子串, {2} 匹配第二个子串…以此类推。
若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名进行匹配 。
若带有通配符的匹配多个, 以最后一个匹配为准。


二、三种通配符的使用方法(具体看代码示例)

1.不同的Action类中,同样功能的方法通配

2.同一个Action类中,不同功能的方法通配

3.不同Action类中,不同功能的方法的通配

 

三、动态方法调用

动态方法调用: 通过在 url 中指定方法名动态调用 Action 中的方法

语法形式:action名字+!+调用的Action方法名。

Struts 2动态方法默认可用, 则可在 struts.xml 文件中添加 constant 元素禁用该功能:

<constant name="struts.enable.DynamicMethodInvocation" value="false"/>

<!-- 示例一: 不同的Action类中,同样功能的方法通配。如下:通配到了不同action中的add方法 -->
<action name="*_add" class="com.tianci.struts2_xxxx.{1}"
method="add">
<result name="add">
struts2_xxxx/{1}.jsp
</result>
</action>



<!-- 示例二:同一个Action类中,不同功能的方法通配。 -->
<!-- 都能匹配上,则在最前面的优先覆盖掉后面的。如:本例中测试,accAction_add.action 时。匹配到的结果是:add方法。 -->
<action name="OrderAction_*" class="com.tianci.struts2_xxxx.accAction"
method="{1}">
<result name="add">
struts2_xxxx/Add.jsp
</result>
<result name="delete">
struts2_xxxx/Delete.jsp
</result>
</action>


<!-- 示例三:不同Action类中,不同功能的方法的通配。 -->
struts2_xxxx/CustomerAction_delete.action;
struts2_xxxx/accAction_add.action; /struts2_xxxx/accAction_delete.action; -->
<action name="*_*" class="com.tianci.struts2_xxxx.{1}"
method="{2}">
<result name="add">
struts2_xxxx/{1}.jsp
</result>
<result name="delete">
struts2_xxxx/Delete.jsp
</result>
</action>


<!-- 动态方法调用 语法形式:action名字+!+调用的Action方法名-->
<!--示例:如在本地访问时,项目名为:struts2;namespace名为:struts2_wildcard
accAction中add方法的url为"http://localhost:8080/struts2/struts2_xxxx/accAction!add" -->
<action name="OrderAction" class="com.tianci.struts2_xxxx.accAction">
<result name="add">
struts2_xxxx/Add.jsp
</result>
</action>


举报

相关推荐

0 条评论