我在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。
发布于 2012-04-06 00:55:39
结果却是个表面上的回答。我更改了变量名,以混淆代码的用途,当它实际上掩盖了问题时,我认为它会使事情变得更容易理解。
原始代码:
<c:forEach items="${someobject.items}" var="interface">
...
${ myMap[interface][someString2] != null }
...
</c:forEach>注意,forEach循环的变量名-- interface当然是一个保留的interface关键字,但是堆栈跟踪并没有很好地吸引人们对此的注意。
将变量名更改为interfaze或其他任何内容都解决了问题。
https://stackoverflow.com/questions/10036982
复制相似问题