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
方法抛出异常,该表达式就是无效的, - 否则,该表达式有效。
- 首先强制转换