1、提到Struts2的传值功能时,经常会见到Stack Context和ValueStack等概念,那么它们到底是什么,有什么作用呢。

ValueStack(值栈):Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是

OgnlContext),并将值栈设为OGNL的根对象。

ActionContext:一次Action调用都会创建一个ActionContext
              如:ActionContext ctx = ActionContext.getContext();

Stack Object:放入stack中的对象,一般是action。

Stack Context(map):stack上下文,它包含一系列对象,包括request、session、attr、application map等。

2、访问Stack Context中的对象的属性时要使用"#对象名.属性名"的方式,使用push标签可以将原来位于Stack Context中的对象放到ValueStack的栈顶。用push标签将对象保存在ValueStack的栈顶后,只需要使用"属性名"就可以直接访问了。如下面的例子:

<body>
 <s:bean name="cg.struts.at.User" id="user">
   <s:param name="username" value="'cg'"/>
   <s:param name="password" value="'p123'"/>
 </s:bean>
 <table border="1" width="80%">
  <tr align="center">
   <td colspan="4">用户信息</td>
  </tr>
  <tr align="center">
   <td>用户名:</td>
   <td><s:property value="#user.username"/></td>
   <td>密码:</td>
   <td><s:property value="#user.password"/></td>
  </tr>  
 </table>
 使用push标签,简化值的访问
 <s:push value="#user">
  <table border="1" width="80%">
   <tr align="center">
    <td colspan="4">用户信息</td>
   </tr>
   <tr align="center">
    <td>用户名:</td>
    <td><s:property value="username"/></td>
    <td>密码:</td>
    <td><s:property value="password"/></td>
   </tr>  
  </table>
 </s:push>
</body>

3、如果ValueStack栈顶是集合对象的话,通常可以用iterator标签取得位于ValueStack的顶端的集合对象,遍历集合并输出,遍历完成后集合对象会被移出ValueStack。

4、在页面输出ValueStack和Stack Context的方法

只要在<body>标签中加入<s:debug/>,运行时就可以生成相应的链接,点击该链接就可以显示stack相关信息。

5、在Action中获得ActionContext、request、session、application对象的方法

5.1 缺省情况下,Struts2的Action类是从ActionSupport类继承过来的,因此,可以用下面的语句获得ActionContext对象。

ActionContext ctx = ActionContext.getContext();

ctx.put(("address","上海");

5.2 如果想要在Action类中使用request对象,最简单的方法就是在定义类的时候实现ServletRequestAware接口。然后就可以直接在execute()方法中使用request对象,例如:

request.setAttribute("address","上海");

5.3 如果想要在Action类中使用session对象,就要在定义类的时候实现SessionAware接口。然后就可以直接在execute()方法中使用session对象。例如:

session.put("address","上海");

5.4 当需要在Action类中使用application对象时,在定义类的时候要实现ServletContextAware接口。然后可以直接在execute()方法中使用application对象。例如:

application.setAttribute("address","上海");

6、在jsp中用OGNL表达式获取不同范围的值

6.1 获取地址后面的参数信息(即上海)(http://localhost:8080/strutslogin/login.action?address=上海)的方法如下:

<s:property value="parameters.address"/>

6.2 获取上述request中信息的方法如下:

<s:property value="#request.address"/>

6.3 获取上述session中信息的方法如下:

<s:property value="#session.address"/>

6.4 获取上述application中信息的方法如下:

<s:property value="#application.address"/>

6.5 使用"#attr.参数名"的方法访问各种变量的顺序是:

request>session>application

Struts2的Stack Context和ValueStack相关推荐

  1. 深入分析JavaWeb Item48 -- Struts2中OGNL表达式与ValueStack

    一.OGNL表达式 1.OGNL表达式介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作 ...

  2. GLib-CRITICAL **: g_main_context_pop_thread_default: assertion `g_queue_peek_head (stack) == context

    在执行qt静态编译的程序时出现的问题.原因是没有找到编译时所用的libglib库 这时候需要看看编译时makefile文件中libglib库所指定的目录,再将该目录下的libglib库复制到运行机器上 ...

  3. Struts2的OGNL标签详解

    一.Struts2可以将所有标签分成3类: UI标签:主要用于生成HTML元素的标签. 非UI标签:主要用于数据库访问,逻辑控制等标签. Ajax标签:用于Ajax支持的标签. 对于UI标签,则有可以 ...

  4. 使用Struts2标签

    Struts2提供了大量标签帮助开发表现层页面,Struts2标签库与Struts1相比,不依赖于任何表现层技术,大部分可以在各种表现层技术中使用,包括最常用的jsp页面,也可以在Velocity和F ...

  5. JSP页面中常用四种标签

    JSP页面常用四种标签: 1. EL表达式:  ${} 2. jstl表达式(sun apache): <%@ taglib prefix="c" uri="htt ...

  6. Struts2中OGNL,valueStack,stackContext的学习

    http://jwx0925.iteye.com/blog/630335 [/color]学习Struts2,一直不明白表单中的值是怎么传给Action的,上网查了些资料,基本了解了!下面基本是从几个 ...

  7. Struts2的ValueStack(值栈)介绍

    1.在之前写的一些文章中,有用到<s:debug></s:debug>这个Struts2自带的标签,会在jsp页面中产生一个Debug按钮,点击这个按钮时,就会出现ValueS ...

  8. Struts2第九篇【OGNL、valueStack详解】

    tags: Struts2 什么是OGNL表达式? OGNL是Object Graphic Navigation Language 是操作对象属性的开源表达式. Struts2框架使用OGNL作为默认 ...

  9. struts2请求处理过程源代码分析(1)

    2019独角兽企业重金招聘Python工程师标准>>> 转载自:http://www.see-source.com/ 源码解析网 网上对于struts2请求处理流程的讲解还是比较多的 ...

最新文章

  1. win2003服务器装spl2008,打安全补丁后无法进入SQL Server Management Studio
  2. 迷你DVD管理器项目
  3. PHP中的static静态变量的使用方法详解
  4. 记忆化搜索斐波那契c语言,记忆化搜索--优化斐波那契数列递归函数
  5. Java描述 数据结构与算法
  6. UI实用素材模板|可临摹学习的控制面板
  7. python计算相关性显著性p值_基于python实现计算两组数据P值
  8. 使用分治思想求解最大子序列
  9. 常用排序算法(六)——希尔排序
  10. Elasticsearch报错:NodeDisconnectedException[[][IP:9300][cluster:monitor/nodes/liveness] disc
  11. asp 环境配置到mysql数据库增删改查
  12. A616-HP-ProDesk 480 G2 MT电脑网络同传
  13. 智慧小区云平台解决方案
  14. linux上复制文件命令是什么,Linux复制文件用什么命令怎么用
  15. 安川焊接机器人做圆弧运动编程_安川MOTOMAN工业机器人编程与操作(6)
  16. Command not found 解决
  17. matlab从mp4文件中提取音频,如何提取mp4视频中的音频文件 将视频转换为MP3音频...
  18. 图像极坐标变换的研究
  19. Open3d读写pcd点云文件
  20. 开源GIS浅谈 【转】

热门文章

  1. VTK:vtk3DSImporter用法实战
  2. boost::type_index模块type_index`(和 `type_info`)能够存储确切的类型,无需剥离 const、volatile 和引用
  3. boost::set_difference相关的测试程序
  4. boost::math::quadrature::exp_sinh用法的测试程序
  5. boost::prior用法的测试程序
  6. VTK:图片之CenterAnImage
  7. VTK:几何对象之ParametricSuperEllipsoid
  8. OpenCV密集光流算法的实例(附完整代码)
  9. Qt Creator将应用程序部署到QNX Neutrino设备
  10. OpenGL着色器创建一个星系由颗粒制成