struts2之动态方法调用

4 篇文章 0 订阅
3 篇文章 0 订阅

当我们访问一个Action时,默认是访问execute()方法,但当在一个Action中存存多个方法时,这时我们应该怎么定位到想要访问的方法呢?这时就需要用到动态方法调用DMI(Dynamic Method Invocation)。这里简单介绍两种动态调用的方法:
一、method属性
二、通配符

一、method属性
在struts.xml文件中,我们可以指定method属性,来定位我们要访问的方法,如下代码:

<action name="dmi-register" class="dmi.LoginRegisterAction" method="register"></action>

下面通过一个登录注册的demo来演示一下具体的操作过程:
一)、LoginRegisterAction 源文件部分代码如下:

    private String userName;
    private String password;

    //默认执行登录功能
    public String execute() {
        if ("admin".equals(userName) && "123".equals(password)) {
            ActionContext context = ActionContext.getContext();
            context.getSession().put("tip", "恭喜你" + userName + "你已经登成功");
            return SUCCESS;
        } else {
            return ERROR;
        }
    }

    public String register() {
        ActionContext context = ActionContext.getContext();
        context.getSession().put("tip", "恭喜你" + userName + "你已经注册成功");
        return SUCCESS;
    }
}

二)、struts.xml 文件部分配置如下:

        <!-- 动态方法调用 method属性-->
        <action name="dmi-login" class="dmi.LoginRegisterAction">
            <result name="input">/dmi/login.jsp</result>
            <result name="error">/dmi/error.jsp</result>
            <result name="success">/dmi/welcome.jsp</result>
        </action>
        <action name="dmi-register" class="dmi.LoginRegisterAction" method="register" >
            <result name="input">/dmi/login.jsp</result>
            <result name="error">/dmi/error.jsp</result>
            <result name="success">/dmi/welcome.jsp</result>
        </action>

以上struts.xml文件配置中,dmi-login默认对应Action中的execute()方法,dmi-register由于加了method=”register”属性,则对应Action中的register()方法。

三)、loginRegister.jsp文件代码如下:

<html>
    <head>
        <title>struts2之动态方法调用</title>
        <script type="text/javascript" src="../jquery-1.4.3.js"></script>
        <script type="text/javascript">
            $(function(){              
                $("#register2").click(function(){
                    var node=$("#myForm2");
                    node.attr("action","dmi-register.action");
                });
            })
        </script>
    </head>
    <body>
        <h4>动态方法调用之method属性</h4>
        <form id="myForm2" action="dmi-login.action">
            用户名:<input type="text" name="userName" />
            密&nbsp;码:<input type="password" name="password" />
            <input type="submit" value="登录"  />
            <input type="submit" id="register2" value="注册"  />
        </form>
    </body>
</html>

在一个form表单中,有登录、注册两个动作,分别对应Action中的不同方法,登录 默认对应execute()方法,注册对应register()方法,这样,通过method属性实现动态方法调用的操作就完了,但是struts.xml文件中的配置存存冗余问题,这时我们可以通过通配符来解决这个问题。

二、通配符
一)、为了更好的说明问题,我们在LoginRegisterAction 源文件中增加以下两个方法,方法实现功能与上面的完成一样,主要用于体现 登录 不在调用默认的 execute() 方法,而是对应于Action中的 dmiLogin() 方法,注册 对应Action中的 dmiRegister() 方法:

public String dmiRegister() {
    ActionContext context = ActionContext.getContext();
    context.getSession().put("tip", "恭喜你" + userName + "你已经注册成功");
    return SUCCESS;
}

public String dmiLogin(){
    if ("admin".equals(userName) && "123".equals(password)) {
        ActionContext context = ActionContext.getContext();
        context.getSession().put("tip", "恭喜你" + userName + "你已经登成功");
        return SUCCESS;
    } else {
        return ERROR;
    }
}

二)、struts.xml 文件部分配置如下:

        <!-- 动态方法调用 通配符-->
        <action name="*Action" class="dmi.LoginRegisterAction" method="{1}" >
            <result name="input">/dmi/login.jsp</result>
            <result name="error">/dmi/error.jsp</result>
            <result name="success">/dmi/welcome.jsp</result>
        </action>   

上面的不是一个普通的Action,而是一个定义了一系列的逻辑Action,只要用户请求的URL是Action模式的,都可能用该Action来处理;method属性值不再是Action中的哪一个方法,而是一个表达式,该表达式的值是name属性中的第一个的值。例如用户请求的URL是:dmiLoginAction.action,则调用LoginRegisterAction中的dmiLogin方法。
三)、loginRegister.jsp文件增加如下代码:

$("#register").click(function(){
    var node=$("#myForm");
    node.attr("action","dmiRegisterAction.action");
});
<h4>动态方法调用之通配符</h4>
<form id="myForm" action="dmiLoginAction.action">
    用户名:<input type="text" name="userName" />
    密 码:<input type="password" name="password" />
    <input type="submit" value="登录"  />
    <input type="submit" id="register" value="注册"  />
</form>


到此,struts2的动态方法调用就介绍完了,希望对Java爱好者有所帮助,如果有写得不好或有错误之处,还请帮忙指正,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值