Java jstl迭代器映射和列表

Java jstl迭代器映射和列表,java,jstl,Java,Jstl,以下代码不起作用: <c:forEach items="${orderNumByDepartment}" var="map2"> <c:forEach items="${map2.value }" var="foodName2foodNum"> <tr> <td>${map2.key }</td> <t

以下代码不起作用:

    <c:forEach items="${orderNumByDepartment}" var="map2">
        <c:forEach items="${map2.value }" var="foodName2foodNum">

            <tr>
                    <td>${map2.key }</td>
                    <td>${foodName2foodNum.key }</td>
                    <td>${foodName2foodNum.value }</td>
            </tr>

        </c:forEach>
    </c:forEach>

orderNumByDepartment is Map<String, List<Map<String, Integer>>> type.

${map2.key}
${foodName2foodNum.key}
${foodName2foodNum.value}
OrderNumberDepartment是映射类型。

你能告诉我为什么我不能得到第二个和第三个值(foodName2foodNum.key/foodName2foodNum.value)

我认为
Map
应该是
Map
,因为你想
foodName2foodNum
成为一个Map,不是地图列表,
map2
则为
Map类型。Entry

foodName2foodNum是整个地图,而不是单个地图条目,因此没有键和值。 如果需要映射项中的字符串键和整数值,请尝试在map2.value循环中创建另一个c:forEach循环。例如

<c:forEach items="${foodName2foodNum}" var="thirdLoopVar">
  <p>${thirdLoopVar.key}</p>
  <p>${thirdLoopVar.value}</p>
</c:forEach>

${thirdLoopVar.key}

${thirdLoopVar.value}


首先,为什么在
}
之前需要空白?map2.value是一个列表,而foodName2foodNum实际上是一个映射。我现在找到了答案,我应该使用另一个forEach来迭代foodName2foodNum(映射)。谢谢你的回答:)谢谢你澄清费利克斯。我已经更新了答案以匹配您的评论。