ValueStack, 即值栈对象。

值栈对象:

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

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

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

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

// 获取值栈对象,方式1:
        HttpServletRequest request = ServletActionContext.getRequest();
        ValueStack vs1 = (ValueStack) request.getAttribute("struts.valueStack");

        // 获取值栈对象,方式2:
        ActionContext ac = ActionContext.getContext();
        ValueStack vs2 = ac.getValueStack();

        System.out.println(vs1 == vs2);//true

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

ValueStack vs = ac.getValueStack();
        /***************操作根元素的几种方法*****************/
        // 设置数据: 入栈
        //vs.push(new User(1002,"Tom"));    // 栈顶
        //vs.pop();                        // 移除栈顶元素

        // 如何存储?  map结构存储
        //vs.set("user1", new User(1,"Jacky1"));
        //vs.set("user2", new User(2,"Jacky2"));
        
public class OgnlDemo3 extends ActionSupport{

    @Override
    public String execute() throws Exception {

        // 测试迭代标签

        List<User> list = new ArrayList<User>();
        Map<Integer,User> map = new HashMap<Integer, User>();

        // 初始化
        for (int i=1; i<11; i++) {
            User user = new User(i,"Jack" + i);

            list.add(user);
            map.put(user.getId(), user);
        }

        // 保存到request中,是非根数据  取值时候要加#
        ActionContext.getContext().getContextMap().put("list", list);
        ActionContext.getContext().getContextMap().put("map", map);
        return super.execute();
    }

}
 <body>
    <br/>一、. list迭代</br>
    <table border="1">
        <tr>
            <td>编号</td>
            <td>名称</td>
        </tr>
          <s:iterator var="user" value="#request.list" status="st">
              <tr class=<s:property value="#st.even?'even':'odd'"/> >
                  <td><s:property value="#user.id"/></td>
                  <td><s:property value="#user.name"/></td>
              </tr>
          </s:iterator>
      </table>

       <br/>二、迭代map</br>
    <table border="1">
        <tr>
            <td>编号</td>
            <td>名称</td>
        </tr>
          <s:iterator var="en" value="#request.map" status="st">
              <tr>
                  <td><s:property value="#en.key"/></td>
                  <td><s:property value="#en.value.name"/></td>
              </tr>
          </s:iterator>
      </table>

      <!-- Ognl表达式可以取值,也可以动态构建集合 -->
  </body>
<body>
    <br/>一、.构建 list集合</br>
    <s:iterator var="str" value="{'a','b'}">
        <s:property value="#str"/>
    </s:iterator>

     <br/>一、.构建 map集合</br>
     <s:iterator var="en" value="#{'cn':'China','usa':'America'}">
         <s:property value="#en.key"/>
         <s:property value="#en.value"/>  <br/>
     </s:iterator>

  </body>
<body>
      <!-- 页面: 必须要拿到ValueStack -->

     <br/>1. 取根元素的值<br/>
     <s:property value="user.id"/>
     <s:property value="user.name"/>
     <s:property value="user.address"/>
     <s:property value="user.address.city"/>
     <s:property value="user.address.province"/> 

      <br/>2. 取非根元素的值<br/>
      <s:property value="#request.cn"/>
      <s:property value="#session.Session_data"/>
      <s:property value="#application.Application_data"/>    <br/>

      <!-- 自动找request/session/application,找到后立刻返回 -->
      <s:property value="#request_data"/>
      <s:property value="#attr.Session_data"/>
      <s:property value="#attr.Application_data"/>  <br/>

      <!-- 获取请求的参数数据 -->
      <s:property value="#parameters.userName"/>

     <!-- struts的调试标签:可以观测值栈数据 -->
     <s:debug></s:debug>
  </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. memcached在项目中的应用

    这一篇将以介绍一个memcached在项目中的应用.假设我们有一个web应用,里面有商品信息,文章信息,评论信息,其他信息,我们希望对其做缓存,那么我们在ServiceImpl层就不在调用DAOmpl ...

  2. wep密钥的长度

    理论上,WEP可以搭配任意长度的密钥,因为RC4并未要求非得使用特定长度的密钥. 不过,大多数产品均支持一种或两种长度的密钥.唯一出现在标准中的密钥长度时64位的WEP种子(seed),其中40位是两 ...

  3. ATL opengl

    #include <atlbase.h> #include <atlwin.h> #include <gl/glew.h> #include <gl/GL.h ...

  4. iOS开发的一些奇巧淫技(转载)

    iOS开发的一些奇巧淫技 http://www.cocoachina.com/ios/20141229/10783.html iOS开发的一些奇巧淫技2 http://www.cocoachina.c ...

  5. 2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  6. 安装、配置、启动FTP、SSH或NFS服务

    (1)准备使用软件维护工具apt-get. Ubuntu7.10中没有安装FTP.SSH.NFS服务器软件,它提供了一个很方便的安装.升级.维护软件的工具apt-get.apt-get从光盘.网络上下 ...

  7. Hbase查看

    Client HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC:对于数据读写类操作,Cli ...

  8. CRC的校验原理

    一.基本原理 CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列:附加在数据序列之后的这个检验码与数据序列的内容之间存在着 ...

  9. 还原openstack配置文件的方法

    cp -a /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bakcp -a /etc/neutron/plugins/ml2/ml2_conf ...

  10. 【2】docker 与UFW

    ufw是一个主机端的iptables类防火墙配置工具. 1.查看ufw的状态:ufw status 2.如果使用UFW,需要对其进行修改才能让DOCKER工作.docker使用一个网桥来管理容器中的网 ...