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

属性驱动

/**
* 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值
* 如果一个属性在对象栈,在页面上可以根据name属性进行回显
*/

/**
* 属性驱动实现的条件:
* 1、当前请求的action在栈顶,所以action中的属性就暴漏出来了
* 2、获取页面上表单的元素,整合成一个map
* 3、调用setValue方法赋值
*/

 package cn.itcast.struts2.sh;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor;
import com.opensymphony.xwork2.interceptor.ParametersInterceptor;
import com.opensymphony.xwork2.util.ValueStack; public class UserAction { private String ss;
public String getSs() {
return ss;
}
public void setSs(String ss) {
this.ss = ss;
}
public String setValue(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值
* 如果一个属性在对象栈,在页面上可以根据name属性进行回显
*/ /**
* 属性驱动实现的条件:
* 1、当前请求的action在栈顶,所以action中的属性就暴漏出来了
* 2、获取页面上表单的元素,整合成一个map
* 3、调用setValue方法赋值
*/
//或者直接给ss赋值,因为当前action会放到StackValue栈顶所以可以取相关的里面的数据
valueStack.setValue("ss", "ss");
List<User> userList = new ArrayList<User>();
List<List<User>> users = new ArrayList<List<User>>();
User user = new User();
user.setUid(1L);
user.setUname("aaa");
userList.add(user);
users.add(userList);
ActionContext.getContext().put("users", users); Map<String, List<User>> map = new HashMap<String, List<User>>();
map.put("userList", userList);
ActionContext.getContext().put("map", map);
return "index";
}
}

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

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

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

代码:自己定义的javaben

 package cn.itcast.struts2.sh;

 public class User {
private Long uid;
private String uname;
public Long getUid() {
return uid;
}
public void setUid(Long uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}

action中装载这个javabean

 package cn.itcast.struts2.sh;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor;
import com.opensymphony.xwork2.interceptor.ParametersInterceptor;
import com.opensymphony.xwork2.util.ValueStack; 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 } private String ss;
public String getSs() {
return ss;
}
public void setSs(String ss) {
this.ss = ss;
}
public String setValue(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值
* 如果一个属性在对象栈,在页面上可以根据name属性进行回显
*/ /**
* 属性驱动实现的条件:
* 1、当前请求的action在栈顶,所以action中的属性就暴漏出来了
* 2、获取页面上表单的元素,整合成一个map
* 3、调用setValue方法赋值
*/
valueStack.setValue("ss", "ss");
List<User> userList = new ArrayList<User>();
List<List<User>> users = new ArrayList<List<User>>();
User user = new User();
user.setUid(1L);
user.setUname("aaa");
userList.add(user);
users.add(userList);
ActionContext.getContext().put("users", users); Map<String, List<User>> map = new HashMap<String, List<User>>();
map.put("userList", userList);
ActionContext.getContext().put("map", map);
return "index";
}
}

strus2中获取表单数据 两种方式 属性驱动 和模型驱动的更多相关文章

  1. js中获取css样式的两种方式

    1. 对象.style.样式名  弊端就是只能获取行内样式 2.window.getComputedStyle(对象,null); 最好用第二种方式 <!DOCTYPE html> < ...

  2. 从request中获取文件流的两种方式,配置文件上传大小

    原文地址:https://blog.csdn.net/xyr05288/article/details/80692132

  3. JavaWeb后台从input表单获取文本值的两种方式

    JavaWeb后台从input表单获取文本值的两种方式 #### index.html <!DOCTYPE html> <html lang="en"> & ...

  4. Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式

    建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...

  5. 怎样在Android开发中FPS游戏实现的两种方式比较

    怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...

  6. .Net 中读写Oracle数据库常用两种方式

    .net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...

  7. SparkStreaming获取kafka数据的两种方式:Receiver与Direct

    简介: Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式,可以简单理解成: Receiver方式是通过zookeeper来连接kafka队列, Dire ...

  8. javascript获取表单值的7种方式

    见代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF- ...

  9. HTML中设置背景图的两种方式

    HTML中设置背景图的两种方式 1.background    background:url(images/search.png) no-repeat top; 2.background-image ...

随机推荐

  1. AcmeAir

    AcmeAir是一款由原 IBM 新技术架构部资深工程师Andrew Spyker,利用Netflix开源的Netflix OSS打造的开源电子商务应用.访问这里可以了解原作者的设计初衷: http: ...

  2. ios开发--第三方整理

    一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github. ...

  3. 让ie6也支持max-width,和max-height实现图片等比例缩放

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. springMVC找不到JS等文件

     应用springMVC时 JS等文件找不到错误 应用springMVC时如果配置URL映射时如下配置 <servlet>        <servlet-name>appSe ...

  5. Java数组排序

    Java数组排序Arrays.sort,以及Comparator接口的用法 有的时候需要对数组里的element进行排序.当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sor ...

  6. Android: 启动init.rc 中service的权限问题【转】

    转自:http://www.linuxidc.com/Linux/2011-04/35014.htm 通过property_set("ctl.start", service_xx) ...

  7. char和vchar

    Varchar往往用来保存可变长度的字符串.简单的说,我们只是给其固定了一个最大值,然后系统会根据实际存储的数据量来分配合适的存储空间. 为此相比CHAR字符数据而言,其能够比固定长度类型占用更少的存 ...

  8. 【转】Android之内存泄漏调试学习与总结

    大家有或经常碰到OOM的问题,对吧?很多这样的问题只要一出现相信大家的想法跟小马的一样,就是自己的应用:优化.优化.再优化!而且如果出现类似于OOM这样级别的问题,根本就不好处理,LogCat日志中显 ...

  9. string.Format 格式化时间,货币

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...

  10. web.xml中webAppRootKey

    ------------------------------------------------------------------------------------------------1. w ...