Struts2.5的action动态方法调用(转)

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_*里的*就是通配符。

猜你喜欢

转载自coyotestark.iteye.com/blog/2374851
今日推荐