2014-12-13 65 views
0

为什么不显示我想要什么:为什么在hasstps的jstl中工作?

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

其显示在一个HTML表格:

说明开始日期开始时间结束时间等级让预订 滑雪傻瓜
高级雕刻技术
如何不脱落拖车
俭约的Extreeeeeeeme
平行转弯
如何夹板兄弟肯腿,以及符合S
越野技术
特技飞行
中级激流回旋

,这不会显示任何东西,但一个例外:

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

我没有头发离开是因为这个!

+0

课程类型是什么? – SMA 2014-12-13 17:49:53

+0

地图<字符串,列表>对于课程 – AkashKing 2014-12-13 17:57:25

回答

0

再次,你没有告诉我们这些物体是什么,这使得它无法回答。希望对你来说,我记得上一个问题的数据结构。因此,AvailableLessonBean.getLessons()返回Map<String, List<String>>

在您的第一个片段中,您将遍历AvailableLessonBean.lessons['description']。这个EL代码所做的就是获得与地图中的关键字“描述”相关联的值:

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>

+0

但它显示在列表中的说明键像我提到的,现在我想为其他人做同样的事情,但它显示我想要的 – AkashKing 2014-12-13 17:57:03

+0

我不低于任何东西评论。我的建议是:定义你自己的类而不是使用列表地图。并开始编写Java中的迭代逻辑。一旦它编译并做了你想要的,然后将它翻译成JSTL。 – 2014-12-13 17:59:41

+0

可用的课程是一个bean的一部分,所以我使用的是一个类 – AkashKing 2014-12-13 18:01:37