3

当我阅读Spring PetClinic示例应用程序时,我发现他们总是将添加修改功能放入单个 JSP 文件中,并且他们使用${owner['new']}表达式来自定义当前页面上的元素,例如标签的所有者”“所有者”

[]在 JSP (Spring) 环境中还有其他操作符的用法吗?

控制器文件有以下片段:

@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";
}

JSP 文件具有以下片段:

<h2>
    <c:if test="${owner['new']}">New </c:if> Owner
</h2>
4

2 回答 2

4

[]将允许您:

获取一个属性,如果对象是一个 bean(有 getter 和 setter):

${car['type']}

这将等效于car.getType();(或者car.isType()如果该type字段是 a boolean)。

如果对象是 a ,则获取键的值Map

${carMap['Volvo']}

这将等同于carMap.get('Volvo');when carMapis a Map

array如果对象是or ,则获取索引List

${cars[1]}

这等价于cars[1]if carsis aarray或等价于cars.get(1)if carsis a List

更多细节/来源:http ://docs.oracle.com/javaee/6/tutorial/doc/bnahu.html


编辑:

您问题的表达式 ( ${owner['new']}) 属于第一种情况。在 petclinick 应用程序中,Owner该类是一个子类,Person它是BaseEntity. 并且BaseEntity有一个方法isNew()Owner也有那个方法)。

这样,代码片段${owner['new']}就相当于owner.isNew().

于 2013-06-15T03:27:23.157 回答
0

考虑以下代码

bikesMap.put("honda","cbr250r");
bikesMap.put("yamaha","yzfr15");

request.setAttribute("bikesMap",bikesMap);
request.setAttribute("company","honda");

所以如果我们写${bikesMap["company"],那么它不会被评估,"cbr250r"因为我们提供的[]是一个字符串文字,所以容器会尝试找到一个"company"不存在的键。但是如果我们写${bikesMap[company]},那么这个 EL 将评估为"cbr250r".

${bikesMap[compapny]}将评估为,"cbr250r"因为有一个名为的请求属性,并且iecompany的值是.company"honda"bikesMap

${bikesMap["company"]}不会评估到,"cbr250r"因为没有名为 的键"company"

运算符优于点运算符的一个优点[]是它可以有效地访问列表和数组。你可以写${bikesList["1"]},但你不能写${bikesList.1}

希望这可以帮助

于 2013-06-15T16:37:46.157 回答