Почему это работает в 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>,

Другие вопросы по тегам