0

次のように、別Mapの を含む in Java があります。Map

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

これがデータを渡すのに理想的な方法ではないことは理解していますが、テストのためには、データを JSTL にプッシュするためだけに使用されるクラスを具体化するよりも簡単です。

そうは言っても、2 番目のレベルで値を取得することはできません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

フェイスパームの答えであることが判明しました。変数名を変更してコードの目的をわかりにくくし、実際に問題を覆い隠してしまうと、物事がより理解しやすくなると考えました。

元のコード:

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

forEachループの変数名に注意してください-interfaceもちろん予約済みのJavaキーワードですが、スタックトレースはこれに注意を引くのにあまりうまくいきませんでした。

変数名をinterfazeまたは他の名前に変更すると、問題が修正されます。

于 2012-04-06T00:55:39.390 に答える