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. Python itertools/内置函数

    https://docs.python.org/3.5/library/itertools.html#itertools.starmap // https://docs.python.org/3.5/ ...

  2. webdriver简介及浏览器的驱动

     1.webdriver概述:  webdriver(selenium2=selenium1+webdriver)是一种用于web应用程序的自动化测试工具,它提供了一套友好的API,与selenium ...

  3. 《Visual C++开发实战1200例 第1卷》扫描版[PDF]

    [内容简介:] <Visual C++开发实战1200例(第1卷)>是“软件开发实战1200例”丛书之一.<Visual C++开发实战1200例(第1卷)>,编程实例的四库全 ...

  4. 判断UNITY版本号

    代码示例: #if (UNITY_5_3 || UNITY_5_4 || UNITY_5_5 || UNITY_5_6 || UNITY_5_7 || UNITY_5_8 || UNITY_5_9)u ...

  5. Labyrinth(记忆化BFS)

    Labyrinth http://codeforces.com/problemset/problem/1064/D time limit per test 2 seconds memory limit ...

  6. 对实体类的CRUD操作

    --------------------siwuxie095 对实体类的 CRUD 操作 1.创建数据库和表 (1)创建一个 MySQL 连接:mybatis_conn (2)创建一个数据库:myba ...

  7. PHP下ajax跨域的解决方案之jsonp

    首先要说明一下json和jsonp的区别? json是一种基于文本的数据交换方式,或者叫做描述数据的一种格式. var person = { "name": "test& ...

  8. Santa Claus and a Place in a Class

    /* Santa Claus is the first who came to the Christmas Olympiad, and he is going to be the first to t ...

  9. Loadrunner脚本回放无法准确定位欲删除元素

    Loadrunner脚本回放无法准确定位欲删除元素 问题: loadrunner脚本回放无法准确定位欲删除元素 详细: 我司ocrm系统,我的工作台菜单->我的综合工作台子页面下,工作日志页面删 ...

  10. 神奇的照片修复术,这才是 PS 的正确打开方式!

    蒲公英种子从远处飘回 聚成伞的模样 太阳从西边升起 落向东方 运动员回到起跑线上 轰鸣的火车退回家乡 雪花纷飞 飘向天际 我沉入梦乡 你还在我身旁 ——公益广告 大概只有时光倒流,我们才能回到那些每天 ...