当我阅读Spring PetClinic示例应用程序时,我发现他们总是将 add 和 modify 功能放入单个JSP文件中,并使用{{1用于自定义当前页面上的元素的表达式,例如标签的“新所有者”或“所有者”。
JSP(Spring)环境中是否有${owner['new']}
运算符的其他用法?
Controller文件包含以下代码段:
[]
JSP文件包含以下代码段:
@RequestMapping(value = "/owners/new", method = RequestMethod.GET)
public String initCreationForm(Map<String, Object> model) {
Owner owner = new Owner();
model.put("owner", owner);
return "owners/createOrUpdateOwnerForm";
}
@RequestMapping(value = "/owners/{ownerId}/edit", method = RequestMethod.GET)
public String initUpdateOwnerForm(@PathVariable("ownerId") int ownerId, Model model) {
Owner owner = this.clinicService.findOwnerById(ownerId);
model.addAttribute(owner);
return "owners/createOrUpdateOwnerForm";
}
答案 0 :(得分:4)
[]
将允许您:
${car['type']}
如果car.getType();
字段为car.isType()
,则相当于type
(或boolean
。
Map
:${carMap['Volvo']}
当carMap.get('Volvo');
为carMap
时,这相当于Map
。
array
或List
:${cars[1]}
如果cars[1]
是cars
或等同于array
,如果cars.get(1)
是cars
,则相当于List
。
更多详情/来源:http://docs.oracle.com/javaee/6/tutorial/doc/bnahu.html
修改强>
您的问题的表达式(${owner['new']}
)属于第一种情况。在petclinick应用程序中,Owner
类是Person
的子类,它是BaseEntity
的子类。 BaseEntity
有isNew()
方法(因此Owner
也有方法)。
这样,代码段${owner['new']}
相当于owner.isNew()
。
答案 1 :(得分:0)
考虑以下代码
bikesMap.put("honda","cbr250r");
bikesMap.put("yamaha","yzfr15");
request.setAttribute("bikesMap",bikesMap);
request.setAttribute("company","honda");
因此,如果我们编写${bikesMap["company"]
,那么它将不会评估为"cbr250r"
,因为我们在[]
中提供的是字符串文字,因此容器会尝试查找密钥{{1}哪个不存在。但是如果我们写"company"
,那么这个EL将会变成${bikesMap[company]}
。
"cbr250r"
将评估为${bikesMap[compapny]}
,因为有一个名为"cbr250r"
的请求属性,company
的值company
是"honda"
的关键字bikesMap
1}}。
${bikesMap["company"]}
不会评估为"cbr250r"
,因为没有名为"company"
的密钥。
[]
运算符优于点运算符的一个优点是它可以有效地访问列表和数组。您可以写${bikesList["1"]}
,但不能写${bikesList.1}
。
希望这有帮助