jsp el中点运算符和括号之间的区别

时间:2013-09-09 08:25:49

标签: java jsp jstl el

我有这样的课程:

public class MyClass{
   String name;
   Map map;
   int [] arrInt;
//get  set
}

我创建了对象:

MyClass  mc = new MyClass  ();

在jsp中我可以编写代码:

${mc.name}

相同
${mc["name"]}

点运算符和括号运算符之间是否存在差异?

3 个答案:

答案 0 :(得分:4)

它们具有完全相同的含义。点样式通常更容易阅读。如果索引将由表达式给出(例如mc[name]而不是mc["name"]),则需要括号样式。

答案 1 :(得分:2)

${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]]]

答案 2 :(得分:0)

您当前的情况还可以,但是当您处理群组时,[ ]表示法确实有帮助。

JSTL overview

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']}"/>