via: http://blog.csdn.net/longwentao/article/details/6940289
当我们访问一个Action时,默认是访问execute()方法,但当在一个Action中存存多个方法时,这时我们应该怎么定位到想要访问的方法呢?这时就需要用到动态方法调用DMI(Dynamic Method Invocation)。这里简单介绍两种动态调用的方法:
一、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>
三)、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" />
密 码:<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 name="*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>
在访问时 动态方法调用 URL为: http://localhost:8080/projectname/package/actionname!methodname.do
注意: 要使用动态方法调用,必须社会自允许struts2允许动态方法调用,通过设置struts.enable.DynamicMethodInvocation常量来完成,该常量属性的默认值是true
相关推荐
NULL 博文链接:https://takeme.iteye.com/blog/1631525
Struts2动态方法调用 包括 1.js方法调用 2.普通的表单提交调用 3.通配符
传智播客struts2.1源代码_动态方法调用和使用通配符定义
struts2中动态方法的调用,如何实现动态方法调用
struts 1框架的动态调用也许你会,但是struts2 的动态调用更经典,这个文档让你玩转struts 2 动态调用.......
1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp-------------------------------采用struts标签的登陆页面 login_struts_...
1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp-------------------------------采用struts标签的登陆页面 login_struts_...
1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp-------------------------------采用struts标签的登陆页面 login_struts_...
1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp-------------------------------采用struts标签的登陆页面 login_struts_...
本文档主要介绍了struts2中API耦合的三种方法以及动态方法调用(Dynamic Method Invoked)的两种方法,希望对你有所帮助,谢谢!
利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...
使用Java struts+spring_ibaits+调用Mysql存储过程 实现增删改查
NULL 博文链接:https://cdxs2.iteye.com/blog/1925232
struts2动态调用之通配符,相当于是改进的method动态调用方法,减少对同一action不同method的多次配置
struts动态访问调用之一,采用method属性,同一个Action内的不同方法来响应用户请求
3.2. Struts2的Action调用业务逻辑 - 19 - 3.2.1. 登录Action--OpenIDLoginAction - 19 - 3.2.2. 进入的Action—FirstPageAction - 20 - 3.3. JSP页面 - 20 - 3.4. 运行示例 - 21 - 3.4.1. 登录 - 21 - 3.4.2. ...
struts2利用通配符调用同一个Action里面不同的方法,在struts.xml配置文件中将请求方法的不相同部分抽象成“*".
因为Struts作者帮我们写好了一个actionServlet,他写这个servlet的目的是希望所有请求都交给它预处理,它预处理完后,再调用你写的action处理请求。当然,Struts的actionServlet在对请求进行预处理时,会帮我们做好...
使用技术说明: 1.使用struts2+spring3+hibernate3整合实现用户CRUD功能... A.OGNL(对象导航、方法调用、集合对象) B.高级action(动态action) c.拦截器(MethodFilterIntercepter) 3.实现方式 基于配置文件