1. 一、什么是OGNL,有什么特点?
  2. OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言。OGNL有如下特点:
  3. 、支持对象方法调用,形式如:objName.methodName();
  4. 、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 |  值名],例如:
  5. @java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
  6. 、支持赋值操作和表达式串联,例如:
  7. price=, discount=;
  8. 、访问OGNL上下文(OGNL context)和ActionContext;
  9. 、操作集合对象。
  10. 二、使用OGNL表达式
  11. OGNL要结合struts标签来使用。由于比较灵活,也容易把人给弄晕,尤其是“%”、“#”、“$”这三个符号的使用。由于$广泛应用于EL中,这里重点写%和#符号的用法。
  12. 、“#”符号有三种用途:
  13. ()、访问非根对象(struts中值栈为根对象)如OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
  14. 名称
  15. 作用
  16. 例子
  17. parameters
  18. 包含当前HTTP请求参数的Map
  19. #parameters.id[]作用相当于request.getParameter("id")
  20. request
  21. 包含当前HttpServletRequest的属性(attribute)的Map
  22. #request.userName相当于request.getAttribute("userName")
  23. session
  24. 包含当前HttpSession的属性(attribute)的Map
  25. #session.userName相当于session.getAttribute("userName")
  26. application
  27. 包含当前应用的ServletContext的属性(attribute)的Map
  28. #application.userName相当于application.getAttribute("userName")
  29. 注:attr 用于按request > session > application顺序访问其属性(attribute),#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止。用于过滤和投影(projecting)集合,如books.{?#};构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
  30. ()、用于过滤和投影(projecting)集合,如: books.{?#}
  31. books.{?#}
  32. ()、构造Map,如: #{'foo1':'bar1', 'foo2':'bar2'}
  33. #{'foo1':'bar1', 'foo2':'bar2'}这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写:
  34. <s:property value="#myMap['foo1']"/>
  35. <s:property value="#myMap['foo1']"/>
  36. 、“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
  37. 这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval_r()功能,例如 :
  38. var oDiv = eval_r("document.all.div"+index)
  39. var oDiv = eval_r("document.all.div"+index)
  40. 当index变量为时,语句就会被当作var oDiv = document.all.div1  var oDiv = document.all.div1来执行。%{}就是起这个作用。举例:
  41. <s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
  42. <s:property value="#myMap['key1']"/>
  43. <s:url value="#myMap['key1']" />
  44. <s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
  45. <s:property value="#myMap['key1']"/>
  46. <s:url value="#myMap['key1']"/>
  47. 上面的代码第行会在页面上输出“value1”,而第行则会输出行改写成这样:
  48. <s:url value="%{#myMap['key1']}"/>
  49. <s:url value="%{#myMap['key1']}"/>
  50. 则输出为“value1”。
  51. 这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签“看不懂”类似“#myMap['key1']”的语句时,就要用%{}来把这括进去,“翻译”一下了。
  52. 、“$”有两种用途
  53. ()、在国际化资源文件中,引用OGNL表达式。
  54. ()、在Struts 配置文件中,引用OGNL表达式:
  55. <action name="saveUser" class="userAction" method="save">
  56. <result type="redirect">listUser.action?msg=${msg}</result>
  57. </action>
  58. <action name="saveUser" class="userAction" method="save">
  59. <result type="redirect">listUser.action?msg=${msg}</result>
  60. </action>

OGNL表达式struts2标签“%,#,$”的更多相关文章

  1. OGNL和Struts2标签

    OGNL和Struts2标签 你使用过的OGNL 页面获取并输出Action属性<s:property value="userName"/> 页面中获取request保 ...

  2. struts2中使用ognl表达式时各种符号的使用规则$,#,%

    OGNL表达式struts2标签“%,#,$” 一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一 ...

  3. struts2-OGNL表达式-OGNL与Struts2的结合

    1 OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航.OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 1.1 使用OGNL 导包 ...

  4. struts2简单入门-OGNL表达式

    什么是OGNL表达式 Object-Graph Navigation Language的缩写. 可以遍历整个对象结构图,实现对象类型转换等功能的表达式. OGNL实际上是个Map集合,有一个上下文根对 ...

  5. Struts2的OGNL表达式语言

    一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...

  6. struts2学习笔记--OGNL表达式1

    struts2标签库主要使用的是OGNL语言,类似于El表达式,但是强大得多,它是一种操作对象属性的表达式语言,OGNL有自己的优点: 能够访问对象的方法,如list.size(); 能够访问静态属性 ...

  7. struts2 OGNL表达式

    一.OGNL OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对 ...

  8. JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总

    一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出.       1,JSTL标签总结: a).JSTL标签有什么用?          JSTL是由JCP(Java Commu ...

  9. Struts2的标签库(二)——OGNL表达式

    Struts2的标签库(二) --OGNL表达式 1.Struts2中的OGNL表达式增加了ValueStack的支持. 注:ValueStack--实际上是一个容器对象,该对象在启动Struts2框 ...

随机推荐

  1. ExtJS入门教程03,form中怎能没有validation

    接上篇内容,我们在学会extjs form的基本用法之后,今天我们来看看extjs form的validation功能. 必填项,就是不能为空(allowBlank) 效果: 代码: { xtype: ...

  2. CentOS 6.4 32位系统 LAMP(Apache+MySQL+PHP)安装步骤

    先来解释一下,什么是 LAMP.正如标题所言,LAMP 实际上就是 Linux.Apache.MySQL.PHP 四个名称的缩写,当然最后一个 “P” 还有其他说法是 Perl 或者 Python.不 ...

  3. make_pair

    Utilities <utility> 由短小精干的类和函数构成,执行最一般性的工作. 这些工具包括: general types 一些重要的C函数 numeric limits Pair ...

  4. VS2010+OpenCV2.4.6永久性配置方法

    1. 配置OpenCV环境变量 计算机->(右键)属性,出现如图1所示界面 单击“高级系统设置”,选中高级(标签)出现如图2所示界面 单击右下方的“环境变量”,弹出如图3所示界面,注意这里最好用 ...

  5. Centos 5.x/6.x 配置163网易yum源

    Centos系统默认都是系统自带的yum源,国内用户用yum源安装比较慢,为了提高效率,一般我们会配置国内的yum源.国内比较好的yum源有网易yum源.搜狐yum源等. 我感觉网易的yum源比较好用 ...

  6. nginx try_files命令

    location / { index index.html index.htm index.php l.php; autoindex on; try_files $uri $uri/ /index.p ...

  7. IHttpModule在webconfig中的注册

    在asp.net中,提供了两种方式用来解决获取由asp.net服务器创建和维护的HttpApplication对象,方便注册HttpApplication对象的事件处理.这两种方式为:IHtpModu ...

  8. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  9. Java中Comparable和Comparator实现对象比较

    1.通过Comparable实现排序 package Comparable; import java.util.Arrays; public class ComparableUser implemen ...

  10. Linux下链接mysql数据库的命令

    一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) C:\>mysql -h localhost -u root -p123 二. ...