Ognl表达式 值栈对象ValueStack

ValueStack值栈主要包含另个部分:

1.map栈(非根元素) context:主要存储域对象。

2.list栈(根元素) root:主要存储

(1)通过值栈的push()方法存放的对象

(2)Map对象(通过值栈的set()方法存放的数据)

(3)Action对象

(4)其他代理对象.

测试类OgnlDemo2

<span style="font-size:14px;"><span style="font-family:Courier New;">package cn.itcast.ognl;

import java.util.Map;

import cn.itcast.domain.Admin;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
import com.sun.accessibility.internal.resources.accessibility;

public class OgnlDemo2  extends ActionSupport{
	public Admin admin=new Admin("liweikang","123");

	public Admin getAdmin() {
		return admin;
	}

	public void setAdmin(Admin admin) {
		this.admin = admin;
	}

	public String execute() throws Exception {
		ActionContext ac = ActionContext.getContext();
		ac.getContextMap().put("request_data", "request_data");
		ac.getSession().put("session_data", "session_data");
		ac.getApplication().put("application_data", "application_data");
		ValueStack stack = ac.getValueStack();
		//放到栈顶
		stack.push(admin);
		stack.set("admin1", new Admin("程崇树", "123") );
		System.out.println(stack);<strong><span style="color:#cc33cc;">//我们在这行打了一个断点进行调试</span></strong>
		return SUCCESS;
	}
}</span>
</span>

struts.xml配置文件:

<span style="font-family:Courier New;font-size:14px;"><package name="ognl" extends="struts-default">
		<action name="ognl1" class="cn.itcast.ognl.OgnlDemo2" method="execute">
			<result name="success">/ognl.jsp</result>
		</action>
</package></span>

浏览器访问OgnlDemo2进行断点调试:

可以发现值栈的两个对象分别为map栈和list栈

点开context 找到values:

打开values观察:

找到list栈即root

在ognl1.jsp中取出数据:

<span style="font-family:Courier New;"><body>
    <s:property value="#request.request_data"/>
    <s:property value="#session.sesson_data"/>
    <s:property value="#application.application_data"/>
    <s:property value="admin.username"/>
  </body></span>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-23 21:23:40

Ognl表达式 值栈对象ValueStack的相关文章

struts2中的值栈对象ValueStack

ValueStack, 即值栈对象. 值栈对象: 是整个struts数据存储的核心,或者叫中转站. 用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:  然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面. (key: struts.valueStack):     开发者只需要通过ActionContext对象就可以访问struts的其他的关键对象. (ActionContext是给开发者用的,

OGNL表达式&amp;值栈&amp;拦截器

OGNL 什么是ognl OGNL是Object-Graph Navigation Language的缩写,对象图导航语言. 他并不是Struts2的一部分,他只是经常和Struts2一起使用 ognl有啥作用 支持对象方法的调用 支持静态方法的调用和值访问 来操作值栈中的数据,访问OGNL上下文和ActionContext 操作集合对象 ognl的要素 Root对象 Context对象 值栈 什么是值栈 Struts2将XWork对Ognl的扩展这一套机制封装起来,这个对象叫ValueStac

框架学习之Struts2(三)---OGNL和值栈

一.OGNL概述 1.1OGNL是对象图导航语言(Object-Graph Navigation Languaged)的缩写,他是一种功能强大的表达式语言,通过简单一致的表达式语法,可以存取Java对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型的转化功能.他使用相同的表达式去存取对象的属性.如果吧表达式看作一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与java对象之间沟通的桥梁. 1.2OGNL的要素 表达式:表达式是整个OGNL的核心,OGNL会根据表达式去对

OGNL与值栈

一.OGNL入门 1.什么是OGNL OGNL的全称是对象图导航语言(Object-Graph Navigation Language),它是一种功能强大的开源表达式语言.使用这种表达式语言,可以通过使用某种表达式语言,来存取Java对象的任意属性,调用Java的方法,同时能够自动实现必要的数据类型转换, 2.OGNL的作用 Struts2默认的表达式语言就是ognl表达式语言,该语句具有以下的特点 支持对象方法的调用.例如:objectName.methodName(). 支持静态方法调用和值

Struts2.x教程(二) OGNL和值栈

一.OGNL是什么 OGNL(Object Graph Nvigation Language,对象图导航语言)是一个开源的表达式引擎.通过使用OGNL的表达式语法可以存取Java对象树的任意属性和调用Java对象树的方法等. 我们通过一个示例来了解OGNL. 分别创建三个实体类(全部省略了getter.setter方法): //学生类 public class Student { private String name; private Integer age; private Grade gr

Struts2 (三) — OGNL与值栈

一.OGNL表达式 1.概述 1.1什么是OGNL ? OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能. ? Eg: hibernate 查询方式 : 对象导航查询. ? 其实就是查询出来了一个对象之后,通过对象里面的getXXX() 来获取关联的对象. ? 它是一个开源项目,并不是struts发明

Struts工作机制图+OGNL+EL+值栈(Map,对象栈)

struts 值栈  通过get set方法 方便的获取,设置属性值      比如从jsp页面传来的參数...从Action设置jsp所要回显的内容 注意EL表达式,struts2对request进行了封装,所以它的查找顺序 多了一个findvalue() 如上图 再看以下的代码: public class UserAction { private String username; //查看用户的具体信息 public String detail(){ username = "张三"

struts2(六)之ognl表达式与ActionContext、ValueStack

前言 前面已经把struts2讲内容说了一半了,我写的很详细,希望对博友们有帮助. 一.OGNL表达式语言概述 1.1.OGNL表达式简介 百度上是这样说: OGNL是Object-Graph Navigation Language的缩写,它是一个单独的开源项目.Struts2框架使用OGNL作为默认的表达式语言. 它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的 结构图,实现字段类型转化等功能.它使用相同的表达式去存取对象的属性.

关于Struts2中的值栈与OGNL表达式

1.1.1    OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL     :OGNL比EL功能强大很多倍. 它是一个开源项目. Struts2框架使用OGNL作为默认的表达式语言. OGNL相对其它表达式语言具有下面几大优势: 1.支持对象方法调用,如xxx.doSomeSpecial(): 2.支持类静态的方法调用和值访问,表达式的格式: @[类全名(包括包路径)]@[方法名 |  值名],例如: @[email prot