日期:2014-05-16 浏览次数:20666 次
37 EL表达式2
EL表达式以点为中心,左边的变量是一个映射或是一个bean。映射是一个Map是有键的,是可以根据该键找到对应值,如果不是Map键必然也是一个bean。那么点号右边则必须是一个映射键或一个bean性质。点号右边的命名规范是符合JAVA标准的。上一章节提到了,如果运用中括号,左边的变量可以使Map,bean,List,还可以是数组。如果中括号里是一个String直接值,这可以是个Map键或是一个bean性质,还可以是List或数组中的索引。在数组和List中String索引会强制转换成int,如果在括号里没有双引号,容器会计算中括号的内容,搜索与该名字绑定的属性并替换这个属性的值。通常我们会在Servlet中使用MAP进行put的操作,保存相应的键和值,在JSP运用EL表达式就可以实现了。
EL式中也有些隐式对象,这些隐式对象和JSP对象不同。除了pageContext是一个隐式对象,其它都是简单的Map对象。简单的归纳一下:作用域属性Map的有pageScope,requestScope,sessionScope,applicationScope。请求参数的Map为param和paramValues。请求首部的Map为header和headerValues。上下文初始化参数initParam,Cookie对象等。我们在用EL表达式做传参取参时一定知道脚本区参传参对应的EL的隐式对象。有些方法看上去一样,其实根本不是一回事。像http中有个getMethod()方法,如果用EL表达式却需要调用隐式对象的pageContext的Request.method方法。该方法是请求性质而不是请求属性的,获得请求性质则需要通过pageContext。
EL是有函数的,这些函数的似乎由TLD提供的。TLD就是标记库描述文件。EL使用的名字不必和具体方法名相同,TLD提供了相应的映射。引用TLD,我们需要在JSP中加行taglib指令.我们只需按${prefix:name()}的形式从表达式调用就可以了。在部署有静态函数我们需要在标记库描述文件中使用元素声明函数定义uri,定义好相应的类方法。在jsp中必须使用taglib指令声明一个命名空间,定义好prefix和uri和部署文件一致即可。EL是能够处理NULL,即使找不到表达式中的属性和键,它也会显示界面,因为它能处理unknown或null值的。