4.1.3 EL表达式取值规则
4.1.3 EL表达式取值规则
EL表达式的取值是从左到右进行的。对于expression-a[expression-b]这种形式的表达式,其意思是根据expression-b从expression-a中取出数据,具体来说EL表达式的取值规则如下:
- 先计算
expression-a得到value-a。 - 如果
value-a为null,从null里面是无法取出什么值,所以直接返回null。 - 如果
value-a不为null,则继续计算expression-b得到value-b。 - 如果
value-b为null,value-a中取出null,这也是不对的,所以直接返回null。 - 如果
value-a为java.util.Map,则表达式的意思是,从value-a这个Map集合中取出key为value-b的值.那么检查value-b是否为Map中的一个key。- 如果是
key,则根据key从Map中取出一个值,也就是返回value-a.get(value-b)的结果。 - 如果不是
key,那自然取不到对应的值,将返回null。
- 如果是
- 如果
value-a为java.util.List,则这个的表达式的意思是从value-a这个List集合中取出下标为value-b的值。- 下标都是int类型的,所以首先把
value-b强制转换为int类型,如果强制转换失败,则抛出异常。 - 如果强制类型转换为
int类型成功,但是value-a.get(value-b)抛出IndexOutOfBoundsException异常,则返回null。 - 如果强制转换为
int类型成功,并且不抛出IndexOutOfBoundsException异常,返回value-a.get(value-b)的结果,也就是返回value-a这个List集合中下标为value-b的值.
- 下标都是int类型的,所以首先把
- 如果
value-a是一个Array,那么表达式的意思是:从value-a这个Array集合中取出下标为value-b的数据,则要进行以下处理:- 首先把
value-b强制转换为int类型,如果强制转换失败,则抛出异常。 - 假如
Array.get(value-a, value-b)抛出ArrayIndexOutOfBoundsException,则返回null。 - 以上没问题的话则返回
Array.get(value-a, value-b)的值.也就是返回value-a这个Array集合中下标为value-b的数据
- 首先把
- 如果
value-a不是一个Map、List或者array,那么,value-a必须是一个JavaBean。,此时表达式的意思是:从value-a对象中取出属性名称为value-b的属性的属性值- 首先强制转换
value-b为String类。如果value-b是value-a对象的一个可读属性,则要调用该属性的getter方法从value-a对象中取出属性值。 - 如果
getter方法抛出异常,该表达式就是无效的, - 否则,该表达式有效。
- 首先强制转换