博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
strus2中获取表单数据 两种方式 属性驱动 和模型驱动
阅读量:6677 次
发布时间:2019-06-25

本文共 4343 字,大约阅读时间需要 14 分钟。

strus2中获取表单数据 两种方式 属性驱动 和模型驱动

 

属性驱动

/**

* 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值
* 如果一个属性在对象栈,在页面上可以根据name属性进行回显
*/
/**
* 属性驱动实现的条件:
* 1、当前请求的action在栈顶,所以action中的属性就暴漏出来了
* 2、获取页面上表单的元素,整合成一个map
* 3、调用setValue方法赋值
*/

1 package cn.itcast.struts2.sh; 2  3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7  8 import com.opensymphony.xwork2.Action; 9 import com.opensymphony.xwork2.ActionContext;10 import com.opensymphony.xwork2.ModelDriven;11 import com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor;12 import com.opensymphony.xwork2.interceptor.ParametersInterceptor;13 import com.opensymphony.xwork2.util.ValueStack;14 15 public class UserAction {16         17     private String ss;18     public String getSs() {19         return ss;20     }21     public void setSs(String ss) {22         this.ss = ss;23     }24     public String setValue(){25         ValueStack valueStack = ActionContext.getContext().getValueStack();26         /**27          * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值28          * 如果一个属性在对象栈,在页面上可以根据name属性进行回显29          */30         31         /**32          * 属性驱动实现的条件:33          *    1、当前请求的action在栈顶,所以action中的属性就暴漏出来了34          *    2、获取页面上表单的元素,整合成一个map35          *    3、调用setValue方法赋值36          */37                 //或者直接给ss赋值,因为当前action会放到StackValue栈顶所以可以取相关的里面的数据38         valueStack.setValue("ss", "ss");39         List
userList = new ArrayList
();40 List
> users = new ArrayList
>();41 User user = new User();42 user.setUid(1L);43 user.setUname("aaa");44 userList.add(user);45 users.add(userList);46 ActionContext.getContext().put("users", users);47 48 Map
> map = new HashMap
>();49 map.put("userList", userList);50 ActionContext.getContext().put("map", map);51 return "index";52 }53 }

当 action中的与表单交互的基本数据项非常多的时候,在一个action中写很多基本元素显得代码非常臃肿,所以建立了一个Javaben 专门用于放基本数据,然后通过模型驱动的形式和页面进行交互,放在StackValue堆栈中

内部原理是用到一个模型驱动的拦截器ModelDrivenInterceptor类中的intercept方法 然后装载数据到自己写的javaben

然后会把 UserAction和 User都放到栈顶StackValue 中的

代码:自己定义的javaben

1 package cn.itcast.struts2.sh; 2  3 public class User { 4     private Long uid; 5     private String uname; 6     public Long getUid() { 7         return uid; 8     } 9     public void setUid(Long uid) {10         this.uid = uid;11     }12     public String getUname() {13         return uname;14     }15     public void setUname(String uname) {16         this.uname = uname;17     }18 }

action中装载这个javabean

1 package cn.itcast.struts2.sh; 2  3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7  8 import com.opensymphony.xwork2.Action; 9 import com.opensymphony.xwork2.ActionContext;10 import com.opensymphony.xwork2.ModelDriven;11 import com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor;12 import com.opensymphony.xwork2.interceptor.ParametersInterceptor;13 import com.opensymphony.xwork2.util.ValueStack;14 15 public class UserAction implements ModelDriven
{16 17 private User model = new User();18 19 public User getModel() {20 // TODO Auto-generated method stub21 return this.model;22 }23 24 private String ss;25 public String getSs() {26 return ss;27 }28 public void setSs(String ss) {29 this.ss = ss;30 }31 public String setValue(){32 ValueStack valueStack = ActionContext.getContext().getValueStack();33 /**34 * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值35 * 如果一个属性在对象栈,在页面上可以根据name属性进行回显36 */37 38 /**39 * 属性驱动实现的条件:40 * 1、当前请求的action在栈顶,所以action中的属性就暴漏出来了41 * 2、获取页面上表单的元素,整合成一个map42 * 3、调用setValue方法赋值43 */44 valueStack.setValue("ss", "ss");45 List
userList = new ArrayList
();46 List
> users = new ArrayList
>();47 User user = new User();48 user.setUid(1L);49 user.setUname("aaa");50 userList.add(user);51 users.add(userList);52 ActionContext.getContext().put("users", users);53 54 Map
> map = new HashMap
>();55 map.put("userList", userList);56 ActionContext.getContext().put("map", map);57 return "index";58 }59 }

 

转载地址:http://asyao.baihongyu.com/

你可能感兴趣的文章
学习webpack4 - 抽离公共代码
查看>>
【分享创造】react-typewriter-hook: 用react hooks来实现打字机的效果
查看>>
极限编程 (Extreme Programming) 和用户故事 (User Stories) 的关系
查看>>
coredns 排错记
查看>>
CentOS 7 安装 Nginx
查看>>
程序员毒鸡汤:我们都该学会正确的失败
查看>>
在 JavaScript 中优雅的提取循环内的数据
查看>>
HTML-语义类标签
查看>>
cookie、session、cache-control等
查看>>
一篇文章带你理解闭包
查看>>
Android权限列表
查看>>
Sass基础
查看>>
Webpack3简单入门2
查看>>
Springmvc+mybatis+restful+bootstrap框架整合
查看>>
ubuntu下rsync服务器端和客户端的配置
查看>>
UNIX/Linux 系统管理技术手册阅读(八)
查看>>
LINUX 软件安装。
查看>>
linux 批量文件重命名
查看>>
javascript使用xml 数据岛 简单实例
查看>>
Ubuntu 16.04安装Cobbler 2.9
查看>>