向值栈里面放数据(储存的位置在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    )

set和push方法压入栈顶的值获取方法的更多相关文章

  1. 2. pushd . :将当前文件夹压入栈,使用popd能够回到该文件夹。

    1.man -t  ls | ps2pdf -> ls.pdf生成pdf格式的ls帮助文件. 2. pushd . :将当前文件夹压入栈,使用popd能够回到该文件夹. 3.find -type ...

  2. c#图像处理入门(-bitmap类和图像像素值获取方法)

    c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义 ...

  3. C#中的bitmap类和图像像素值获取方法

    一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetP ...

  4. c#图像处理入门(-bitmap类和图像像素值获取方法) 转

    一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetP ...

  5. 面试 16:栈的压入压出队列(剑指 Offer 第 22 题)

    我们今天继续来看看周五留下的习题: 面试题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如:压入序列为{1,2,3,4,5},那{ ...

  6. 【剑指Offer学习】【面试题22:栈的压入、弹出序列】

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请推断二个序列是否为该栈的弹出顺序.假设压入栈的全部数字均不相等. 解题思路: 解决问题非常直观的想法就是建立一个辅助栈.把输入的第一个序列中的数字 ...

  7. 剑指Offer面试题:20.栈的压入、弹出序列

    一.题目:栈的压入.弹出序列 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4 ...

  8. (剑指Offer)面试题22:栈的压入、弹出序列

    题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...

  9. P134、面试题22:栈的压入、弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对 ...

随机推荐

  1. 写这篇博客之前,我又忘了“==”和equals的区别。

    没错.嘟嘟又把==号和equals 的区别给忘掉了 ==号比较基本类型的时候比的是值,比较引用类型的时候比较的是地址.equals比较基本类型的时候.... 脑子里关于这道题的答案好模糊好没有安全感 ...

  2. 【iOS】Your account already has a valid ios

    打包内测的时候遇到了这个问题,如图所示: 官网解决办法: If the certificate already exists in Member Center, a “Your account alr ...

  3. ASP.NET Core - 实现自定义WebApi模型验证

    Framework时代 在Framework时代,我们一般进行参数验证的时候,以下代码是非常常见的 [HttpPost] public async Task<JsonResult> Sav ...

  4. 图像反转(一些基本的灰度变换函数)基本原理及Python实现

    1. 基本原理 获取像素值在[0, L]范围内的图像的反转图像,即为负片.适用于增强图像中白色或者灰色的区域,尤其当黑色在图片中占主地位时候 $$T(r) = L-r$$ 2. 运行结果 图源自ski ...

  5. javascript中的浅拷贝和深拷贝(拷贝引用和拷贝实例)

    作者:千锋教育链接:https://www.zhihu.com/question/23031215/answer/326129003来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  6. 使用python画3D线条

    """用于验证整体趋势正确性""" #!python3 #-*- coding:utf-8 -*- import matplotlib as ...

  7. python练习题-1

    1.输出正方形 x=input("请输入:") x=int(x) for i in range(0,x): if (i==0) or (i==x-1): print("* ...

  8. 重学计算机组成原理(六)- 函数调用怎么突然Stack Overflow了!

    用Google搜异常信息,肯定都访问过Stack Overflow网站 全球最大的程序员问答网站,名字来自于一个常见的报错,就是栈溢出(stack overflow) 从函数调用开始,在计算机指令层面 ...

  9. 自己实现spring核心功能 一

    聊聊spring spring对于java开发者来说,是最熟悉不过的框架了,我们日常开发中每天都在使用它.它有着各种各样的好处,简单易用,得心应手... ... 我们一说到spring就会讲到ioc ...

  10. 使用BeanShell断言判断请求返回的Json相应结果(不同json格式整理)

    第一种json格式 { "code": 0, "msg": "success", "success": true, &q ...