支持Struts2的OGNL表达式语言(2009-04-25 01:11:36)
<script></script> 标签:struts2 ognl it  分类:Spring+hibernate+struts

OGNL(Object Graph Navigation Language)是一种表达式语言,使用它可以使表达式与java对象中的getter和setter属性绑定,

且一个OGNL表达式可以进行存和取两方面的操作.

1).使用OGNL的好处

  • 是一种 可以把GUI元素和model object绑定的语言!且通过OGNL的TypeConverter

机制可以更容易实现值类型的的转换!

  • 可以把Web组件和后台的model 绑定(WebOGNL, Tapestry,WeboWork,WebOjbects)

2).OGNL表达式

OGNL使用集合

使用Collection中的元素须用索引,如:得到array中第一个元素表达式为array[0]

List

例子:           name in{null,"init"}       这个例子 当name属性是 空或"init"返回true ,

而在这个过程中会创建List接口的一个实例,具体的子类没有指定

本地Arrays     OGNL支持创建Java本地数组!   且允许给定存在的list或设定数组的的大小

new int[] {1,2,3}   创建一个int 数组

                               new int[5]   创建了一个int数组,它的元素的值为0

Maps    创建Map      #{"foo":"fool value","bar":"bar value"}

我们甚至可以指定一个特定的java Map Class 去创建Map

#@java.util.LinkedHashMap@{"foo":"foo value","bar":bar value"};

Java Collection各自有一些特殊的属性

Collection Special Properties
Collection(子类有Map List Set) size         集合的大小
isEmpty   如果集合为空值为true
List iterator 得到此list的迭代器
Map keys      得到一个包涵所有键值的Set
values 得到一个包括所有值的Collection
Set iterator 得到此Set的迭代器
Iterator next       得到集合中的下一个object
hasNext如果集合中有下一个object则返回true
Enumeration next 如上
hasNext如上
nextElement 和next一样的作用
hasMoreElements和hasNext一样作用

OGNL调用JavaBean 索引属性

JavaBean索引属性的格式如下

             public PropertyType[] getPropertyName()

             public void setPropertyName(propertyType[] anArray)

            public PropertyType getPropertyName(int index);

            public void setPropertyName(int index,PropertyType value)

OGNL可以很容易地通过索引存取这些属性, Example

someProperty[2]

在这个例子中OGNL会自动找到getSomeProperty(2)或存到setSomeProperty (2,value)中!

调用OGNL对象索引属性

         对象索引属性格式

           public PropertyType getPropertyName(IndexType index)

            public void setPropertyName(IndexType index,PropertyType value)

PropertyType 和IndexType 必需跟集合和get方法中的类型相配

调用方法

OGNL调用方法和Java调用方法有一点区别,因为OGNL是被解释的并且必需在运行时选择正确的方法,所以OGNL调用方法时除了提供所需要参数没有额外的类型信息,OGNL选择和提供的参数最配的方法,如果有两个或更多的方法符合匹配,它们中的一个会任意的被选择(在WebWork中会选择ValueStack上面的方法)

特别一提的是 ,null可以匹配所有非基础类型,所有它通常会导致一个不确定的方法被调用

变量的调用

OGNL有一个简单的变量配置,在这儿你可以存储中间值和重新使用这些中间值,或者仅仅命名以使表达式更易理解! 在OGNL中所有变量都是全局的,使用变量的格式是"#variable"

OGNL把当前的object在每点的表达式值存放在"this"这个变量中,而且"this"可以像其它变量一样使用!例:

                    listeners.size().(#this>100?2*this:20+#this) 如果listeners中的元素大于100会返回元素数量的两倍,否则数量加上20

          可以显式地给变量赋值,只要在变量的后边写一个表达式即可

   #var -99

一.运算符
OGNL借用了java的大多数符号,而且它还加了一些新的符号,
如下表:

符号 getValue()要注意事项 setValue()注意事项
e1,e2
         顺序运算符
e1和e2都会使用同一个源对象计算值,
且会返回e2的计算值
getValue使用e1
setValue使用e2
e1=e2
      等于运算符
getValue使用e2,setValu使用e1,且e2的结果作为目标的对象
e1?e2:e3
e1||e2,e1 or e2
e1|e2,e1 bor e2
e1^e2, e1 xor e2
e1&e2 ,e1 band e2
e1==e2,e1 eq e2
e1!=e2, e1 neq e2
e1<e2,e1 lt e2
e1<=e2 ,e1 lte e2
e1>e2 ,e1 gt e2
e1>=e2 ,e1 get e2
e1 in e2
e1 not in e2
e1<< e2,e1 shl e2
e1>>e2 ,e1 shr e2
e1>>> e2,e1 ushr e2
e1+e2
e1-e2

e1*e2
e1/e2
e1%e2

+e
-e
!e
~e
e instanceof class
e.method(args)

e.property

e1[e2]

e1.{e2}

e1.{?e2}
         选择
e1.(e2)
   子表达式的计算
e1(e2)
表达式计算

constant
        常量
(e)
        将表达式加入括号内
method(args)
       方法调用
property
       属性调用
[e]
     通过索引得到值
{ e,.....}
     创建List
#variable
     上下文中变量的引用
@class@method
(args)
     静态方法调用
@ class@field
    静态字段调用
new class(args)
构造器调用
new array-component-class[] {e,....}
数组创建
#{e1:e2,...}
     Map创建

#@classname@{e1:e2,....}
   创建指定Map子类型的Map

:[e]
   Lambda表达式

这些是最

http://blog.sina.com.cn/s/blog_5c0522dd0100cnbi.html

Struts2的OGNL表达式语言相关推荐

  1. Struts2之OGNL表达式语言

    1.OGNL是Object-Graph Navigation Language的缩写,是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构 ...

  2. Struts2中使用OGNL表达式语言访问静态方法和静态属性以及我遇到的问题和解决方法

    1.上一篇文章,我介绍了OGNL表达式语言,本来想在那篇文章上加上一个使用OGNL访问静态方法和静态属性的例子,但是昨天晚上我写代码时,报了一个警告,获取得到静态属性的值,却获取不到静态方法的返回值, ...

  3. OGNL表达式语言中的#和$的区别

    Struts2使用标准的Context来进行OGNL表达式语言求值,OGNL的顶级对象是一个Context,这个Context对象就是一个Map类型实例,其根对象就是 ValueStack,如果需要访 ...

  4. OGNL表达式语言浅谈

    OGNL(Object Graphic Navigation Language,对象图导航语言)是一种功能强大的EL(Expression Language,表达式语言,JSP2.0规范),Strut ...

  5. struts2的OGNL表达式理解(一)

    一,什么是OGNL表达式     OGNL是Object-Graph Navigation Language(对象图导航语言)的缩写,它是一种功能强大的表达式语言(Expression Languag ...

  6. Java el ognl 正则,struts2中ognl表达式 各种合集_struts2 ognl 正则表达式_struts2 ognl表达式...

    摘要 0x00 前言 它们是对结构说明236的引用(因为字段256中的代码和在字段240中的代码相同)和对数据结构222的开始的引用,字段258包含该开始地址.三.data uri schema将文件 ...

  7. Struts2:OGNL表达式

    OGNL表达式 OGNL(Object-Graph Navigation Language)的全称是对象图导航语言,是一个用来获取和设置java对象属性的表达式语言的开源表达式语言,通过使用表达式语法 ...

  8. 深入分析JavaWeb Item48 -- Struts2中OGNL表达式与ValueStack

    一.OGNL表达式 1.OGNL表达式介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作 ...

  9. JSTL/EL表达式/Struts2标签/OGNL表达式

    文章目录 JSTL + EL表达式 Struts 标签 + OGNL表达式 JSTL + EL表达式 JSTL 只能用在 JSP 文件中,不可以在 XML 和 HTML 文件中使用,不可以用在 JS ...

最新文章

  1. 匹配算法:局部结构保留
  2. mysql 001_Mysql错误积累001
  3. FZU 2082 过路费
  4. 域名服务器(DNS)工作原理
  5. 【连载】如何掌握openGauss数据库核心技术?秘诀四:拿捏事务机制(3)
  6. Linux 设置定时任务 清空日志
  7. 从spring管理的datasource中获取connection
  8. HDP SandBox 安装与初步配置
  9. 推荐系统之协同过滤(CF)算法详解和实现
  10. 自由手写体字帖pdf_20款漂亮的手写字体,可供下载
  11. Powerbuilder webform,webservices 倍力文档在线查看
  12. Social Network Visualizer社交网络可视化,导入txt数据集
  13. 佳能微单R6断电DAT文件MP4视频完美修复不卡顿
  14. 爱上调试:div初探,参照物的重要性!
  15. wireshark出现rst的原因_多次RST以及不同场景下的RST报文的差异
  16. dabo(达泊西汀)
  17. 有关于成长的七个关键词
  18. css3实现3d效果的立方体动画
  19. 计算机键盘无法使用的原因,电脑键盘失灵的原因及其解决方法
  20. java博客论坛设计报告,javaweb课程设计报告-个人博客网站的实现(Java).doc

热门文章

  1. edge浏览器ie模式设置方法介绍
  2. 【自学编程】自己写小例子的经验
  3. 阿里格灵深瞳计算机视觉岗实习面经
  4. 一元夺宝--夺宝模块 开发笔记(一)
  5. database changed是什么意思_itunes其他是什么 itunes其他清除方法介绍【图文教程】...
  6. C语言——十进制转换为二进制
  7. 二二、方程Ax=b的行空间中的解
  8. 会声会影2022视频编辑软件专业版
  9. 吉林教育杂志吉林教育杂志社吉林教育编辑部2022年第28期目录
  10. (翻译)黑底白字样式的使用时机