表达式语言(EL)和OGNL

1.OGNL介绍
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
它使用相同的表达式去存取对象的属性。
我们先来看看一个简单的例子:
比如用户注册,我们输入框的name用到的名字就是OGNL的表达式,比如:用户名的输入框:“< input type="text" name="user.username" >”,
在用户注册成功之后我们要显示用户注册的信息,用了“ ”。
Input输入框里的“user.username”,它解析成Java语句为:getUser().setUsername();
property标签里的“user.username”解析为Java语句:getUser.getUsername();
我们的两个表达式都是相同的,但前一个保存对象属性的值,后一个是取得对象属性的值。
 
2.值堆栈-OgnlValueStack
OGNL在框架中的应用,最主要是支持我们的值堆栈(Value Stack)——OgnlValueStack,它主要的功能是通过表达式语言来存取对象的属性。
用户界面输入数据,它会根据保存表达式将数据依次保存到它堆栈的对象中,业务操作完成,结果数据会通过表达式被获取、输出

在OgnlValueStack中,一个堆栈其实是一个List

我们通过表达式向堆栈对象操作时,我们并不知道堆栈中有哪些对象。
OgnlValueStack会根据堆栈由上向下的顺序(先入栈在下面,最后入栈在最上面)依次去查找与表达式匹配的对象方法,找到即进行相应的存取操作。
假设后面对象也有相同的方法,将不会被调用。

注意:
1)Map属性的存取,它的表达式语言如:users['zhao'],注意它用’’来引用HashMap的key字符串。
2)OgnlValueStack中堆栈的原理,请特别注意它的[0].toString、[1].toString、[2].toString,它们依次调用堆栈中对象的toString()方法,
并逐一的减少堆栈最上面的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值