set和push方法压入栈顶的值获取方法

向值栈里面放数据(储存的位置在root域里面)

向值栈放数据有多种方式,往往我们只用其中一种

1.set方法压栈

    1)在Action中获取值栈对象,使用set()方法向值栈存放数据

        ActionContext.getContext().getValueStack().set("key","value");

    2)在jsp中获取值栈数据,根据set方法的名称(key)获取

        <s:property value="key"></s:property>

2.push方法压栈

    1)在Action中获取值栈对象,使用push()方法向值栈存放数据,push方法只有设置的值(value),没有名称(key)

         ActionContext.getContext().getValueStack().push("XXX");

    2)push()方法会把值栈中存放的数据存到top数组中,push的取值方法有点特殊,是通过直接把栈顶元素取出来的。

    3)在jsp中获取push方法设置的值,根据top数组获取值

        <s:property value="[0].tap"></s:property>//这里的top是root的域实体对象名称,也就是List对象的名称

3.在action定义变量,生成变量的get方法

 

向值栈中放对象

实现步骤:

第一步:定义对象变量

第二步:生成变量的get方法

第三步:在执行的方法里面向对象中设置值

向值栈中放List对象

第一步:定义List集合变量

第二步:生成变量的get方法

第三步:在执行的方法里面向List集合设置值

 

 

4.扩展

    值栈:在struts2里面提供了本身的一种存储机制,类似于域对象,是值栈,可以存值和取值。

        

servlet和action的区别:

        Servlet:默认在第一次访问的时候创建,只创建一次,是一个单例对象!!

        Action:一样是访问的时候创建对象,每次访问action的时候都会创建新的action对象,创建多次,是一个多实例对象!!

        

值栈的存储位置:

  • 每次访问action的时候都会创建action对象。
  • 在每个action对象里面都会有一个值栈对象。(注意:每个action对象只有一个)(在同一个action值栈只有一个)

    

获取值栈对象有多种方式!

  • 常用的方式:使用ActionContext对象里面的方法(getValueStack())获取值栈对象。

    

   值栈内部结构

    栈:先进后出!

    最上面是栈顶的元素,向栈里面放数据的操作叫做压栈。

    值栈分为两个部分,root和context

    root专业叫做ObjectStack(对象栈) 
   context专业叫做ContextMap(Map栈),Map类型的栈。(在我们访问里面的对象的时候,会通过出栈的方式取东西,效率比较低,一般我们不会用)

    root结构是List集合

    context结构是Map集合

    (要想查看到值栈的结构可以用调试(debug)的方法,通过struts2的标签<s:debug></s:debug>,值栈确实分为两个部分,一个root,一个context    )

posted @ 2018-05-24 09:58  DemoJohn  阅读(1831)  评论(0编辑  收藏  举报