首页 > 代码库 > strus2中获取表单数据 两种方式 属性驱动 和模型驱动
strus2中获取表单数据 两种方式 属性驱动 和模型驱动
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、获取页面上表单的元素,整合成一个map 35 * 3、调用setValue方法赋值 36 */ 37 //或者直接给ss赋值,因为当前action会放到StackValue栈顶所以可以取相关的里面的数据 38 valueStack.setValue("ss", "ss"); 39 List<User> userList = new ArrayList<User>(); 40 List<List<User>> users = new ArrayList<List<User>>(); 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<String, List<User>> map = new HashMap<String, List<User>>(); 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<User>{ 16 17 private User model = new User(); 18 19 public User getModel() { 20 // TODO Auto-generated method stub 21 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、获取页面上表单的元素,整合成一个map 42 * 3、调用setValue方法赋值 43 */ 44 valueStack.setValue("ss", "ss"); 45 List<User> userList = new ArrayList<User>(); 46 List<List<User>> users = new ArrayList<List<User>>(); 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<String, List<User>> map = new HashMap<String, List<User>>(); 55 map.put("userList", userList); 56 ActionContext.getContext().put("map", map); 57 return "index"; 58 } 59 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。