A:存数据

1.利用ActionContext存数据

这种方式最简便

这是一个购物车案例

把查询来的数据放入到Session中存储起来

2.利用valuestack值栈存数据

把查询出来的数据放入到值栈中存储起来

总结

//获取ValueStack对象的引用
//第一种方式:获取HttpServletRequest对象,通过对象的getAttribute方法,从域中取
//1.获取request对象
HttpServletRequest request = ServletActionContext.getRequest();
//2.根据key获取ValueStack对象的引用
ValueStack vs1 = (ValueStack)request.getAttribute("struts.valueStack");
System.out.println(vs1.hashCode());

//第二种方式:先获取ActionContext对象,再取出requestMap,然后通过map的get方法获取
//1.获取ActionContext对象
ActionContext context = ActionContext.getContext();
//2.获取requestMap
Map<String,Object> requestAttribute = (Map<String,Object>)context.get("request");
//3.根据key获取对象的引用
ValueStack vs2 = (ValueStack)requestAttribute.get("struts.valueStack");
System.out.println(vs2.hashCode());

//第三种方式:使用ActionContext对象的方法,直接获取ValueStack对象的引用
ValueStack vs3 = context.getValueStack();
System.out.println(vs3.hashCode());

//栈的操作
ActionContext context = ActionContext.getContext();
ValueStack vs = context.getValueStack();
//压栈操作
vs.push(new Student("泰斯特",21));
/*
* ValueStack的其他方法
* setValue(String expr, Object value);
* String expr:它是一个OGNL表达式
* Object value:我们要操作的数据
* 把数据存到哪里去?
* 看expr是否使用了#
* 如果使用了#,操作的就是ContextMap中
* 如果没使用#,操作的就是ValueStack
*/
vs.setValue("#name", "张三");//把数据放到ContextMap中。 key是name valeu=张三
vs.setValue("name", "李四");//把ValueStack中第一个name属性的值换成李四。如果没有一个name属性的对应的setName方法,会报错。

/*
*set(String key, Object o);
* String key : Map的key
* Object o : map的value
* 如果栈顶是一个Map元素,直接把key作为map的key,把Object作为map的value存入。存入的是栈顶。
* 如果栈顶不是一个Map元素,创建一个Map对象,把key作为map的key,把Object作为map的value,压入栈顶。
*/
vs.set("s1", new Student("王五",18));
vs.push(new Student("test",23));
vs.set("s2", new Student("aaa",28));

B:取数据

存方式有两种 那么取方式肯定会存在两种

使用s:property取数据

                   1、取contextMap中的数据,需使用#

              2、取contextMap里面ValueStack中对象的属性:直接写属性名

           特殊说明:当s:property不给定value属性时,默认取栈顶对象。

          OGNL的使用总结:

                                   1.取根中对象的属性,不使用#

                                   2.contextMapkey的值,要使用#

struts2从浅至深(六)contextMap(存取数据)的更多相关文章

  1. struts2从浅至深(六)总结

    在我认为strust2的作用就是 1.主要跟前端交互的框架数据提交先经过struts 2.起到对数据的过滤,接受数据 3.把数据显示到前段,具有很成熟的ognl技术,用起来特别方便 4.还提供了跟前段 ...

  2. struts2从浅至深(五)上传与下载

    1.编写上传页面 2.编写动作方法 import java.io.File;import java.io.IOException; import javax.servlet.ServletContex ...

  3. struts2从浅至深(三)拦截器

    一:拦截器概述 Struts2中的很多功能都是由拦截器完成的. 是AOP编程思想的一种应用形式. 二:拦截器执行时机                             interceptor表示 ...

  4. struts2从浅至深(二)详细配置

    1.加载时机 当应用被服务器加载时,Struts的配置文件就已经加载了 2.加载顺序 default.properties------->struts-default.xml---------& ...

  5. struts2从浅之深(一)简介

    一.Struts2简介 1.Struts2概述                    Struts2是Apache发行的MVC开源框架.注意:它只是表现层(MVC)框架. M:model-----数据 ...

  6. struts2从浅至深(四)下载文件

    1.创建下载文件动作类 2.配置struts 3.提供一个下载链接 4.下载页面 为什么文件名是链接名 只是以链接名显示,但文件的本身是个图片秩序改掉后缀名就可以了

  7. 浅入深出Vue:数据渲染

    今天来正式开始 vue的学习,首当其冲的当然是数据的渲染.毕竟数据就是拿来看的,看看如果使用 vue来展示数据. 为什么渲染 俗话说 "人靠衣装马靠鞍", 那咱们的代码就是得靠 U ...

  8. Mybatis源码解析,一步一步从浅入深(六):映射代理类的获取

    在文章:Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们提到了两个问题: 1,为什么在以前的代码流程中从来没有addMapper,而这里却有getMapper? 2,UserDao ...

  9. [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    [翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...

随机推荐

  1. DELL服务器iDRAC相关设置

    iDRAC又称为Integrated Dell Remote Access Controller,也就是集成戴尔远程控制卡 iDRAC卡相当于是附加在服务器上的一台小电脑,通过与服务器主板上的管理芯片 ...

  2. inotify用法简介及结合rsync实现主机间的文件实时同步

    一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系 ...

  3. 集成学习算法总结----Boosting和Bagging(转)

    1.集成学习概述 1.1 集成学习概述 集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高.目前接触较多的集成学习主要有2种:基于Boosting的和基于B ...

  4. python生成器(转)

    生成器是一种特殊的迭代器,内部支持了生成器协议,不需要明确定义__iter__()和next()方法.生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是 ...

  5. linux一些基本常识(四)

    tail -f时时监控 一开启内存最小位u原则,尽量优化代码 grep -v "" /etc/passwd 这样行不行 怎么清除last nice调整进程运行级别 pkill是匹配 ...

  6. IntelliJ IDEA project module

    在IDEA 创建一个project,目录结构是这样的:在project下创建一个module之后目录结构是这样的: 简单的概括如下: IntelliJ系中的 Project  相当于Eclipse系中 ...

  7. chrome input去除黄色背景色

    input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset; border: 1px solid #CCC!impo ...

  8. poj1088(记忆化搜索入门题)

    题目链接:http://poj.org/problem?id=1088 思路: 明显的记忆化搜索题,用dp[i][j]表示从(i,j)出发能滑的最远距离,用dfs搜索,若dp[x][y]>0即已 ...

  9. iOS下JS与OC互相调用(八)--Cordova简单实战

    新建工程,添加Cordova 关键类 新建一个工程TestCordova 然后添加:confug.xml.Private 和 Public 两个文件夹里的所有文件 然后build 发现报错 为什么有会 ...

  10. IIS支持IPA、APK文件的下载

    IIS里MIME类型中默认是没有ipa,apk文件的,所以无法直接通过网络下载.   解决方法如下: 1.打开IIS信息服务管理器,选中自已的网站,在右边面板中找到MIME类型. 2.双击打开,点击右 ...