Jsp 使用变量作为键访问EL中的映射值

Jsp 使用变量作为键访问EL中的映射值,jsp,el,Jsp,El,我在EL中有一个Map作为${Map},我试图使用一个键来获取它的值,这个键本身也是一个EL变量${key},值为“1000” 使用${map[“1000”]}有效,但${map[“$key”]}无效。我做错了什么?如何使用变量作为键获取映射值?我认为您应该访问映射,如下所示: ${map.key} 并查看一些关于jstl的教程,如和(有点过时,但仍具有功能)$不是变量名的开始,它指示表达式的开始。您应该使用${map[key]}访问mapmap中的属性key 您可以在带有GET参数的页面上尝

我在EL中有一个
Map
作为
${Map}
,我试图使用一个键来获取它的值,这个键本身也是一个EL变量
${key}
,值为
“1000”


使用
${map[“1000”]}
有效,但
${map[“$key”]}
无效。我做错了什么?如何使用变量作为键获取映射值?

我认为您应该访问映射,如下所示:

${map.key}

并查看一些关于jstl的教程,如和(有点过时,但仍具有功能)

$
不是变量名的开始,它指示表达式的开始。您应该使用
${map[key]}
访问map
map
中的属性
key

您可以在带有
GET
参数的页面上尝试它,例如使用以下查询字符串
?whatEver=something

<c:set var="myParam" value="whatEver"/>
whatEver: <c:out value="${param[myParam]}"/>

请参阅:并滚动到“大括号表示法”部分。

您可以将键值放在
Java
侧的映射中,并使用
JSP
页面上的
JSTL
访问相同的键值,如下所示:

先前的java 1.7:

Map<String, String> map = new HashMap<String, String>();
map.put("key","value");
Map<String, String> map = new HashMap<>();
map.put("key","value");
<c:out value="${map['key']}"/>
Map Map=newhashmap();
地图放置(“键”、“值”);
Java1.7及以上版本:

Map<String, String> map = new HashMap<String, String>();
map.put("key","value");
Map<String, String> map = new HashMap<>();
map.put("key","value");
<c:out value="${map['key']}"/>
Map Map=newhashmap();
地图放置(“键”、“值”);
JSP代码片段:

Map<String, String> map = new HashMap<String, String>();
map.put("key","value");
Map<String, String> map = new HashMap<>();
map.put("key","value");
<c:out value="${map['key']}"/>

我以前遇到过这个问题。这通常在键不是字符串时发生。解决方法是在使用键从映射中获取值之前将键强制转换为字符串

大概是这样的:

${somekeythaisnotstring}


希望这能帮到我的五分钱。现在我正在使用EL 3.0(雅加达impl),我可以通过三种方式访问地图值:

 1. ${map.someKey}
 2. ${map['someKey']}
 3. ${map[someVar]} //if someVar == 'someKey'

不是${map.$key},只是${map.key}$不是变量名的开头,它表示表达式的开头。它不起作用,因为
someKey
实际上不是像
行那样的变量。这个问题询问如何使用变量作为映射键,而您的答案没有回答。Jasper已经回答了这个问题(参见当前投票最多的答案)。您的回答暗示了EL3.0中的语法不同。但事实并非如此。它仍然与EL 1.0中的完全相同。看看贾斯珀的回答。@BalusC很遗憾,我不能同意你的看法。我的回答并不是说EL3.0中的语法不同,而是说在v中。3.0有三种方式(可以有1、2、4、5等版本),为了方便起见,我列出了它们。还有其他的答案,我知道,我见过。这就是我对这个问题的看法。在我的例子中,值不是一个字符串,而是一个包含字符串字段(如city、street和pincode)的Address对象。如何显示地址的城市字段?