ValueStack, 即值栈对象。

值栈对象:

是整个struts数据存储的核心,或者叫中转站。

用户每次访问struts的action,都会创建一个Action对象、值栈对象、ActionContext对象;  然后把Action对象放入值栈中; 最后再把值栈对象放入request中,传入jsp页面。

(key: struts.valueStack);     开发者只需要通过ActionContext对象就可以访问struts的其他的关键对象。 (ActionContext是给开发者用的,便于学习与使用。)

一。获取值栈对象的两种方式:

  1. // 获取值栈对象,方式1:
  2. HttpServletRequest request = ServletActionContext.getRequest();
  3. ValueStack vs1 = (ValueStack) request.getAttribute("struts.valueStack");
  4.  
  5. // 获取值栈对象,方式2:
  6. ActionContext ac = ActionContext.getContext();
  7. ValueStack vs2 = ac.getValueStack();
  8.  
  9. System.out.println(vs1 == vs2);//true

二。值栈对象的存储数据的原理

  1. ValueStack vs = ac.getValueStack();
  2. /***************操作根元素的几种方法*****************/
  3. // 设置数据: 入栈
  4. //vs.push(new User(1002,"Tom")); // 栈顶
  5. //vs.pop(); // 移除栈顶元素
  6.  
  7. // 如何存储? map结构存储
  8. //vs.set("user1", new User(1,"Jacky1"));
  9. //vs.set("user2", new User(2,"Jacky2"));
  1. public class OgnlDemo3 extends ActionSupport{
  2.  
  3. @Override
  4. public String execute() throws Exception {
  5.  
  6. // 测试迭代标签
  7.  
  8. List<User> list = new ArrayList<User>();
  9. Map<Integer,User> map = new HashMap<Integer, User>();
  10.  
  11. // 初始化
  12. for (int i=1; i<11; i++) {
  13. User user = new User(i,"Jack" + i);
  14.  
  15. list.add(user);
  16. map.put(user.getId(), user);
  17. }
  18.  
  19. // 保存到request中,是非根数据 取值时候要加#
  20. ActionContext.getContext().getContextMap().put("list", list);
  21. ActionContext.getContext().getContextMap().put("map", map);
  22. return super.execute();
  23. }
  24.  
  25. }
  1. <body>
  2. <br/>一、. list迭代</br>
  3. <table border="1">
  4. <tr>
  5. <td>编号</td>
  6. <td>名称</td>
  7. </tr>
  8. <s:iterator var="user" value="#request.list" status="st">
  9. <tr class=<s:property value="#st.even?'even':'odd'"/> >
  10. <td><s:property value="#user.id"/></td>
  11. <td><s:property value="#user.name"/></td>
  12. </tr>
  13. </s:iterator>
  14. </table>
  15.  
  16. <br/>二、迭代map</br>
  17. <table border="1">
  18. <tr>
  19. <td>编号</td>
  20. <td>名称</td>
  21. </tr>
  22. <s:iterator var="en" value="#request.map" status="st">
  23. <tr>
  24. <td><s:property value="#en.key"/></td>
  25. <td><s:property value="#en.value.name"/></td>
  26. </tr>
  27. </s:iterator>
  28. </table>
  29.  
  30. <!-- Ognl表达式可以取值,也可以动态构建集合 -->
  31. </body>
  1. <body>
  2. <br/>一、.构建 list集合</br>
  3. <s:iterator var="str" value="{'a','b'}">
  4. <s:property value="#str"/>
  5. </s:iterator>
  6.  
  7. <br/>一、.构建 map集合</br>
  8. <s:iterator var="en" value="#{'cn':'China','usa':'America'}">
  9. <s:property value="#en.key"/>
  10. <s:property value="#en.value"/> <br/>
  11. </s:iterator>
  12.  
  13. </body>
  1. <body>
  2. <!-- 页面: 必须要拿到ValueStack -->
  3.  
  4. <br/>1. 取根元素的值<br/>
  5. <s:property value="user.id"/>
  6. <s:property value="user.name"/>
  7. <s:property value="user.address"/>
  8. <s:property value="user.address.city"/>
  9. <s:property value="user.address.province"/>
  10.  
  11. <br/>2. 取非根元素的值<br/>
  12. <s:property value="#request.cn"/>
  13. <s:property value="#session.Session_data"/>
  14. <s:property value="#application.Application_data"/> <br/>
  15.  
  16. <!-- 自动找request/session/application,找到后立刻返回 -->
  17. <s:property value="#request_data"/>
  18. <s:property value="#attr.Session_data"/>
  19. <s:property value="#attr.Application_data"/> <br/>
  20.  
  21. <!-- 获取请求的参数数据 -->
  22. <s:property value="#parameters.userName"/>
  23.  
  24. <!-- struts的调试标签:可以观测值栈数据 -->
  25. <s:debug></s:debug>
  26. </body>

struts2中的值栈对象ValueStack的更多相关文章

  1. 关于Struts2中的值栈与OGNL表达式

    1.1.1    OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL     :OGNL比EL功能强大很多倍. 它是一个开源项目. ...

  2. Struts2中的值栈

    一 什么是值栈 值栈: struts2中提供的一种类似于域对象的工具, 用于struts2中的存值和取值. 每次访问Action的时候, 都会创建一个action对象, 而每个action对象中都存在 ...

  3. struts2中各种值栈问题

    struts2中OGNL和 ValueStack(一) 收藏 学习的时候,总分不清楚在struts2中页面的传值和取值是怎么来完成的,所以从网上搜了很多资料,现在把这些资料总结写,留着以后参考..看完 ...

  4. Struts2 中的值栈的理解

    通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求 道服务器端 action时,就有个堆栈,如果action在服务器端 ...

  5. Java中的值栈

    OGNL表示式使用 和 值栈 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式 ...

  6. Struts2 框架的值栈

    1. OGNL 表达式 1.1 概述 OGNL(Object Graphic Navigation Language),即对象图导航语言; 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个 ...

  7. Struts2-获取值栈对象与结构

    1.获取值栈对象有多种方式 (1)使用ActionContext类里面的方法获取值栈对象 @Override public String execute(){ //1.获取ActionContext类 ...

  8. Struts2笔记_值栈

    A.值栈概述 值栈(ValueStack),通俗的来说就是Struts2里面用来管理和存储数据的东西.struts2项目部署运行后,底层会创建一个action实例,同时也会在内存上划分一块区域,这个区 ...

  9. Ognl值栈对象及struts标签

    用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...

随机推荐

  1. Asp.NET路由管道处理过程 【重要】

    当ASP.NET处理请求时,路由管道主要由以下几个步骤组成: 1.UrlRoutingModule尝试使用RouteTable中注册的理由匹配当前请求: 2.如果RouteTable中有一个路由成功匹 ...

  2. 6、Web应用程序中的安全向量 -- customErrors(适当的错误报告和堆栈跟踪)

    几乎所有的网站在开发过程中都在web.config文件中设置了特性<customErrors mode="off">. customErrors模式有3个可选的设置项: ...

  3. Django中的权限系统

    Django中已经为我们设置好了基本的权限系统,在定义好model同步数据库后,在每个库下面都会有一张 'auth_permission' 表.该表里面记录了每条权限的描述(name字段,can do ...

  4. [转]5个JavaScript面试题

    问题1:闭包 考虑下面的代码: 1 2 3 4 5 6 var nodes = document.getElementsByTagName('button'); for (var i = 0; i & ...

  5. 关于 JAVA 中使用 Preferences 读写注册表时要注意的地方

    要注意的只有一个地方,那就是键名或者项名不要包含大写字母,否则读不到数据. 代码是这样的: 1: Preferences preferences = Preferences.systemRoot(); ...

  6. 第二次冲刺spring会议(第五次会议)

    [例会时间]2014/5/8 21:15 [例会地点]9#446 [例会形式]轮流发言 [例会主持]马翔 [例会记录]兰梦 小组成员:兰梦 ,马翔,李金吉,赵天,胡佳奇

  7. ubuntu下的ssh工具gstm

    (转自:http://www.nenew.net/ubuntu-ssh-gstm.html) 首先安装: sudo apt-get install gstm 就可以安装,当然你也可以到http://s ...

  8. ECOS-Ecstore 后台管理地址修改

    ECStore默认出厂的后台管理地址是: http://域名/index.php/shopadmin http://域名/shopadmin [配置过rewrite后,并开启伪静态] 如果想要更个性的 ...

  9. EF Unit Of Work

    BaseEntity, 所有的业务表都继承这个类,每个表的主键都是GUID, 主键名Id. public abstract class BaseEntity{ public BaseEntity() ...

  10. lucene 索引创建步骤

    一.步骤: 1.存储位置:1)文件: Directory dir= FSDirectory.open(new File("D:\\LuceneIndex")); 2)内存: new ...