1.语法:
EL表达式是以 ${ 开头,以 } 结束的的.例如 : ${expression}。常用来连接两个表达式,对于一系列的表达式,取值将从左到右,结果的类型为String并且连接在一起,如:a+b=8,c+d=10,${a+b}${c+d}输出的结果是810;
若在定制标签的属性值中使用EL表达式,该表达式的值结果将强制转为该属性需要的类型,如下:
PS:只要是 ${ 则表示一个EL表达式,如果只是作为一般的字符串,就在文本前加转义字符,如:/${
2.关键字,不能用来作标识符
and eq gt true instanceof or ne le false empty not lt ge null div mod
3.[ ] 和 . 运算符
EL可以返回任意类型的值,若EL表达式的结果带属性的对象,可以用 [ ] 或 . 来访问属性,如下:
${object["id"]} 或 ${object.id} 属性为对象,可以再加一个 ${object.object1.id}
访问JavaBean,利用[ ]和. 可以访问bean的属性 ${bean.id} 或 ${bean["id"]}
4.取值规则
EL的表达式的取值是从左到右的,对于expr-a[expr-b]
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,若不是则返回null
6)若value-a为java.util.List或者是一个array则:
a:强制value-b为int,若强制失败,则抛出异常
b:如果value-a.get(value-b)抛出IndexOutOfBounds 或 Array.get(value-a,value-b)抛出ArrayIndexOutOfBound则返回null
c:否则,若value-a为List,则返回value-a.get(value-b) ,若value-b 为Array,则返回Array.get(value-a,value-b)
7) 若不是Map,List,Array,则value-a必定为JavaBean,则value-b必须强制为String. ( 若value-b是value-a的可读属性,则调用getter,若getter异常,则表达式无效,否则该表达式有效)