2012-03-13 2 views
0

Код Следование не работает:JSTL итератора карта и список

<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. 

Можете ли вы сказать мне, почему я не могу получить второе и третье значение (foodName2foodNum.key/foodName2foodNum.value)

+0

Прежде всего, зачем вам это пробелы перед '}'? – cherouvim

ответ

1

foodName2foodNum - это вся карта, а не одна запись карты, поэтому не имеет ключа и значения. Если вы хотите, чтобы клавиши String и значения Integer из записей Карты, попробуйте создать еще один цикл c: forEach внутри цикла map2.value. Например.

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

map2.value - это список и foodName2foodNum - это карта на самом деле. Я нахожу ответ, теперь я должен использовать другой forEach для итерации foodName2foodNum (карта). Спасибо за ваш ответ :) – Felix

+0

Спасибо за разъяснение Феликса. Я обновил ответ, чтобы ответить на ваш комментарий. – AlanS

1

I думаю, Map<String, List<Map<String, Integer>>> должен быть Map<String, Map<String, Integer>>, потому что вы хотите, чтобы foodName2foodNum была картой, а не списком карт и map2 был тогда типа Map.Entry<String, Map<String, Integer>>.

Смежные вопросы