OGNL(-)

用struts已经有五六年的时间了,可是真正的对OGNL熟悉吗?我想我是不熟悉的,今天网上查了下资料,记录下来,备忘
1.OGNL=Object Graph Navigation Language (俗称对象图导航语言)
2.struts框架将actionContext作为OGNL 上下文,将valueStack作为OGNL上下文的根对象,同时为了让struts的action与servlet API解耦,又将application,parameters,request,session,attr作为命名对象,至于OGNL上下文根对象平级(自己理解(虽然与OGNL根对象平级,但只是一个索引,真正访问里面的对象,还是要加#的))。根对象的属性,key访问,非根对象要用#key访问。
3.valueStack是个栈结构,栈的顶层是action对象,访问valueStack默认访问的是栈顶对象,所以访问action中的属性,可以省略#,直接属性名称即可
4.OGNL表达式可以做什么?
a.OGNL访问对象属性

b.OGNL访问对象方法

c.OGNL访问静态属性

d.OGNL调用静态方法

e.OGNL 使用索引访问数组和列表

f.OGNL操作符运算

g.OGNL访问集合的伪属性
size,isEmpty,keys,values,iterator.hasNext,iterator.next
5.何时用%{}?
struts标签中value值,什么时候是OGNL表达式(OGNL表达式会去OGNL上下文中搜索计算该值得出结构)?
struts标签中value属性类型是Object则一定是OGNL表达式,如果value属性不是对象类型,则需要用%{}来强制使用,保证其为OGNL表达式。例如:a: 这里的value是对象类型,可以省略%{},struts框架会根据value的值,去valueStack中查找key为该value的值得对象,如果找到了返回结构,找不到什么都不返回。 会根据 i love you 去valueStack中查找,查不能什么都不输出,但是如果是为了输出i love you 字符串的话,可以将其强制为字符串,在i love you 外面将引号这样返回的结果就是 i love you。b:textfield标签,其value属性的类型是字符串,如果要用OGNL表达式必须使用%{}。
6.OGNL投影
将集合中的数据想象成数据库表中的数据,投影,就是从这张表中取出一列所构成的一个新的集合。

7OGNL过滤(选择)
//取出name为张三的所有对象
10}”/>//取出age值大10的第一个对象
10}”/>取出age值大10的最后一个对象

你可能感兴趣的:(struts)