0

Map在 Java 中有一个包含另一个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 的机器上却失败了。

编辑:在这两种情况下,webapp 都使用 JSTL-1.2。

4

1 回答 1

0

原来是一个facepalm的答案。我更改了变量名称以混淆代码的用途,认为这会使事情更容易理解,而实际上它掩盖了问题。

原代码:

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

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

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

于 2012-04-06T00:55:39.390 回答