无法使用JSTL访问Map内的Map

时间:2012-04-05 22:37:35

标签: jsp tomcat jstl

我在Java中有Map,其中包含另一个Map,如下所示:

Map<String, Map<String, Object>> myMap = ...

我知道这不是一种传递数据的理想方式,但是为了测试它比充实只用于将数据推送到JSTL的类更容易。

话虽如此,我们无法在第二级Map中获取值:

${ myMap[someString1][someString2] != null }

加载页面时会导致编译错误:

org.apache.jasper.JasperException: /mypage.jsp (line: 142, column: 9) "${ myMap[someString1][someString2] != null }" contains invalid expression(s): javax.el.ELException: Failed to parse the expression [${ myMap[someString1][someString2] != null }]
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)

奇怪,它在运行Tomcat 6.0.29的计算机上运行正常,在运行7.0.26的计算机上运行失败。

编辑:在两种情况下,网络应用都使用JSTL-1.2。

1 个答案:

答案 0 :(得分:0)

原来是一个facepalm答案。我更改了变量名称以模糊代码的目的,认为它会使事情更容易理解,当它实际掩盖了问题时。

原始代码:

<c:forEach items="${someobject.items}" var="interface">
    ...
    ${ myMap[interface][someString2] != null }
    ...
</c:forEach>

请注意forEach循环的变量名称 - interface当然是一个保留的Java关键字,但堆栈跟踪并没有很好地引起人们对此的注意。

将变量名称更改为interfaze或其他任何内容可以解决问题。