Struts2.5要实现一个action调用不同的方法,一般来说三种方式:
一,指定method属性。
<action name="login" class="com.action.XXXAction" method="redirect"> <!-- redirectAction返回类型 --> <result type="redirectAction"> <param name="actionName">userLogin</param> <!-- Action名参数 --> <param name="namespace">/user</param> <!-- 命名空间参数 --> </result> </action>
二,感叹号方式。(需要开启,虽然官网不推荐使用这种方式,但我还是要用!)
先开启一个开关:
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <!-- 配置包default,该包继承了struts-default --> <package name="default" extends="struts-default">
以上代码一般在开头就行。需要注意的是2.5不仅需要打开这个开关,还需要声明你访问的方法:
<package name="default" namespace="/" extends="struts-default"> <global-allowed-methods>这里是你要声明的此package所有action通用的方法名</global-allowed-methods> <!-- 配置名为login的Action,实现类为LoginAction --> <action name="login" class="com.action.LoginAction" > <!-- redirectAction返回类型 --> <result type="redirectAction"> <param name="actionName">userLogin</param> <!-- Action名参数 --> <param name="namespace">/user</param> <!-- 命名空间参数 --> </result> <!-- 返回值为error,redirectAction类型,重定向到名为error的Action --> <result name="error" type="redirectAction">error</result> <allowed-methods>getoper,getmobile</allowed-methods> <!-- 这里是你要声明的此action独有的方法名,多个方法名以逗号相隔 --> </action>
三,通配符方式。(这种方式是官网推荐的方式!)
<action name="login_*" class="com.action.LoginAction" method="{1}"> <!-- redirectAction返回类型 --> <result type="redirectAction"> <param name="actionName">userLogin</param> <!-- Action名参数 --> <param name="namespace">/user</param> <!-- 命名空间参数 --> </result> <!-- 返回值为error,redirectAction类型,重定向到名为error的Action --> <result name="error" type="redirectAction">error</result> <allowed-methods>redirect</allowed-methods> </action> 这个方式需要注意的是,要先将方式2中开关关掉,即 <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 将ture改为false。struts2.5.5是默认false的。 并且同样需要在<allowed-methods>中声明允许访问的方法名, 要访问这个方式的方法只需要在jsp文件中 <s:a action="login_redirect">redirect</s:a> 这样写就可以访问我之前声明的redirect()方法的。login_*里的*就是通配符。