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. SpringBoot中拦截器和过滤器的使用

    一.拦截器 三种方式 继承WebMvcConfigurerAdapter   spring5.0 以弃用,不推荐 实现WebMvcConfigurer  推荐 继承WebMvcConfiguratio ...

  2. 在linux上加速git clone

    在linux上加速git clone 进入终端命令行模式,sudo vim /etc/hosts 编辑hosts文件,添加以下ip-域名,保存退出 151.101.44.249 github.glob ...

  3. VirtualBox里如何正确安装增强工具(图文详解)

    不多说,直接上干货! 找到 复制到

  4. java的重载总结

    1.不能以返回值的不同来重载方法,编译都不通过(只有参数类型或者参数个数不同才可以重载方法) 在Java语言中,要重载一个方法,除了要与原方法具有相同的简单名称外,还要求必须拥有一个与原方法不同的(不 ...

  5. 本地sql文件导入mysql数据库

    mysql中配置my.ini interactive_timeout = 120 wait_timeout = 120 max_allowed_packet = 32M 导入sql运行命令 sourc ...

  6. 初学 Ajax(涉及 php)

    一直知道 ajax 但是尚未真正了解, 这次看了慕课网的<Ajax全接触>,算是有所收获,入了个门. 需要用到php,因为 Ajax也是向服务器请求(不知道这么解释对不对), 所以还需要配 ...

  7. [ Java ] [ JUnit ] [ Eclipse ] coverage

    官方資訊: https://www.eclemma.org/ - 簡短使用範例說明: https://dzone.com/articles/java-code-coverage-in-eclipse ...

  8. Walking on the path of Redis --- Introduction and Installation

    废话开篇 以前从来没听说过有Redis这么个玩意,无意间看到一位仁兄的博客,才对其有所了解,所以决定对其深入了解下.有不对的地方还请各位指正. Redis介绍 下面是官方的介绍,不喜欢english的 ...

  9. 八种Docker容器开发模式解析

    原文链接:http://www.csdn.net/article/2014-10-27/2822294 Docker优点已经说过很多次,这里不做详述,Docker现在越来越受到开发人员的青睐,而且利用 ...

  10. img-responsive class图片响应式

    在BootStrap中,给<img>添加 .img-responsive样式就可以实现图片响应式. 1 <img src="..." class="im ...