El表达式经典.doc_第1页
El表达式经典.doc_第2页
El表达式经典.doc_第3页
El表达式经典.doc_第4页
El表达式经典.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Dogs name is:$ 就这么简单!我们甚至没有声明person是什么意思它自己已经知道。用这个代码:$替代以下代码:JSP表达式(EL)解析表达式语言的语法相当简单,变化也不太大。难的是,有些EL看上去很像Java,但表现却不同。所以你可能会发现,有些在Java中能用的倒了EL中却不行,反之亦然。所以不要想着把Java语言/语法规则硬往EL上套,明确这一点就行了。可以把EL想成是不使用Java来访问Java对象的一种方法。EL表达式总是放在大括号里,而且前面有一个美元符前缀$表达式中第一个命名变量可以是一个隐式对象,也可以是一个属性。$firstThing.secondThing如果EL表达式中第一项是一个属性,可以是存储在任意一个可用作用域中的属性。EL隐式对象 或 属性pageScoperequestScopesessionScopeapplicationScopeparam所有这些都是映射对象paramValuesheaderheaderValuescookieinitParam注意:EL隐式对象与JSP脚本中可用的隐式对象不同,只有pageContext除外pageContext页面作用域中的属性请求作用域中的属性会话作用域中的属性应用作用域中的属性在所有隐式对象中,只有pageContext不是映射。这是pageContext对象的实际引用!(pageContext是一个Java Bean)使用点号(.)操作符访问性质和映射值第一个变量可以是一个隐式对象,也可以是一个属性,点号右边可以是一个映射键(如果第一个变量)是映射,也可以是一个bean性质(如果第一个变量是Java Bean属性)。1. 如果表达式中变量后面有一个点号,左边的变量必须是一个映射或一个bean。点号左边的的变量要么是一个Map(有键),要么是一个bean(有性质)。不论变量是一个隐式对象还是一个属性,都是如此。pageContext隐式对象是一个bean,它有获取方法,所有其他隐式对象都是Map。$beanjava.util.map2. 点号右边必须是一个映射键或一个bean性质。$getName()setName()java.util.map(“name” , “Evan”)3. 点号右边必须遵循Java有关标识符的命名规则。? 必须以字母,_或$开头。? 第一个字母后面可以有数字。? 不能是Java关键字。 就像是更好的点号只有当点号右边是左边的一个bean性质或映射键时,点号操作符才能工作。仅此而已,但操作符就强大多了,而且更加灵活以下代码:$person“name”与下面的代码等价:$简单的点号操作符之所以能工作,是因为person是一个bean,而且name是person的一个性质。但如果person是一个数组呢?或者如果person是一个List呢?再或者,name不遵循正常的Java命名规则怎么办? 让你有更多选择使用点号操作符时,左边只能是一个Map或一个bean,右边必须遵循 Java关于标识符的命名规则。但是使用时,左边可以是一个List或数组(可以是任何类型的数组)。这也说明,右边可以是一个数,或者可以解析为一个数,也可以是不遵循Java命名规则的标识符。例如,Map键可以是一个包含点号的String(“com.foo.trouble”)。1. 如果表达式中变量后有一个中括号,左边的变量则有更多选择,可以是Map、bean、List或数组。$musicList“something”数组java.util.Mapbeanjava.util.List2. 如果中括号里有一个String直接量(即用引号引起的串),这可以是一个Map键,或是一个bean性质,还可以是List或数组中的索引。$musicList“something”数组1:“Zero 7”,2:”BT”java.util.Map(“surf”,”tahirt 80”)getSongList()setSongList()java.util.List(1:“Zero 7”,2:”BT”)数组和List中的String索引会强制转换为int访问数组的EL与访问List的EL是一样的。大家要记住,这不是Java。在EL中,操作符并不是数组的访问操作符。不是这样的,它只是叫做操作符。如果实在要给它一个名字,就应该是“数组/List/Map/bean性质访问操作符如果中括号左边是一个数组或List,而且索引是一个String直接量,那么这个索引会强制转换为int。下面这样不行:$favoriteFood“one”因为”one”不能转换为一个int。如果索引无法强制转换,你就会得到一个错误。如果不是String直接量,就会计算如果中括号里没有引号,容器就会计算中括号中的内容,搜索与该名字绑定的属性,并替换为这个属性的值(如果有一个同名的隐式对象,则始终使用隐式对象)。Music is: $musicMapAmbient查找一个名为“Ambient”的属性。使用这个属性的值作为Map的键,或者返回null。Servlet中:java.util.Map muicMap = new java.util.HashMap();muicMap.put(“Ambient”,”Zero 7”);muicMap.put(“Surf”,”Tahiti 80”);muicMap.put(“DJ”,”BT”);muicMap.put(“Indie”,”Frou Frou”);request.setAttribute(“musicMap”,musicMap);request.setAttribute(“Genre”,” Ambient”);在JSP中这是可以的:Music is: $musicMapGenre 计算为 Music is: $musicMap” Ambient”由于有一个名为” Genre”的请求属性,它的值为” Ambient”,而且” Ambient”是musicMap的一个键。在JSP中,下面这样是不行的:Music is: $musicMap“Genre” 不变 Music is: $musicMap“Genre”因为musicMap中没有名为“Genre”的键。由于加了引号,容器不会进行计算,而只认为只是一个直接量键名。在中括号里可以使用嵌套表达式El中都是表达式。可以任意做嵌套表达式,深度不限。换句话说,可以把一个复杂的表达式放在另一个表达式中,而后者可以再放在一个表达式中(如此继续)。表达式会从最内层中括号开始计算。这一部分对你来说相当直观,因为这与小括号里嵌套Java代码没有什么不同。麻烦的是,要当心加不加引号。Servlet中:java.util.Map muicMap = new java.util.HashMap();muicMap.put(“Ambient”,”Zero 7”);muicMap.put(“Surf”,”Tahiti 80”);muicMap.put(“DJ”,”BT”);muicMap.put(“Indie”,”Frou Frou”);request.setAttribute(“musicMap”,musicMap);String mu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论