Struts2中的值栈
一 什么是值栈
值栈: struts2中提供的一种类似于域对象的工具, 用于struts2中的存值和取值.
每次访问Action的时候, 都会创建一个action对象, 而每个action对象中都存在一个值栈对象
值栈对象的声明周期与Action的生命周期(第一次访问action的时候被创建, 当action中方法返回值时被销毁)一致.
二 Action中值栈对象的获取方法
每个action只对应一个值栈对象. 值栈对象可以通过ActionContext对象中的方法获取.
ActionContext context = ActionContext.getContext();
ValueStack valueStack = context.getValueStack();
三 值栈的结构
值栈内部主要由两部分构成: root和context;
root --> compoundroot extends ArrayList --> root是由list集合构成的
context --> ognlcontext implements Map --> context是由map集合构成的
可以通过ognl表达式中的<s:debug>标签查看值栈的内部结构
在值栈中, 操作的数据一般是root数据(默认的在action中没有任何操作时, root栈顶元素就是action的引用). 而context中主要存放的是一些对象的引用.
OgnlContext的主要结构为:request, session,
application, parameters, attr, 他们对应的值分别是:request对象的引用, HttpSession的引用, ServletContext对象的引用, 请求参数(action后面的请求参数),
获取域对象.
四 值栈中存放数据
4.1 通过值栈对象中的set方法
//1.通过值栈中的set方法,往值栈的root中存值
ActionContext context =
ActionContext.getContext();
ValueStack stack =
context.getValueStack();
stack.set("key",
"value");

4.2 通过值栈对象中的put方法存值
//2.通过值栈中的push方法,往栈顶添加值
stack.push("TopstackElement");

4.3 在action中定义成员变量并生成相应的set方法
1> 值栈中存放基本数据类型
package com.rodge.stack;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
public class SaveValueStack extends ActionSupport {
//设置序列化版本号
private static final long serialVersionUID = 1L;
private String username = "";
public String getUsername() {
return username;
}
@Override
public String execute() throws Exception
{
//3.通过成员变量+get方法,设置值栈中的值,不用单独分配内存空间
username = "stackValue";
return "save";
}
}

2> 值栈中存放对象
package com.rodge.stack;
import com.opensymphony.xwork2.ActionSupport;
public class SaveObjectInStack extends ActionSupport {
private static final long serialVersionUID = 1L;
private User user = new User();
public User getUser() {
return user;
}
@Override
public String execute() throws Exception {
user.setUsername("小新");
user.setAddress("Japen");
user.setDesc("6毛");
return "save";
}
}

3> 将集合存放在值栈中
package com.rodge.stack;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class ListStackAction extends ActionSupport {
static final long serialVersionUID = 1L;
private List<User> list = new ArrayList<User>();
public List<User> getList() {
return list;
}
@Override
public String execute() throws Exception {
User user1 = new User();
user1.setUsername("小明");
user1.setAddress("北京");
user1.setDesc("教师外面");
User user2 = new User();
user2.setUsername("小王");
user2.setAddress("隔壁");
user2.setDesc("小王叔叔");
list.add(user1);
list.add(user2);
return "list";
}
}

五 在jsp页面中获取值栈数据
使用struts2标签和ognl表达式获取值栈数据
<%@ taglib uri="/struts-tags" prefix="s" %>
5.1 获取值栈中的字符串数据
<s:property value="username" />
5.2 获取值栈中存放的对象数据
<s:property value="user.username" />
<s:property value="user.address" />
<s:property value="user.desc" />
5.3 获取值栈中存放的list集合
<!-- 第一种获取list集合的方法 -->
<s:property value="list[0].username" />
<s:property value="list[0].address" />
<s:property value="list[0].desc" />
<hr/>
<!-- 第二种获取list集合中数据的方法 -->
<s:iterator value="list">
<s:property value="username"
/>
----
<s:property value="address"
/>
----
<s:property value="desc"
/>
<br/>
</s:iterator>
<hr/>
<!-- 第三种获取list集合中数据的方法 -->
<s:iterator value="list"
var="user">
<s:property value="#user.username" />
--------
<s:property value="#user.address" />
--------
<s:property value="#user.desc" />
<br/>
</s:iterator>
5.4 值栈中获取其他数据
1> 获取始终值栈对象的set方法存放在值栈中的数据stack.set("key", "value");
<s:property value="key" />
2>使用值栈对象里面的push方法把数据放到值栈里面
<!-- 获取push方法存放到值栈中的数据 -->
获取push方法存放到值栈中的数据:
<s:property value="[0].top" />
3> 位什么EL表达式可以获取值栈中的数据
EL表达式并不是直接获取值栈中的数据. 是因为struts2中增强了reqeust总的getAttribute方法, 增强的getAttribute方法首先会在request域中寻找是否有值, 如果request域中有, 则直接返回; 如果域对象里面如果没有值,得到值栈对象,从值栈对象里面把值获取到,最后放到域对象里面.
六 Ognl中#和%的使用
1
#: 获取context里面的数据



2
%: 的使用
(1)使用struts2的表单标签,显示值,使用ognl表达式


写ognl作为字符串显示出来,没有作为ognl表达式执行
(2)使用%让表单标签里面值作为ognl执行

Struts2中的值栈的更多相关文章
- 关于Struts2中的值栈与OGNL表达式
1.1.1 OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL :OGNL比EL功能强大很多倍. 它是一个开源项目. ...
- struts2中各种值栈问题
struts2中OGNL和 ValueStack(一) 收藏 学习的时候,总分不清楚在struts2中页面的传值和取值是怎么来完成的,所以从网上搜了很多资料,现在把这些资料总结写,留着以后参考..看完 ...
- Struts2 中的值栈的理解
通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求 道服务器端 action时,就有个堆栈,如果action在服务器端 ...
- struts2中的值栈对象ValueStack
ValueStack, 即值栈对象. 值栈对象: 是整个struts数据存储的核心,或者叫中转站. 用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionCont ...
- Java中的值栈
OGNL表示式使用 和 值栈 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式 ...
- Struts2 框架的值栈
1. OGNL 表达式 1.1 概述 OGNL(Object Graphic Navigation Language),即对象图导航语言; 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个 ...
- struts2 ValueStack(值栈)解析
Struts2一个重要点就是值栈. ValueStack,是用来存储一些在各个action,或者说是通过s标签.el表达式等给前台Jsp等页面展示的东西. ValueStack是一个接口,其内部接口非 ...
- Struts2笔记_值栈
A.值栈概述 值栈(ValueStack),通俗的来说就是Struts2里面用来管理和存储数据的东西.struts2项目部署运行后,底层会创建一个action实例,同时也会在内存上划分一块区域,这个区 ...
- struts2学习(7)值栈简介与OGNL引入
一.值栈简介: 二.OGNL引入: com.cy.action.HelloAction.java: package com.cy.action; import java.util.Map; impor ...
随机推荐
- 使用Gradle发布Android开源项目到JCenter
喜欢做些开源项目的朋友,相信有不少人都希望能把自己的项目发布到公共的中央仓库,如maven中央仓库,以供别人方便地集成使用.而使用了Android Studio的同学,应该也对gradle和jcent ...
- OV2685翻转问题
首先说明的是,影响camera方向的有两个地方,分别是应用方向,也就是app,内核camera方向,在对应的ov2685.c的文件里. 下面针对具体问题来进行详细说明. 1.OV2685控制上下倒18 ...
- ITU-T Technical Paper: IP服务性能模型
本文翻译自ITU-T的Technical Paper:<How to increase QoS/QoE of IP-based platform(s) to regionally agreed ...
- 【Android 应用开发】Android应用的自动更新模块
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 软件的自动更新一般都与Splash界 ...
- C语言实现牛顿迭代法解方程
利用迭代算法解决问题,需要做好以下三个方面的工作: 一.确定迭代变量 在可以用迭代算法解决的问题中,我们可以确定至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量. 二.建立迭 ...
- 【Java编程】Java在dos窗口编译与执行的批处理
最近在Java编程过程中,常用到dos窗口对程序进行编译与运行.但是不方便之处在于每次都要输入命令进入将要编译的程序的目录(其实也有简单的方法,在文章末尾给出).于是编写了一个配置文件,可以一次修改, ...
- Volley网络框架完全解析(实战篇)
好了,今天就通过一个瀑布流demo,来使用Volley框架请求网络图片. 前言: 我们使用NetworkImageView显示图片: 1.因为该控件可以自动的管理好请求的生命周期,当与父控件detac ...
- ZooKeeper 会话超时
1.会话概述 在ZooKeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID).服务器和客户端之间维持的是一个长连接,在SESSION_TIMEOUT ...
- ZooKeeper的快速搭建
本文是ZooKeeper的快速搭建,旨在帮助大家以最快的速度完成一个ZK集群的搭建,以便开展其它工作.本方不包含多余说明及任何调优方面的高级配置.如果要进行更深一层次的配置,请移步<ZooKee ...
- SharePoint 2013配置开发环境,需安装VS2012插件
SharePoint 2013已经安装好了,接下来就是配置开发环境,安装VS2012,但是,装好了以后,发现没有SharePoint 2013开发的支持,如下图: 然后,去网上查找资料,VS2012对 ...