标签:地方 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
标签:地方 png st3 访问 his 关键字 let 值栈 子集
原文地址:http://www.cnblogs.com/wanjn/p/7398297.html