struts2中的值栈对象ValueStack
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的更多相关文章
- 关于Struts2中的值栈与OGNL表达式
1.1.1 OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL :OGNL比EL功能强大很多倍. 它是一个开源项目. ...
- Struts2中的值栈
一 什么是值栈 值栈: struts2中提供的一种类似于域对象的工具, 用于struts2中的存值和取值. 每次访问Action的时候, 都会创建一个action对象, 而每个action对象中都存在 ...
- struts2中各种值栈问题
struts2中OGNL和 ValueStack(一) 收藏 学习的时候,总分不清楚在struts2中页面的传值和取值是怎么来完成的,所以从网上搜了很多资料,现在把这些资料总结写,留着以后参考..看完 ...
- Struts2 中的值栈的理解
通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求 道服务器端 action时,就有个堆栈,如果action在服务器端 ...
- Java中的值栈
OGNL表示式使用 和 值栈 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式 ...
- Struts2 框架的值栈
1. OGNL 表达式 1.1 概述 OGNL(Object Graphic Navigation Language),即对象图导航语言; 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个 ...
- Struts2-获取值栈对象与结构
1.获取值栈对象有多种方式 (1)使用ActionContext类里面的方法获取值栈对象 @Override public String execute(){ //1.获取ActionContext类 ...
- Struts2笔记_值栈
A.值栈概述 值栈(ValueStack),通俗的来说就是Struts2里面用来管理和存储数据的东西.struts2项目部署运行后,底层会创建一个action实例,同时也会在内存上划分一块区域,这个区 ...
- Ognl值栈对象及struts标签
用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...
随机推荐
- Mac OS终端提示符前缀”bogon”
像往常一样新打开一个终端,却发现一个很有意思的现象,以前的提示符的组成为: [机器名]:~[用户名] 以前:YangGavin's MacBook Pro:~ yanggavin$ 现在:bogon: ...
- Git一些其它的功能
Git 开始之前我们配置过user.name和user.email.其实还有很多其他的配置项 例如:让Git显示颜色,会让命令输出来更醒目: $ git config --global color.u ...
- SQL STUFF函数 拼接字符串
今日看到一篇文章,是关于和并列的,也研究了下,还是不错的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1 ...
- drupal7 安装百度编辑器Ueditor及后续使用
参考文章:drupal7安装百度编辑器ueditor 一.下载 1.需要下载安装的模块: 1.1.wysiwyg 1.2.ueditor 1.3Libraries 下载后安装在\sites\all\m ...
- HDU 5804 Price List
只需和总和比较即可. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> ...
- ZUFE OJ 2289 God Wang II
Description 这个世界太无聊了,于是God Wang想出了新的运算符号$,对于两个数x,y来说x$y的值等于x和y各个位置上的数字乘积之和,没有的位按0来算 比如说123$321=1*3+2 ...
- Xcode8.2 继续使用插件
网上参考了文章:http://www.jianshu.com/p/ab819babf2c3 使用的是:update_xcode_plugins . 但要注意的是,在Xcode 8.2下安装,并没有给我 ...
- Chapter 2 Open Book——15
The rest of the week was uneventful. I got used to the routine of my classes. 这周剩下的时间都是平淡无事的.我就是正常的上 ...
- mysql 表连接
1.子查询是指在另一个查询语句中的SELECT子句. 例句: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 其中,SELECT ...
- AngularJs多重视图和路由的使用
使用AngularJs来做多重视图和路由是在方便不过了,在开发过程中,都有许多的页面,而这些页面都有相同的部分,比如页面的头部和尾部通常都是一样的,变化的都是主体部分,还有就是一些后端管理的一些项目, ...