码迷,mamicode.com
首页 > 其他好文 > 详细

OGNL表达式

时间:2017-08-20 00:42:23      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:地方   png   st3   访问   his   关键字   let   值栈   子集   

1.ognl表达式和el表达式的区别

  1)el/jstl 是sun公司的标准,而ognl不是(所有更加推荐使用el/jstl)

  2)ognl一定要配合Struts2的标签一起使用

2.ognl表达式的作用(前提是配合struts2的标签)

  1)取值

  2)创建List和Map对象:创建List对象"{‘list0‘,‘list2‘,‘list3‘}"创建Map对象:"#{"key1":value1,"key2":value2}";

  3)判断元素在不在集合中: 关键字in、not int 比如 "‘list0‘ in {‘list0‘,‘list2‘,‘list3‘}"

  4)投影(过滤、筛选):Books.{?#this.price>60} 整个表示从Books集合中根据条件一个筛选出来的子集合,用来遍历即可

 

3.ognl表达式注意的地方

 

 

 

技术分享

  1)ValueStack(值栈):将一次请求涉及到的数据进行了封装;值栈是线程安全的,每一次请求都会创建一个

  2)ValueStack 将servlet api对象对数据的操作进行了封装。就像Spring MVC中的Model类一样

  3)OGNL Context在struts2 中就是ActionContext(Map数据类型)。

  4)ValueStack是OGNLContext的根元素。用ognl表达式访问根元素时不需要加上#。访问非根元素是需要加上#,比如request:#request.属性名

  5)一个访问过来,先创建ActionContext对象,再创建ValueStack对象,再创建Action类对象,再将Action对象放入ValueStack对象中。也就是说,Action对象以及该对象的属性都是存放在OGNLContext的根对象中,用ognl表达式访问的时候不需要加上#。

  6)ognl表达式查找的顺序:

      ValueStack中有个root变量,存放了很多对象,root中存放的第一个对象叫做栈顶对象。ognl表达式查找的顺序就是先从栈顶对象开始找,找不到就再往后找。所以当栈顶对象和后面的对象有相同的属性时,页面的ognl表达式仅为属性名时,这就导致页面显示的是栈顶对象的属性值,而不是后面对象的属性值。

  7)el表达式在strtus中除了能访问原来能访问 的域(page,request,session,application)之外,还能访问ValueStack里的数据,这个功能是有struts框架扩展的

更多细节参考链接:http://blog.csdn.net/resigshy/article/details/7560573

 

OGNL表达式

标签:地方   png   st3   访问   his   关键字   let   值栈   子集   

原文地址:http://www.cnblogs.com/wanjn/p/7398297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!