可以通过以下几种方式实现Struts2动态方法调用:
1、指定多个对应action的method(不指定的默认对应execute方法),result标签当中未指定name属性则默认为SUCCESS
代码片段:
<action name="addAction" method="add" class="action.Struts2_1">
<result>/add.jsp</result>
</action>
<action name="updateAction" method="update" class="action.Struts2_1">
<result>/update.jsp</result>
</action>
2、感叹号方式(不推荐):在一个action里面设置多个带有名字的result,并且设置对应名字返回值的方法,调用的时候,在action域名后面加上!写入对应方法的名字 通过不同方法的不同返回值调用对应的result。需要在structs.xml设置:
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
代码片段:
<action name="addAction" class="action.Struts2_1">
<result name="add">/add.jsp</result><!--匹配调用的方法的返回结果与name属性值-->
3通配符方法(推荐):{1}对应第一个*输入的字符串{2}对应第二个*位置输入的字符串{3}对应第三个*输入的字符串等等 。使用通配符可以指定不同包下的不同Action类的不同方法。指定方法的对应通配符空缺会默认调用execute方法。
代码片段:
<action name="struts2_1_*_*_*" method="{3}" class="{1}.{2}">
<result>/result.jsp</result>
<result name="{3}">/{3}.jsp</result><!-- 使用通配符方式 (匹配调用的方法的返回结果与name属性值,相同则显示对应的jsp页面-->
</action>
此外如果在struts2.5下使用感叹号方式或通配符方法,需要在 struts.xml 添加了这么个属性:<global-allowed-methods>regex:.*</global-allowed-methods>