OGNL表达式
ognl的全称是对象图导航语言 她时一种功能强大的开源表达式语言,使用这种语言,可以通过某种表达式语法 存取java对象的任意属性 调用java对象的方法 同时能够自动实现必要的类型转换,
在struts2中 ognl表达式就是默认的表达式语言
使用要求:
使用ognl表达式 需要先用struts2的标签库
细节:
struts2框架本身可能把html中的某些字符串看成是ognl表达式 用来给属性赋值
它的特点:
它不仅仅可以用来取值,显示,还可以赋值, 取值是我们程序员使用框架的做的事,赋值是框架为我们做的.
ognl表达式的基本语法:
借助s:property标签输出内容到浏览器
s:property的作用
把value属性取值所对应的内容输出到浏览器上,注意 它不是把value的值输出到浏览器上
属性: value 取值是一个ognl表达式
把一个ognl表达式看成字符串的方式
%{"ognl表达式"} . %{'ognl表达式'}
简写:'ognl表达式' 或者"ognl表达式"
把一个字符串看成ognl表达式的方式
%{字符串}
struts2框架不支持ognl表达式 静态方法的调用 开启方式如下
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>--%>
ognl表达式访问静态属性和静态方法
格式:@包名,包名...类名@静态属性名称
ognl表达式和EL表达式的的比较
1.使用ognl可以进行赋值,el不能进行赋值 只能取值
ognl表达式赋值的过程 ,一般来说是由程序自动帮我们做的,我们使用ognl是用来在页面进行取值操作的
2.el和ognl都可以做取值操作
el: 从四大域对象和值栈当中取值(request对象被增强,主要增强的是getAttrbute方法)
ognl: 可以从值栈中获得数据,也可以从四大域中取值
特殊符号的用法
% : 使用%{} , 获取的是值栈当中的数据, %{} 可以省略
# : 从map当中取值,(request,session ,application)
$: $符号主要应用于el表达式中, 在配置文件当中也可以使用$ognl进行配置.
ognl上下文
ContextMap : 是ognl上下文对象,是struts2中封装数据最大的对象,它是一个Map结构的对象,七中key是字符串,value是一个object
ActionContext: 它是一个工具类,是struts2框架提供给我们的,可以让我们调用其中的方法,快速的操作ContextMap
ActionContext对象以及和ContextMap的关系
ActionContext相当于对ContextMap进行了一次再封装
ValueStack对象
ValueStack是Struts的一个接口,字面意义为值栈,
它是ContextMap中的一部分,里面的结构是一个List,是我们可以快速访问数据的一个容器,它的封装有Struts2框架完成的
值栈都都有什么
值栈中存的都是对象,因为它本质就是一个List,List中只能存对象
值栈中包涵了我们通过push方法压栈的对象,当前执行的动作和一个名称为DefaultTextProvider的类.
当我们不操作值栈时,默认的栈对象是当前执行的动作类,