OGNL--基础

一、OGNL是一个功能强大的EL。通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图

      1支持对象方法调用,形式如:objName.methodName();

      2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 |  值名],例如:   

      @java.lang.String@format('foo %s''bar')或@tutorial.MyConstant@APP_NAME

 

    之所以命名为OGNL,就是因为它处理对象很给力。struts能够将对象层层解析。直接写<s:property value="user.role.roleName">,OGNL通过对象逐级导航找到子对象。

 

二、使用OGNL表达式   

 

    OGNL要结合struts标签来使用。由于比较灵活,也容易把人给弄晕,尤其是“%”、“#”、“$”这三个符号的使用。由于$广泛应用于EL中,这里重点写%和#符号的用法。

 

1、“#”符号有三种用途:   

  (1)、访问非根对象(struts中值栈为根对象)如OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:  

  parameters    
   包含当前HTTP请求参数的Map    
   #parameters.id[0]作用相当于request.getParameter("id")     
    
  request   
   包含当前HttpServletRequest的属性(attribute)的Map    
   #request.userName相当于request.getAttribute("userName")     
    
  session    
   包含当前HttpSession的属性(attribute)的Map    
   #session.userName相当于session.getAttribute("userName")     
    
    application    
     包含当前应用的ServletContext的属性(attribute)的Map    
     #application.userName相当于application.getAttribute("userName")     
     
  
    注:attr 用于按request > session > application顺序访问其属性(attribute),#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止

 

在struts2标签里使用OGNL表达式。  在普通标签类使用EL表达式。

posted @ 2013-12-01 20:11  keia  阅读(147)  评论(0编辑  收藏  举报