ITEEDU

JSP/Servlet:[] 或 . 的选择

在EL中,您可以使用 . 运算子来取得JavaBean属性或Map对象中的值,例如若student是个JavaBean,其上有一个name属性,则您可以这么取得该属性的值:

${ student.name }

而事实上,您也可以使用[]运算子来取得值,例如:

${ student["name"] }

在EL中,假设table是一个Map对象,则您可以使用 . 运算子并在之后接上键值来取得Map中对应的值,例如以title为键值来取得对应的值:

${ table.title }

而使用[]运算子也是可以的,例如:

${ table["title"] }

所以归纳来说,使用 . 运算子时,左边要是个JavaBean或Map对象,而右边必须是JavaBean的属性或是Map的键值。

而使用[]运算子时,除了左边要是个JavaBean或Map对象,而右边必须是JavaBean的属性或是Map的键值之外,还有更进一步的功能,左边也可以是java.util.List对象或数组,而右边还可以是索引值。

举个例子来说,如果有个数组储存于request之中:

String[] names = {"Justin", "caterpillar", "momor", "Becky"};
request.setAttribute("nameList", names);

您可以在使用EL时,如下使用[]来取得数组中的值,例如取得索引1位置的值:

${ nameList[1] }

上例会显示"caterpillar"的字符串,更进一步的,EL还会将字符串索引值转换为int型态,例如:

${ nameList["2"] }

上例会显示"momor"的字符串结果。

总结来说,. 与 [] 运算子可以处理JavaBean及Map对象,而[]运算子给您更多的功能,可以处理java.util.List或数组,如果[]中使用""包括一个数值,则EL会尝试将之转换为int再进行索引存取。