倾囊求教: 关于在JSP中 用logic:iterate遍历HashMap

时间:2022-02-25 19:17:34
说明:数据库里只有一张表,名字是课程大纲表,字段只有两个,id(varchar即课程大纲ID号,assigned)和name(varchar即课程大纲标题) 
表建出来如下: 
00101    第一章 
0010101  第一章第一节 
0010102  第一章第二节 
00102    第二章 
0010201  第二章第一节 
0010202  第二章第二节 
0010203  第二章第三节 
........ 
(补充:前三位"001"表示课程编号,这个无关紧要,反正只能是3位数,紧接着两位数"01"表示章号,再紧接着两位数"01"表示节号,另外我规定章号和节号最多只能到08) 

因为数据库中只有一个表,我用Hibernate对应也只有一个Outline(课程大纲类),属性有id,name两个,在DAOImpl中如何用HQL查询并保存在Collection中,然后在JSP中用struts标签遍历(logic:iterator)给显示出来 

请问大家: 
现在我可以得到的是 章节的HashMap,如何在JSP页面里打印出来,即 logic:iterate对于HashMap的遍历,其中 HashMap中key是"chapter"对象(也可以是chapter.getName()即章名的字符串),value是"lesson"集合 

查找并获得HashMap的代码如下: 
public HashMap selectOutlineForBrowse(String outlineId) { 
HashMap h=new HashMap(); 
for(int i=1;i <=8;i++){ 
Criteria c=getSession().createCriteria(Outline.class); 
String chapterId=outlineId+"0"+i; 
// System.out.println(chapterId); 
c.add(Restrictions.like("id", chapterId, MatchMode.EXACT)); 
Outline chapter=(Outline) c.uniqueResult(); 
for(int j=1;j <=8;j++){ 
Criteria cc=getSession().createCriteria(Outline.class); 
String lessonId=chapterId+"0"+j; 
// System.out.println(lessonId); 
cc.add(Restrictions.like("id", lessonId,MatchMode.EXACT)); 
List lessons=cc.list(); 
h.put("chapter.getName()", lessons); 


return h; 


如何用logic:iterate在下面的静态页面代码中输出? 资料网上找了,但是还是迷茫?请高手指教! 

<ul> 
    <li class="Opened"> <img class=s src="../css/s.gif" onclick="javascript:ChangeStatus(this);"> <a href="#">第一章 &nbsp;项目管理 </a> 
    <ul> 
    <li class="Child">第一节&nbsp;&nbsp; <a href="outlineinfo.htm">我是1.1 </a> </li> 
    <li class="Child">第二节&nbsp;&nbsp; <a href="#">我是1.2 </a> </li> 
    <li class="Child">第三节&nbsp;&nbsp; <a href="#">我是1.3 </a> </li> 
    <li class="Child">第四节&nbsp;&nbsp; <a href="#">我是1.4 </a> </li> 
    </ul> 
</li> 
</ul>

6 个解决方案

#1


楼主的Map:

key         ----- value
chapter1 ---- List lessons1       
                  |            
                    |--lesson 11  
                    |--lesson 12  
                    |--lesson 13  
                    |……………… 
                                  
chapter2 ---- List lessons2       
    |            
                    |--lesson 21  
                    |--lesson 22  
                    |--lesson 23  
                    |……………… 

是这意思吧?
使用iterate标签遍历map,是可以的,但是取得value后,是一个List
iterate的嵌套
此等小事,问Google
附送一个搜索结果:http://hi.baidu.com/songwentao/blog/item/13d8b901f8ced7031c95836a.html

#2


有点变形……不好意思

#3


你自己试试:
[code=JSP]
<logic:iterate> 标签还可以遍历HashMap 中的元素, 例如:
    <%
        HashMap months = new HashMap();
        
        months.put("Jan","January");
        months.put("Feb","February");
        months.put("Mar","March");
        
        request.setAttribute("month", months);
    %>
    <logic:iterate id="element" indexId="ind" name="months">
        <bean:write name="ind"/>.                       // 序号
        <bean:write name="element" property="key"/>:     // 键名
        <bean:write name="element" property="value"/>    // 键值
    </logic:iterate>
[/code]

#4


感谢楼上两位,问题已经解决了,3楼的代码我也看过的,不过最后我研究的不是这段代码,也是HashMap遍历的, 感谢大家

#5


引用 4 楼 lmcgnlzt 的回复:
感谢楼上两位,问题已经解决了,3楼的代码我也看过的,不过最后我研究的不是这段代码,也是HashMap遍历的, 感谢大家


倾囊求教: 关于在JSP中 用logic:iterate遍历HashMap
ding

#6


引用 4 楼 lmcgnlzt 的回复:
感谢楼上两位,问题已经解决了,3楼的代码我也看过的,不过最后我研究的不是这段代码,也是HashMap遍历的, 感谢大家

记得结贴!

#1


楼主的Map:

key         ----- value
chapter1 ---- List lessons1       
                  |            
                    |--lesson 11  
                    |--lesson 12  
                    |--lesson 13  
                    |……………… 
                                  
chapter2 ---- List lessons2       
    |            
                    |--lesson 21  
                    |--lesson 22  
                    |--lesson 23  
                    |……………… 

是这意思吧?
使用iterate标签遍历map,是可以的,但是取得value后,是一个List
iterate的嵌套
此等小事,问Google
附送一个搜索结果:http://hi.baidu.com/songwentao/blog/item/13d8b901f8ced7031c95836a.html

#2


有点变形……不好意思

#3


你自己试试:
[code=JSP]
<logic:iterate> 标签还可以遍历HashMap 中的元素, 例如:
    <%
        HashMap months = new HashMap();
        
        months.put("Jan","January");
        months.put("Feb","February");
        months.put("Mar","March");
        
        request.setAttribute("month", months);
    %>
    <logic:iterate id="element" indexId="ind" name="months">
        <bean:write name="ind"/>.                       // 序号
        <bean:write name="element" property="key"/>:     // 键名
        <bean:write name="element" property="value"/>    // 键值
    </logic:iterate>
[/code]

#4


感谢楼上两位,问题已经解决了,3楼的代码我也看过的,不过最后我研究的不是这段代码,也是HashMap遍历的, 感谢大家

#5


引用 4 楼 lmcgnlzt 的回复:
感谢楼上两位,问题已经解决了,3楼的代码我也看过的,不过最后我研究的不是这段代码,也是HashMap遍历的, 感谢大家


倾囊求教: 关于在JSP中 用logic:iterate遍历HashMap
ding

#6


引用 4 楼 lmcgnlzt 的回复:
感谢楼上两位,问题已经解决了,3楼的代码我也看过的,不过最后我研究的不是这段代码,也是HashMap遍历的, 感谢大家

记得结贴!