Почему это работает в JSTL с hashmaps?
Почему отображается то, что я хочу:
<c:forEach var="temp" items="${AvailableLessonBean.lessons['description']}">
<form action="" method="POST">
<tr>
<td>
<c:out value="${temp}"/>
</td>
который отображается в HTML-таблице:
Описание Дата начала Время начала Время окончания Уровень Бронирование Сноуборд для чайников
Продвинутые методы резьбы
Как не упасть с драглифта
Гнарность Extreeeeeeeme
Параллельные повороты
Как наложить шину на сломанную ногу
Кросс-кантри техники
высший пилотаж
Средний слалом
и это не отображает ничего, кроме исключения:
<c:forEach var="temp" items="${AvailableLessonBean.lessons}">
<form action="" method="POST">
<tr>
<td>
<c:out value="${temp['description']}"/>
</td>
У меня не осталось волос из-за этого!!
1 ответ
Еще раз, вы не сказали нам, что это за объекты, что делает невозможным ответить. Надеюсь, я помню структуру данных из предыдущего вопроса.
Так, AvailableLessonBean.getLessons()
возвращает Map<String, List<String>>
,
В своем первом фрагменте вы перебираете AvailableLessonBean.lessons['description']
, Этот код EL делает то, что он получает значение, связанное с ключом "description" на карте:
map.get("description")
это отлично работает Возвращает List<String>
, Он перебирает этот список и сохраняет текущий элемент списка в переменной с именем temp
, И на каждой итерации он печатает temp
, Таким образом, это эквивалентно следующему коду Java:
List<String> list = availableLessonBean.getLessons().get("description");
for (String temp : list) {
out.println(temp);
}
Во втором фрагменте вы перебираете саму карту. JSTL указывает, что когда вы перебираете карту, вы перебираете все записи карты. Каждая запись имеет ключ и значение. Таким образом, итерация эквивалентна выполнению в Java:
for (Map.Entry<String, List<String>> temp : availableLessonBean.getLessons().entrySet()) {
...
}
Но тогда вы пытаетесь получить доступ temp["description"]
, Это не имеет никакого смысла. temp
это карта Запись в карте имеет ключ и значение. Это все. В этом случае ключ является String
и значение является List<String>
,