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. 深入MySQL用户自定义变量

    一.到底MySQL的变量分哪几类? MySQL变量一共分为两大类:用户自定义变量和系统变量.如下: 用户自定义变量 局部变量 会话变量 系统变量 会话变量 全局变量 本文涉及的内容为用户自定义会话变量 ...

  2. https://developer.mozilla.org/

    Document/querySelector      https://developer.mozilla.org/zh-CN/docs/Web/API/Document/querySelector

  3. 57. Insert Interval (Array; Sort)

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  4. 安装配置Windows Live Writer做为博客客户端

    前言: 国内好些空间.博客是支持Windows Live Writer客户端的,也就是说使用Windows Live Writer不用登陆博客网站,就可以向不同的博客网站发布博客了. Windows ...

  5. IO模型与select,poll,epoll

    五种:阻塞,非阻塞,IO复印,信号驱动,异步. select,poll,epoll select: 典型用32个32位的整数表示1024个描述符,并发的局限. poll:功能同上,但数据结构不一样(链 ...

  6. centos7.5配置双网卡上网

    一.环境及说明 当初有这个需求,主要是帮一个高校的客户搭建一个大数据集群,使用的是校园网,交换机上一个端口只能连接一部电脑上网,不能通过路由组建子网,确保集群中的服务器有子网ip的同时,也能够通过公网 ...

  7. .net为图片添加水印(转) jpg png和gif格式

    .net为图片添加水印(转) jpg png和gif格式 .net为图片添加水印(转) jpg png和gif格式,转自csdn的hyde82,现在跟大家一起来分享下: 利 用.net中System. ...

  8. js td innerHTML

    用value不好使,用innerHTML可以.JS:document.getElementById("aa").innerHTML="单元格"; body:&l ...

  9. linux 下 php 安装 libevent

    一.安装libevent库 1.到libevent官网下载安装源码 http://libevent.org/ 如:libevent-2.0.22-stable.tar.gz 2.解压源码包 > ...

  10. vue2.0 tab切换几种方式

    第一种 比较灵活简单的方式(切换改变部分的内容在组件中比较方便操作) <template> <div id="app"> <ul> <li ...