Struts2的Stack Context和ValueStack
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相关推荐
- 深入分析JavaWeb Item48 -- Struts2中OGNL表达式与ValueStack
一.OGNL表达式 1.OGNL表达式介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作 ...
- GLib-CRITICAL **: g_main_context_pop_thread_default: assertion `g_queue_peek_head (stack) == context
在执行qt静态编译的程序时出现的问题.原因是没有找到编译时所用的libglib库 这时候需要看看编译时makefile文件中libglib库所指定的目录,再将该目录下的libglib库复制到运行机器上 ...
- Struts2的OGNL标签详解
一.Struts2可以将所有标签分成3类: UI标签:主要用于生成HTML元素的标签. 非UI标签:主要用于数据库访问,逻辑控制等标签. Ajax标签:用于Ajax支持的标签. 对于UI标签,则有可以 ...
- 使用Struts2标签
Struts2提供了大量标签帮助开发表现层页面,Struts2标签库与Struts1相比,不依赖于任何表现层技术,大部分可以在各种表现层技术中使用,包括最常用的jsp页面,也可以在Velocity和F ...
- JSP页面中常用四种标签
JSP页面常用四种标签: 1. EL表达式: ${} 2. jstl表达式(sun apache): <%@ taglib prefix="c" uri="htt ...
- Struts2中OGNL,valueStack,stackContext的学习
http://jwx0925.iteye.com/blog/630335 [/color]学习Struts2,一直不明白表单中的值是怎么传给Action的,上网查了些资料,基本了解了!下面基本是从几个 ...
- Struts2的ValueStack(值栈)介绍
1.在之前写的一些文章中,有用到<s:debug></s:debug>这个Struts2自带的标签,会在jsp页面中产生一个Debug按钮,点击这个按钮时,就会出现ValueS ...
- Struts2第九篇【OGNL、valueStack详解】
tags: Struts2 什么是OGNL表达式? OGNL是Object Graphic Navigation Language 是操作对象属性的开源表达式. Struts2框架使用OGNL作为默认 ...
- struts2请求处理过程源代码分析(1)
2019独角兽企业重金招聘Python工程师标准>>> 转载自:http://www.see-source.com/ 源码解析网 网上对于struts2请求处理流程的讲解还是比较多的 ...
最新文章
- win2003服务器装spl2008,打安全补丁后无法进入SQL Server Management Studio
- 迷你DVD管理器项目
- PHP中的static静态变量的使用方法详解
- 记忆化搜索斐波那契c语言,记忆化搜索--优化斐波那契数列递归函数
- Java描述 数据结构与算法
- UI实用素材模板|可临摹学习的控制面板
- python计算相关性显著性p值_基于python实现计算两组数据P值
- 使用分治思想求解最大子序列
- 常用排序算法(六)——希尔排序
- Elasticsearch报错:NodeDisconnectedException[[][IP:9300][cluster:monitor/nodes/liveness] disc
- asp 环境配置到mysql数据库增删改查
- A616-HP-ProDesk 480 G2 MT电脑网络同传
- 智慧小区云平台解决方案
- linux上复制文件命令是什么,Linux复制文件用什么命令怎么用
- 安川焊接机器人做圆弧运动编程_安川MOTOMAN工业机器人编程与操作(6)
- Command not found 解决
- matlab从mp4文件中提取音频,如何提取mp4视频中的音频文件 将视频转换为MP3音频...
- 图像极坐标变换的研究
- Open3d读写pcd点云文件
- 开源GIS浅谈 【转】
热门文章
- VTK:vtk3DSImporter用法实战
- boost::type_index模块type_index`(和 `type_info`)能够存储确切的类型,无需剥离 const、volatile 和引用
- boost::set_difference相关的测试程序
- boost::math::quadrature::exp_sinh用法的测试程序
- boost::prior用法的测试程序
- VTK:图片之CenterAnImage
- VTK:几何对象之ParametricSuperEllipsoid
- OpenCV密集光流算法的实例(附完整代码)
- Qt Creator将应用程序部署到QNX Neutrino设备
- OpenGL着色器创建一个星系由颗粒制成