为什么这在jstl中使用hashmaps?

时间:2014-12-13 17:42:38

标签: java hashmap

为什么显示我想要的东西:

   <c:forEach var="temp" items="${AvailableLessonBean.lessons['description']}">
                    <form action="" method="POST">
                        <tr>
                            <td>
                                <c:out value="${temp}"/>
                            </td>

显示在html表格中:

说明开始日期开始时间结束时间级别进行预订 滑雪板的假人
先进的雕刻技术
怎么不脱落拖车
Gnarliness Extreeeeeeeme
平行转动
如何用一个夹住一条断腿 越野技术
特技飞行
中级障碍赛

这并不会显示任何异常:

    <c:forEach var="temp" items="${AvailableLessonBean.lessons}">
                    <form action="" method="POST">
                        <tr>
                            <td>
                                <c:out value="${temp['description']}"/>
                            </td>

由于这个原因,我没有留下头发!!

1 个答案:

答案 0 :(得分:0)

再一次,你没有告诉我们这些物品是什么,这使得它无法回答。希望对你而言,我记得上一个问题的数据结构。

因此,AvailableLessonBean.getLessons()会返回Map<String, List<String>>

在您的第一个代码段中,您将迭代AvailableLessonBean.lessons['description']。这个EL代码的作用是它获得与密钥相关的值&#34;描述&#34;在地图中:

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>