在struts2框架中,调用方法有三种方式,首先是最简单的默认调用Execute()方法【action中method没有指定】,另外就是指定Method方法,在固定的java类中找到匹配的方法进行方法调用,这样子假如有多个方法存在的情况下,会造成action有很多很多个,于是出来了另一种方式——动态方法调用。
第二种方式:感叹号方式(需要开启),可是貌似官网不推荐使用这种方式,具体原因我也没有查询到,有人知道的话告诉我一下.
用这种方式需要先开启一个开关
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
将此常量设置为true,这种方式才能使用,如下:
<package name="dynamic" extends="struts-default" namespace="/">
<action name="action2" class="com.hchx.action.ActionDemo2">
<result>/success.jsp</result>
</action>
</package>
页面中如下写:
<a href="${pageContext.request.contextPath}/action2save.do">保存用户</a>
<a href="${pageContext.request.contextPath}/action2delete.do">删除用户</a>
<a href="${pageContext.request.contextPath}/action2update.do">更新用户</a>
<a href="${pageContext.request.contextPath}/action2find.do">查找用户</a>
<span>第三种方式:通配符方式(官网推荐使用) </span>
<span></span><span> 首先得关闭开关,在struts.xml中不用配置常量就好,因为在default-properties中这个常量是默认关闭的,如下:</span>
<package name="tp" extends="struts-default" namespace="/">
<action name="*-*" class="com.hchx.action.{1}" method="{2}">
<result>${targetPage}</result>
</action>
</package>
注:*代表的就是通配符,“-”是一种分隔符,{}中写阿拉伯数字,数字几代表的就是第几个星号。
页面中这样写:
</pre><p> </p><pre class="java" name="code"> <a href="${pageContext.request.contextPath}/ActionDemo3-save.do">保存用户</a>
<a href="${pageContext.request.contextPath}/ActionDemo3-delete.do">删除用户</a>
<a href="${pageContext.request.contextPath}/ActionDemo3-update.do">更新用户</a>
<a href="${pageContext.request.contextPath}/ActionDemo3-find.do">查找用户</a>
页面中的action中有分隔符"-",在配置文件中就开始找有-的action,然后开始对应的执行方法,TargetPage是在java类中定义的一个常量,意为目标页面,在执行完不同的方法后,给TargetPage赋值,return都为SUCCESS,这样也能更加方便的执行程序,在方法中定义好目标页面,在struts.xml中获取这个页面值,比较另类的实现了多态的实现,这样狭义的理解吧。。。