2012-04-05 33 views
0

一個地圖內訪問地圖我在Java中的Map包含其他Map,就像這樣:不能使用JSTL

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。

回答

0

原來是一個facepalm答案。我改變了變量名稱來混淆代碼的目的,認爲它會讓事情更容易理解,當它實際上掩蓋了問題。

原始代碼:

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

注意的forEach循環變量名 - interface當然是保留的Java關鍵字,但堆棧跟蹤沒有做提請注意這個的一個很好的工作。

將變量名稱更改爲interfaze或其他任何修復問題。