内容关键词:EL表达式,JSP页面
授课老师:720科技张森鹏
一、知识笔记
EL 表达式以 ${ 开头,并以 } 结束。EL 表达式的结构如下:
${expression}
#{expression}
在 JSF 中,${exp}
结构用于立即计算,#{expr}结构用于延迟计算(即表达式直到系统需要它的值时,才进行计
算)。
另一方面,立即计算的表达式,会在 JSP 页面编译时同时编译,并在执行 JSP 页面时被执
行。在 JSP 2.1 和更高版本中,#{exp}表达式只能在接受延迟表达式的标签属性中使用。
变成该属性需要的类型:
<my:tag someAttribute="${expression}"/>
像${这样的字符顺序就表示是一个 EL 表达式的开头。如果需要的只是文本${,则需要在
它前面加一个转义符,如\${。
以下是关键字,它们不能用作标识符and eq gt true instanceofor ne le false empty
not lt ge null div mod
EL 表达式可以返回任意类型的值。如果 EL 表达式的结果是一个带有属性的对象,则可以利
用[ ]或者.运算符来访问该属性。[ ]和.运算符类似;[ ]是比较规范的形式,.运算符则比较快捷。
多数情况下建议使用[ ]运算符,因为对于一些不合法的java变量名,使用 .运算符去访问它,将会导致异常。
EL 表达式的取值是从左到右进行的。对于 expr-a[expr-b]形式的表达式,其 EL 表达式的取值方法如下:
(1)先计算 expr-a 得到 value-a。
(2)如果 value-a 为 null,则返回 null。
(3)然后计算 expr-b 得到 value-b。
(4)如果 value-b 为 null,则返回 null
(5)如果 value-a 为 java.util.Map,则会查看 value-b 是否为 Map 中的一个 key。若是,则
返回 value-a.get(value-b),若不是,则返回 null。
(6)如果 value-a 为 java.util.List,或者假如它是一个 array,则要进行以下处理:
a.强制 value-b 为 int,如果强制失败,则抛出异常。
b.如果 value-a.get(value-b)抛出 IndexOutOfBoundsException,或者假如 Array.get
(value-a, value-b)抛出 ArrayIndexOutOfBoundsException,则返回 null。
c.否则,若 value-a 是个 List,则返回 value-a.get(value-b);若 value-a 是个 array,
则返回 Array.get(value-a, value-b)。
(7)如果 value-a 不是一个 Map、List 或者 array,那么,value-a 必须是一个 JavaBean。
在这种情况下,必须强制 value-b 为 String。如果 value-b 是 value-a 的一个可读属性,则要调
用该属性的 getter 方法,从中返回值。如果 getter 方法抛出异常,该表达式就是无效的,否则,
该表达式有效。