struts2动态方法调用
2016-05-13 11:52
459 查看
当我们访问一个Action时,默认是访问execute()方法,但当在一个Action中存存多个方法时,这时我们应该怎么定位到想要访问的方法呢?这时就需要用到动态方法调用DMI(Dynamic Method Invocation)。这里简单介绍两种动态调用的方法:
一、method属性
二、通配符
一、method属性
在struts.xml文件中,我们可以指定method属性,来定位我们要访问的方法,如下代码:
[html] view plain copy print?<action name=“dmi-register” class=“dmi.LoginRegisterAction” method=“register”></action>
下面通过一个登录注册的demo来演示一下具体的操作过程:
一)、LoginRegisterAction 源文件部分代码如下:
[java] view plain copy print?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 文件部分配置如下:
[html] view plain copy print?<!– 动态方法调用 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文件代码如下:
[java] view plain copy print?<html>
<head>
<title>struts2之动态方法调用</title>
<script type=”text/javascript” src=“../jquery-1.4.3.js”></script>
<script type=”text/javascript”>
(function(){ </span></li><li class="alt"><span> (function(){
(<span class="string">"#register2"</span><span>).click(function(){ </span></span></li><li class=""><span> var node=$(”#myForm2”);
node.attr(”action”,“dmi-register.action”);
});
})
</script>
</head>
<body>
<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() 方法:
[java] view plain copy print?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 文件部分配置如下:
[html] view plain copy print?<!– 动态方法调用 通配符–>
<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文件增加如下代码:
[html] view plain copy print?("#register").click(function(){ </span></span></li><li class=""><span> var <span class="attribute">node</span><span>=$("#myForm"); </span></span></li><li class="alt"><span> node.attr("action","dmiRegisterAction.action"); </span></li><li class=""><span>}); </span></li></ol></div><pre class="html" name="code" style="display: none;">("#register").click(function(){
var node=$("#myForm");
node.attr("action","dmiRegisterAction.action");
});
到此,struts2的动态方法调用就介绍完了,希望对Java爱好者有所帮助,如果有写得不好或有错误之处,还请帮忙指正,谢谢
一、method属性
二、通配符
一、method属性
在struts.xml文件中,我们可以指定method属性,来定位我们要访问的方法,如下代码:
[html] view plain copy print?<action name=“dmi-register” class=“dmi.LoginRegisterAction” method=“register”></action>
<action name="dmi-register" class="dmi.LoginRegisterAction" method="register"></action>
下面通过一个登录注册的demo来演示一下具体的操作过程:
一)、LoginRegisterAction 源文件部分代码如下:
[java] view plain copy print?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;
}
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 文件部分配置如下:
[html] view plain copy print?<!– 动态方法调用 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>
<!-- 动态方法调用 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文件代码如下:
[java] view plain copy print?<html>
<head>
<title>struts2之动态方法调用</title>
<script type=”text/javascript” src=“../jquery-1.4.3.js”></script>
<script type=”text/javascript”>
(function(){ </span></li><li class="alt"><span> (function(){
(<span class="string">"#register2"</span><span>).click(function(){ </span></span></li><li class=""><span> var node=$(”#myForm2”);
node.attr(”action”,“dmi-register.action”);
});
})
</script>
</head>
<body>
<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>[html] view plain copy print? <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>
<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() 方法:
[java] view plain copy print?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;
}
}
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 文件部分配置如下:
[html] view plain copy print?<!– 动态方法调用 通配符–>
<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" 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文件增加如下代码:
[html] view plain copy print?("#register").click(function(){ </span></span></li><li class=""><span> var <span class="attribute">node</span><span>=$("#myForm"); </span></span></li><li class="alt"><span> node.attr("action","dmiRegisterAction.action"); </span></li><li class=""><span>}); </span></li></ol></div><pre class="html" name="code" style="display: none;">("#register").click(function(){
var node=$("#myForm");
node.attr("action","dmiRegisterAction.action");
});
(“#register”).click(function(){ var node=$(“#myForm”); node.attr(“action”,”dmiRegisterAction.action”); }); [html] view plain copy print?<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> <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爱好者有所帮助,如果有写得不好或有错误之处,还请帮忙指正,谢谢
相关文章推荐
- 【JAVA】Java语言入门
- Java类集框架
- Struts2核心工作原理解析
- eclipse中安装maven
- C3P0配置实战
- Java程序优化细节
- 【第九章】 Spring的事务 之 9.3 编程式事务 ——跟我学spring3
- JAVA 设置环境变量批处理
- java复合语句与条件语句
- java笔记(2)
- java中的批处理
- eclipse插件安装
- java读取文件方法总结
- JAVA WEB进阶一
- SpringMVC 使用poi导出excel简单小例子
- JAVA开发基本设置
- SpringMVC通过注解@Value获取properties配置
- 验证码的生成与验证,控制层工具
- eclipse更新错误svn403 Forbidden
- Spring基础知识(6)-AOP2