Struts 2读书笔记-----使用Action的动态方法调用
struts 2提供了包含处理多个逻辑的Action,从而允许一个Action内包含多个控制处理逻辑。例如一个页面中存在多个按钮,用户通过不同的按钮提交同一个表单时,可以使用Action的不同的方法来处理用户的请求。如下图页面
页面中有两个提交按钮,但分别提交给Action的不同方法处理,“登陆”按钮使用登陆逻辑来处理请求,而“注册”按钮则使用注册逻辑来处理请求。
此时,可以采用动态方法调用来处理 这种请求。动态方法调用是指表单元素的action并不是直接等于某个Action的名字,而是以下面形式来指定表单的action属性
action属性为actionName!methodName形式 其中ActionName指定提交给那个Action,而methodName指定提交给该Action的某个方法。 即:action = ”ActionName!methodName"
上面的注册按钮是一个没有任何动作的按钮,但单击该按钮时会触发regist函数
1 <input type="submit" value="注册" onclick="regist();"> regist函数: 2 3 <script type="text/javascript"> 4 function regist(){ 5 targetForm = document.forms[0]; 6 targetForm.action = "login!regist"; 7 } 8 </script>
上面的regist方法改变表单的action属性,修改action的属性为“login!regist",其实质就是将该表单提交给LoginAction的regist方法处理
Login|Action类的代码:
1 public class LoginAction { 2 private String username; 3 private String password; 4 public String getUsername() { 5 return username; 6 } 7 public void setUsername(String username) { 8 this.username = username; 9 } 10 public String getPassword() { 11 return password; 12 } 13 public void setPassword(String password) { 14 this.password = password; 15 } 16 17 //定义处理用户请求的login方法 18 public String execute(){ 19 ActionContext ctx = ActionContext.getContext(); 20 Integer counter = (Integer) ctx.getApplication().get("counter"); 21 if(counter==null){ 22 counter = 1; 23 } 24 else { 25 counter = counter + 1; 26 } 27 28 ctx.getApplication().put("counter", counter); 29 //通过ActionContext()设置session范围的属性 30 ctx.getSession().put("user", getUsername()); 31 32 if(getUsername().equals("chentmt")&&getPassword().equals("chenssy")){ 33 //通过ActionContext()设置reque范围的属性 34 ctx.put("tip","服务器提示:您已经成功登陆....."); 35 return "success"; 36 } 37 else { 38 ctx.put("tip", "服务器提示:登陆失败"); 39 return "error"; 40 } 41 } 42 43 //Action包含的注册控制逻辑 44 public String regist(){ 45 ActionContext.getContext().getSession().put("user",getUsername()); 46 setTip("恭喜你,"+getUsername()+",您已经注册成功了...."); 47 return "success"; 48 } 49 50 }
上面的Action代码中定义了改Action里包含的register控制逻辑,在默认情况下,用户请求不会提交该方法。当在单击“登陆”按钮时,系统将提交给LoginAction的默认方法处理。当单击“注册”按钮时,该表单的action被修改为login!regist,系统将提交改LoginAction的regist方法处理。
通过这种方式,我们可以通过在一个Action中包含多个处理逻辑,并通过为该表单元素指定不同action属性来提交给Action的不同方法。
对于使用动态方法调用的方法,该方法的方法声明与系统默认的execute方法的方法只有方法名不同,其他部分如形参列表,返回值类型都应该完全相同。
在试用合格动态方法调用前必须设置Struts 2允许动态方法调用。开启系统的动态方法调用时通过设置struts.enable.DynamicMethodInvocation常量完成的。设置该常量为true,将开启动态方法调用;否则则关闭动态方法调用。
读李刚《轻量级java EE企业应用实战》
-
作者:chenssy。一个专注于【死磕 Java】系列创作的男人
出处:https://www.cnblogs.com/chenssy/archive/2012/07/13/2589681.html
作者个人网站:https://www.cmsblogs.com/。专注于 Java 优质系列文章分享,提供一站式 Java 学习资料
目前死磕系列包括:
1. 【死磕 Java 并发】:https://www.cmsblogs.com/category/1391296887813967872(已完成)
2.【死磕 Spring 之 IOC】:https://www.cmsblogs.com/category/1391374860344758272(已完成)
3.【死磕 Redis】:https://www.cmsblogs.com/category/1391389927996002304(已完成)
4.【死磕 Java 基础】:https://www.cmsblogs.com/category/1411518540095295488
5.【死磕 NIO】:https://www.cmsblogs.com/article/1435620402348036096
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。