【问题标题】:Cannot access Map inside a Map using JSTL无法使用 JSTL 访问 Map 内的 Map
【发布时间】:2012-04-05 22:37:35
【问题描述】:

我在 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 的机器上却失败了。

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

【问题讨论】:

    标签: jsp tomcat jstl


    【解决方案1】:

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

    原代码:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      相关资源
      最近更新 更多