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

来源:互联网 发布:立项依据怎么写 知乎 编辑:程序博客网 时间:2024/04/26 17:38

一,ValueStack栈

  1. struts在执行相应的动作方法之前会先创建一个名为ValueStack的对象,ValueStack对象用来保存该动作对象和其他对象。,存在这个对象里面的所有数据可以被拦截器,jsp等等访问。
  2. Valuestack栈分为两个部分:                                                                                                                                                                                      ObjectStack用来存储动作和相关对象                                                                                                                                                                ContextMap存储各种映射关系(作用域)指出: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一起使用。

    0 0