摘要:
- OGNL表达式
- OGNL的概述
- OGNL:对象图导航语言,是一门功能强大的表达式语言。
- OGNL的功能
- 调用对象的方法
- 调用对象的静态方法
- 表达式串联
- 访问ActionContext和OgnlContext数据
- OGNL独立的表达式:
- Java环境下入门
- Struts2环境下入门
- OGNL的概述
- 值栈
- 值栈的概述
- ValueStack:是一个接口,实现类OgnlValueStack。是数据的中转站,贯穿了整个Action,有一个Action的实例,就会创建一个ValueStack对象。
- 值栈的内部结构
- Root :CompoundRoot,就是一个ArrayList。
- Context :OgnlContext,就是一个Map。
- ActionContext和值栈关系
- ActionContext获得值栈的引用。
- 获得值栈
- 通过ActionContext获取
- 通过request获取
- 操作值栈
- 利用Action本身在栈中的特点,Action中的属性。
- 手动操作值栈:
- 获取值栈的数据
- OGNL获取:<s:property value=”…”/>
- EL获取值栈的数据
- 底层增强request.getAttribute(“”);
- 值栈的概述
- ONGL特殊字符
- #号
- 获取context数据
- 构建map集合
- %号
- 强制解析OGNL
- $号
- 在配置文件中使用OGNL
- #号
1.2OGNL
1.2.1OGNL概述
1.2.1.1 什么是OGNL
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
OGNL:对象图导航语言,比EL表达式强大很多倍的语言。
- El:从域对象中获取数据,从EL的11个对象中获取。
- OGNL:调用对象的方法,获取STruts2的值栈的数据。OGNL其实是第三方的表达式语言。
1.2.1.2为什么学习OGNL?
1.2.1.3 OGNL使用的要素
- 表达式
- 根对象
Context对象
1.2.2 OGNL的JAVA环境的入门
1.2.2.1 访问对象的方法
1.2.2.2访问对象的静态方法
1.2.2.3 获得Root中的数据
1.2.2.4获得Context中的数据
1.2.3 OGNL的Struts环境的入门
1.2.3.1 访问对象的方法
1.2.3.2访问对象的静态方法
1.3值栈
1.3.1 值栈的概述
1.3.1.1 什么是值栈
ValueStack其实类似于一个数据中转站(Struts的框架当中的数据就保存到了ValueStack中)。
- ValueStack接口,实现类OgnlValueStack对象。
- ValueStack贯穿整个Action的生命周期。(ACtion一旦创建了,框架就会创建一个 ValueStack的对象)。
1.3.1.2 值栈的内部结构
ValueStack中有两个主要的区域。
- root区域:其实就是一个ArrayList。里面一般放置对象。获取root的数据不需要加#。
- context区域:其实就是一个Map。里面放置的是web开发的常用的对象数据的引用。
获取context数据需要加#。
- request
- session
- application
- parameters
- attr
所说的操作值栈,通常指的是操作的ValueStack中的root区域。
1.3.1.3 值栈与ActionContext的关系
ServletContext:Servlet的上下文
ActionContext:Action的上下文
通过源码查看到:当请求过来的时候,执行过滤器中doFilter方法,在这个方法中创建ActionContext,在创建ActionContext过程中,创建ValueStack对象,将ValueStack对象传递给ActionContext对象。所以可以通过ActionContext获取值栈对象。
ActionContext对象之所以能够访问Servlet的API(访问时域对象的数据)。因为在内部有值栈的引用。
1.3.1.4 获得值栈对象
- 通过ActionContext对象获得值栈。
- 在Struts的内部,将值栈存入request中一份。
1.3.1.5 操作值栈---向值栈中存入数据
一种:在Action中提供属性的get方法的方式
默认的情况下,将Action对象压入值栈。Action的属性也在值栈中。
二种:使用ValueStack中本身的方法的方式
1.3.1.6获取值栈数据
获取值栈中的数据就是在页面中使用OGNL表达式即可。
获取root的数据:不需要加#
获取context数据
- 存数据:
- 取数据
1.3.1.7 EL为何访问值栈数据
1.4 OGNL中的特殊字符
1.4.1 #号
1.4.1.1 获取context的数据
1.4.1.2 使用#号构建map集合
1.4.2 %号
1.4.2.1 强制解析OGNL
1.4.2.2 不强制解析OGNL
1.4.3 $号
1.4.3.1 在配置文件中使用OGNL
属性文件
国际化地方:
XML文件
文件下载:
配置: