欢迎来到天天文库
浏览记录
ID:52883755
大小:615.37 KB
页数:64页
时间:2020-03-31
《《对象图形导航语言》PPT课件.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章对象图形导航语言(OGNL)本章目标:OGNL表达式。-什么是OGNL表达式。OGNL表达式,其实是一串特殊的字符串,通过这一串字符串可以快速的操作Java代码,甚至是不允许操作Java代码的地方,如JSP页面。ValueStack中的Context和root。Struts2是如何通过ValueStack来操作OGNL的。Struts2经常使用的几个标签包:如果只在Java代码中做测试,则只导入ognl.jar即可。数据传输背后机制:ValueStack(值栈)要了解ValueStack,必须先理解OGNL(ObjectGraphicNavigationLanguage)。O
2、GNL是Struts2中使用的一种表达式语言它可以用于JSP的标签中,以便能够方便的访问各种对象的属性;它用于界面将参数传递到Action(并进行类型转换)中;它还可以用于struts2的配置文件中!所以,非常有必要理解OGNL的基本机制。Root对象OGNL称为对象图导航语言。所谓对象图,即以任意一个对象为root根,通过OGNL表达式可以访问与这个对象关联的其它对象。OGNL的目的:OGNL目的,是为了获取某个对象的值或设置某个对象的值或调用某个对象的方法!OGNL表达式语言的真正目的,是为了在那些不能写JAVA代码的地方执行JAVA代码,或者是为了更方便地执行JAVA代码。O
3、gnl.getValue()方法的第一个参数,就是一条OGNL表达式,第二个参数是指定在表达式中需要用到的root对象!OGNLOGNL必须拥有一个根root和一个OGNL表达式。可选拥有一个Map类型的Context。OGNLOGNL表达式Context可选newObject()根必须OGNL表达式支持以下操作符:#、@、{}、‘’(单引号)等。#符的作用:访问根对象的属性或是方法不需要使用#,但如果非使用#来访问根对象的信息则必须使用#root,即与root关键字共同使用。如果是调用非根对象的方法或属性必须要使用#符。Context对象在OGNL的表达式中,有可能需要访问到多个
4、毫不相干的对象,这时候,我们需要给OGNL传递一个Map类型的对象,把表达式中需要用到的对象放到Map中即可!这个Map对象,称为context。要在表达式中访问到context中的对象,需要使用“#对象名称”的语法规则。所谓context其实就是一个Map类型的对象。主要是因为在OGNL中,不支持多个root对象,那么如果需要在表达式中访问更多毫不相干的对象时,只能通过一个Map来把这些对象统一传递给OGNL。只有Context没有根对象的示例:第一个参数为OGNL表达式。第二个参数为Map类型的Context对象。第三个参数为根对象,此根对象为一个空的对象。但必须要传。同时给O
5、GNL传递Context和root对象:注意是如何获取第三个对象中的值的:OGNL可以进行赋值操作:仅供了解:第一个参数为ONGL表达式。第二个参数为root对象。第三个参数为设置的值。下图第一个参数为:OGNL表达式,第二个参数为根对象,第三个参数为值。下图第一个参数为:OGNL表达式,第二个参数为Context对象,第三个参数为root对象。第四个参数为值。利用OGNL表达式调用对象的方法:以下代码通过两种方式调用,第一种方式调用的是非根对象的方法,第二种调用的是根对象的方法。@符的作用:在OGNL中,@符用来调用静态属性或是方法。当然必须是公共的。使用@符默认调用的是Math
6、中的静态方法,所以在第一种方法对Math类省略了。第二种是书写完整的代码。利用OGNL创建List和Map集合:以下创建List,第一个参数为OGNL表达式,第二个参数为root.以下创建Map,第一个参数为OGNL表达式,第二个参数为root.,注意#符的使用。小结:通过上面的实现我们清楚的知道了两个问题:1:OGNL就是用来操作属性和方法的。2:OGNL操作的对像可以有两个一个是根root对象,它只能有一个。一个是Map的Context对象,它可以有多个。通过key,value来保存信息。那么Struts2的又是如何使用OGNL的呢?理解ValueStack的基本机制!对各种现
7、象作出解释ValueStack实际上就是对OGNL的封装,OGNL主要的功能就是赋值与取值,Struts2正是通过ValueStack来进行赋值与取值的!ValueStack是一个接口,而OgnlValueStack是strtus2中的缺省实现。ValueStack中的数据,分两个部分存放:root和context(这与OGNL中的概念一致)。在ValueStack中有两个方法:-见OgnlValueStack的源代码getContext()–返回非根对象,即一个Ma
此文档下载收益归作者所有