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. Vote Disk 和 OCR概述

    Oracle Clusterware由2部分组成,分别是Voting Disk和 OCR. Voting Disk里面记录着节点成员的信息. 如RAC数据库中有哪些节点成员,节点增加或者删除时也同样会 ...

  2. 查询sql执行速度

    with QS as(      select cp.objtype as object_type            ,db_name(st.dbid)as [database]          ...

  3. 初涉定制linux系统之——rpm相关安装包的准备

    在上一篇博客http://www.cnblogs.com/dengtr/p/5543820.html#3634582 中介绍了如何定制Centos系统镜像,但其中有个问题,就是服务所依赖的安装包不在原 ...

  4. Linux Shell中有三种引号的用法

    Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中 ...

  5. jquery clone 获取文本框值得问题

    1 clone 出来的文本框 默认不会把原来的事件也带过去 如果使用 $("#").clone(true);   true  可以将原来的事件带过去 获取文本框的值 可以使用事件 ...

  6. gtftools软件简单介绍(我自己不建议用,因为我发现不好用)

    1)背景 生物信息学研究经常涉及计算或提取基因的各种特征,如基因ID作图,GC含量计算和不同类型的基因长度,通过操纵基因模型,这些模型通常以GTF格式注释,可从ENSEMBL或GENCODE数据库获得 ...

  7. Android 最火开发框架 xUtils

    xUtils简介 xUtils3 api变化较多, 已转至 https://github.com/wyouflf/xUtils3 xUtils 2.x对Android 6.0兼容不是很好, 请尽快升级 ...

  8. Graph Coloring I(染色)

    Graph Coloring I https://www.nowcoder.com/acm/contest/203/J 题目描述 修修在黑板上画了一些无向连通图,他发现他可以将这些图的结点用两种颜色染 ...

  9. windows文件属性操作 dsofile

    dsofile.dll是com组件,.net程序中引用dsofile.dll文件后,程序集名称会变成“Interop.DSOFile.dll”, com组件需要用regsvr32注册,所以需要注册ds ...

  10. 轮播图jQuery

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...