我有这样的课:
public class MyClass{
String name;
Map map;
int [] arrInt;
//get set
}
我创建对象:
MyClass mc = new MyClass ();
在jsp中我可以写这样的代码:
${mc.name}
和它一样
${mc["name"]}
点运算符和括号运算符之间存在差异吗?
它们具有完全相同的含义。点样式通常更容易阅读。如果索引将由表达式给出(例如mc[name]
,而不是mc["name"]
),则需要括号样式。
${person.age}
看起来比第二个语句更简单,${person["age"]}
但第二个语句有一些优点。
使用点运算符时,左边的东西只能是 Map 或 Bean,右边的东西必须遵循 java 编码 标准(如命名)。但是用 [ ],左边的东西也可以是
List or an Array
。这意味着thing on the right
可以是 不符合 Java 命名规则的数字或标识符。
例如: 1.您可以使用
${ mapObject["com.electron.name"] }
但不是
${ mapObject.com.electron.name }
2.你也可以使用嵌套表达式[ ]
,比如
array[array2[array3[0]]]
您当前的情况还可以,但是 [ ]
当您与组打交道时,符号确实很有帮助。
Accessing Objects
JSTL 表达式语言提供了一种简单的机制来访问对象及其属性。点 (.) 运算符用于遍历对象层次结构和访问属性。以下片段说明了点运算符用法的基本示例:
<c:out value="${customer.address.city}"/>
在此示例中,点运算符用于访问客户对象的地址属性,然后是地址对象的城市属性。表达式中点运算符的每个实例都计算为对运算符左侧属性的 getter 方法调用。因此,第一个点将调用客户对象的 getAddress() 方法。然后第二个点将对从 getAddress() 调用返回的对象调用 getCity() 方法。为了使点运算符起作用,运算符右侧的对象必须具有运算符左侧属性的 getter 方法。否则,操作员将失败。如您所见,这种遍历对象层次结构的方法既快速又简单。如果没有 JSTL,您必须使用类似于以下的 JSP 表达式来访问层次结构中的属性:
<%= customer.getAddress().getCity() %>
点运算符非常适合访问简单的属性;但是,它不允许您访问数组或集合的元素。为此,JSTL 有方括号 ([ ]) 运算符。方括号运算符允许您指定要访问的元素的索引,如下所示:
<c:set var="highBid" value="${bids[0]}"/>
这种方法适用于数组和基于列表的集合。对于基于地图的集合,您可以指定要访问的元素的键,如下所示:
<c:set var="color" value="${param['color']}"/>