OGNL 详解

Struts2 OGNL详解

1.概念:

OGNLObject-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。OGNL表达式为Struts2标签库服务,就像EL表达式为JSTL服务。因此要学习Struts2标签库,就要了解OGNL

 

2.OGNL层次结构:

注意:上下文中的根对象(ValueStack)可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”。

ValueStack对象。这个对象贯穿整个Action的生命周期(每个Action类的对象实例会拥有一个ValueStack对象)。当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到 ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。

Action中获得ValueStack对象:ActionContext.getContext().getValueStack()

l         Top语法

使用Top获取值栈中的第二个对象:<s:property value="[1].top.对象"/>

l         N语法

使用N获取值栈中的第二个对象:<s:property value="[N].对象"/>

l         @语法

调用action中的静态方法:<s:property value="@vs1@静态方法"/> vs:值栈 1:表示第一个。

 

 

3.OGNL API

OGNLAPI看起来就是两个简单的静态方法:

  public static Object getValue( Object tree, Map context, Object root ) throws OgnlException;

  public static void setValue( Object tree, Map context, Object root, Object value ) throws OgnlException

1) OGNL表达式的计算是围绕OGNL上下文进行的。

OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。

上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”。

2) Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:<s:propertyvalue="xxx"/>

3) Struts2ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext中。

4) 值栈(ValueStack) 

可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。

Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。

5) 调用ActionContextput(key,value)放入的数据,需要使用#访问。

 

4.OGNL中三个重要的符号

"#"的三种主要用法

访问OGNL上下文和Action上下文,#相当于ActionContext.getContext()

名称

作用

例子

parameters

包含当前HTTP请求参数的Map

#parameters.id[0]作用相当于

request.getParameter("id")

request

包含当前HttpServletRequest的属性(attribute)Map

#request.userName相当于

request.getAttribute("userName")

session

包含当前HttpSession的属性(attribute)的Map

#session.userName相当于

session.getAttribute("userName")

application

包含当前应用的ServletContext的属性(attribute)的Map

#application.userName相当于

application.getAttribute("userName")

attr

用于按request > session > application顺序访问其属性(attribute

 

 

用于过滤和投影集合

构造Map,如#{key1:value1,key2:value2...}

"%"的用途

在标志的属性为字符串类型时,计算OGNL表达式的值

"$"的主要用途

用于国际化资源文件中,引用OGNL表达式的值

在Struts2配置文件中,引用OGNL表达式

 

转载于:https://www.cnblogs.com/hezhiyaun/p/5505283.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值