From Gossip@caterpillar

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再進行索引存取。