《深入浅出struts2》--第四章,OGNL

一,ValueStack栈

  1. struts在执行相应的动作方法之前会先创建一个名为ValueStack的对象,ValueStack对象用来保存该动作对象和其他对象。,存在这个对象里面的所有数据可以被拦截器,jsp等等访问。
  2. Valuestack栈分为两个部分:                                                                                                                                                                                      ObjectStack用来存储动作和相关对象                                                                                                                                                                ContextMap存储各种映射关系(作用域)《深入浅出struts2》--第四章,OGNL_第1张图片指出:attr,这个map用来按照request,session,application这个顺序检索某个属性。
  3. 通常使用OGNL表达式访问Value Stack栈中的数据。访问Context Map需要给OGNL表达式加一个前缀#;没加前缀,OGNL引擎就会在Object Stack里进行搜索访问。

二,OGNL表达式

访问Object Stack栈中的对象属性

    1. 访问Object Stack某个对象的属性:
    object.propertyName
    object.['propertyName']
    object["propertyName"]
    提示:在对象栈中,每个对象从栈顶到栈低,都可以通过一个下标来引用。例如:[0]引用栈顶对象,[1]引用第二个对象。。。。
             则,可以这样访问对象栈中某个属性:[0].propertyName,还有另外两种方式。

  1. Struts里的OGNL访问特点:如果在指定对象里没有找到指定的属性,则到指定对象的下一个对象里继续搜索。从指定对象开始往下找,找到则停止。说下,从栈顶对象开始搜索,就可以省略引用,即[0].name等价于name。
  2. 如果这个属性的返回值依旧是个对象,则就可以继续用这个规则向下访问。

读取Context Map栈中的对象属性
1,
#object.propertyName
#object.['propertyName']
#object["propertyName"]
调用字段和方法:
可以调用任何一个类的静态字段和方法。
可以调用ValueStack中对象的公共字段和方法(静态的或其他类型的都可以)。
调用方法都允许传递参数。
@全限定类名@字段名/方法名(参数列表)
********************************
调用示例字段和方法:
object.fieldName
object.methodName(argList)
上面object是ObjectStack栈里的某个对象的引用

访问数组类型,List类型,Map类型的属性:
像访问其他数组/List一样访问元素以及访问操作数组/List的方法。
注意访问某个类属性返回的Map集合中的值时,不带#。但是访问Context Map里的Map一定要带前缀#
返回的数组:a,b,c
返回的list:[a,b,c] OGNL表达式创建一个List {"a","b","c"}
返回Map:{key-1=value-1,key-2=value-2} OGNL表达死创建一个Map #{key-1:value-1,key-2:value-2}

注意:一般会结合OGNL和EL一起使用。

你可能感兴趣的:(《深入浅出struts2》--第四章,OGNL)