import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.ValueStack; public class ValueStackAction extends ActionSupport{
public String testValueStack(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
ValueStack valueStack2 = ServletActionContext.getContext().getValueStack();
ValueStack valueStack3 = (ValueStack)ServletActionContext.getRequest().getAttribute("struts.valueStack");
System.out.println(valueStack);
System.out.println(valueStack2);
System.out.println(valueStack3);
return "";
}
/*
* 把数据放入对象栈中的第一种方式
*/
public String addDataToObjectStack_1(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 把字符串加入到了CompoundRoot的第一个位置,我们把第一个位置称为对象栈的栈顶
*/
valueStack.push("aaaaa");
return "";
} /*
* 把数据放入对象栈中的另外一种方式
*/
public String addDataToObjectStack_2(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 把字符串加入到了对象栈中
*/
valueStack.getRoot().add("aaaa");
return "";
} /*
* 把数据放入对象栈中的第三种方式
*/
public String addDataToObjectStack_3(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 把字符串加入到了对象栈中
* 把一个map放入到了对象栈的栈顶,"aaa"作为key,"asfd"作为value
*/
ActionContext.getContext().getValueStack().set("aaa", "asfd");
return "";
} /**
* 从对象栈中把数据提取出来的方式
* 第一种方式
*/
public String addDataFromObjectStack_1(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 提取栈顶的元素
*/
ActionContext.getContext().getValueStack().getRoot().get(0);
return "";
} /**
* 从对象栈中把数据提取出来的方式
* 另外一种方式
*/
public String addDataFromObjectStack_2(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 提取栈顶的元素
*/
ActionContext.getContext().getValueStack().peek();
return "";
} /*
* 把对象栈的栈顶的元素移除
*/
public String removeDataFromObjectStack_1(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 移除栈顶的元素
*/
ActionContext.getContext().getValueStack().getRoot().remove(0);
return "";
} /*
* 把对象栈的栈顶的元素移除
*/
public String removeDataFromObjectStack_2(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 移除栈顶的元素
*/
ActionContext.getContext().getValueStack().pop();
return "";
} /**
* 把一个key,value键值对放入到request域中
*/
public String putObjectToRequest(){
ServletActionContext.getRequest().setAttribute("aaa", "aaa");
ValueStack valueStack = ActionContext.getContext().getValueStack();
return "";
} /**
* 把一个key,value键值对放入到application域中
*/
public String putObjectToApplication(){
ServletActionContext.getServletContext().setAttribute("aaaa", "aaaa");
ValueStack valueStack = ActionContext.getContext().getValueStack();
return "";
} /**
* 把一个key,value直接放在map栈中
*/
public String putDataToMapStack_1(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
ActionContext.getContext().put("aaa", "aaaa");
return "";
}
}

Struts2值栈的相关操作的更多相关文章

  1. struts2值栈内部数据结构详解

    值栈是struts2内部一片很重要的区域,我在初学的时候,发现对于值栈这个数据结构的理解不是很深刻.例如OGNLContext是什么,ActionContext和值栈有什么关系.为什么ActionCo ...

  2. 10.Struts2值栈

    1.什么是值栈 * 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据.从值栈中获取到数据. * ValueStack 是 struts2 提供一个接口,实现类 OgnlValueSta ...

  3. Struts2值栈详解

    1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的.  2). ...

  4. Struts2值栈

    一.前言 很多事儿啊,就是“成也萧何败也萧何”,细想一些事儿心中有感,当然,感慨和本文毛关系都没有~想起之前有篇Struts2中值栈的博客还未完工,就着心中的波澜,狂咽一把~ 二.正文 博文基于:st ...

  5. Struts2 - 值栈(ValueStack)

    1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...

  6. struts2 值栈分析

    目录 一.值栈分为两个逻辑部分 二.Struts2 利用 s:property 标签和 OGNL表达式来读取值栈中的属性值 1.值栈中的属性值: 2.读取对象栈中对象的属性: 3.默认情况下,Acti ...

  7. struts2值栈分析

    前段日子对ognl表达式不是很理解,看了几本书上关于ognl表达式的描述后还是感觉很难,前几天学习了struts2中值栈的内容,现在感觉ognl表达式其实很容易. struts2中利用值栈来存储数据, ...

  8. struts2值栈ValueStack中都有哪些东西?

    com.opensymphony.xwork2.dispatcher.HttpServletRequest application com.opensymphony.xwork2.dispatcher ...

  9. 【基于初学者的SSH】struts2 值栈的详解与struts2标签库+ognl表达式

    一:什么是值栈:struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值 特点:先进后出,最上面的元素叫做栈顶,也叫压栈. <s:debug></s:debug& ...

随机推荐

  1. golang二维码

    package main import ( "github.com/boombuler/barcode" "github.com/boombuler/barcode/qr ...

  2. 使用Micrisoft.net设计方案 第二章组织模式

    第二章组织模式 模式不仅依赖于它所包含的更小模式,同时也依赖包含它的更大的模式.它是描述复杂软件的系统方法. 本章的目标是让我们了解以下问题: 1.如何标识模式与模式的关系 2.如何把模式组织成模式集 ...

  3. linq.sort

    reflections.Sort(delegate(ReflectionEntity a, ReflectionEntity b) { if (a.CreatedTime < b.Created ...

  4. Mock Framework

    Typemock Isolator; Rhino Mocks; NMock; MS Fakes(has not same mechanism with NMock) Mock is usually u ...

  5. c# 异步任务队列(可选是否使用单线程执行任务,以及自动取消任务)

    使用demo,(.net framework 4.0 自行添加async wait 扩展库) class Program { static void Main(string[] args) { Con ...

  6. MySQL 5.6 Reference Manual-14.3 InnoDB Transaction Model and Locking

    14.3 InnoDB Transaction Model and Locking 14.3.1 InnoDB Lock Modes 14.3.2 InnoDB Record, Gap, and Ne ...

  7. 让Kafka在scala里面跑起来

    Kafka集群对消息的保存是根据Topic进行归类的,由消息生产者(Producer)和消息消费者(Consumer)组成,另外,每一个Server称为一个Broker(经纪人).对于Kafka集群而 ...

  8. WP - 控件基础-按钮控件

    Button:HyperlinkButton:RepeatButton:ToggleButton 1.Button:    <button content="Button" ...

  9. 使用Windows上Eclipse远程调试Linux上的Hadoop

    一.设置Eclipse运行用户     如果以与Hadoop运行用户名(比如grid)不同的用户运行Eclipse,则无法对Hadoop运行用户所属的文件进行管理,运行Map/Reduce程序也会报& ...

  10. C语言运算符类型

    算术运算符 运算符 描述 + 两个操作数相加 - 第一操作数减去第二个操作数 * 两个操作数相乘 / 分子除以分母 % 模运算和整数除法后的余数 ++ 递增操作增加一个整数值 -- 递减操作减少一个整 ...