jstl的forEach嵌套问题,三层

redstone1202 2012-09-17 10:25:03
如题:jstl嵌套问题

先说说思路:

map装的key是项目,value是一个List

这个List是有map组成,key为幢,value为List

里面这个List是户信息,key为户,value为户List

现在后台代码如下



listOfZone = new ManagementProjectInfoBean().getManagementProjectInfoListBySql(str);//临时存放小区下项目
for(int i=0; i<listOfZone.size(); i++) {
//每个项目下的幢
rIBean.existBuilds(((ManagementProjectInfoView)listOfZone.get(i)).getId(), listOfTemp, Constants.DELETE_MANAGEMENTPROJECTINFO);
for(int j=0; j<listOfTemp.size(); j++) {
List houseList = new ArrayList();
RelInfo rInfo = (RelInfo)listOfTemp.get(j);//
BuildView bView = new BuildTabBean().getBuildTabView(rInfo.getBuildId());
int total = new HouseTabBean().getHousePositionInfo(houseList, bView.getId());
mapOfTemp.put(bView, houseList);
sumOfPjtSelf += total;
listOfPjt.add(mapOfTemp);
}
sumOfPjt += sumOfPjtSelf;
mapOfPjt.put(((ManagementProjectInfoView)listOfZone.get(i)), listOfPjt);
}
sumOfAll = sumOfPjt + sumOfZone;
Collections.sort(new ArrayList(mapOfPjt.keySet()));




其中,listOfTemp为所有的幢id的List

-------------------------------------

jsp代码(jstl)如下



<table border=0 cellpadding="5" cellspacing="1" class="table_huei" >
<tr class="tr_data1">
<td colspan="2" class="tr_title2" align="center">${zv.name}:项目信息</td>
<td width=4%>${sumOfPjt}</td>
</tr>
<!-- map start-->
<c:forEach items="${mapOfPjt}" var="item" >
<tr class="tr_data1">
<td colspan="2" class="tr_data3" align="center">${item.key.projectName}:项目信息</td>
<td width=4%>${sumOfPjt}</td>
</tr>
<c:forEach items="${item.value}" var="item1" >
<tr class="tr_data1">
<td width=17% align="right">${item1.key.broough}${item1.key.road}${item1.key.tabletNum}</td>
<td width=79%><c:forEach items="${item1.value}" var="item11" >
${item11.cellNum}单元${item11.floorNum}${item11.maproomNum} |
</c:forEach></td>
<td width=4%><c:out value="${fn:length(item1.value)}"></c:out></td>
</tr>
</c:forEach>
</c:forEach>
<!-- map end-->
</table>




目前估计是jsp出错,执行到 <c:forEach items="${item.value}" var="item1" >
就跳到文件末尾了,调试了半天不见结果,没思路了

望高人能帮忙看看

出现这样一个错误

com.pkpm.houseManager.dataView.BuildView cannot be cast to java.lang.String

...全文
579 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
redstone1202 2012-09-21
  • 打赏
  • 举报
回复
下载jstl源码么,好的,我有时间试试,最近赶项目啊,一个人写所有的。
rainsilence 2012-09-21
  • 打赏
  • 举报
回复
最好最直接最涨功力的方法是,下载jstl的源码,导入工程debug。你有那么多时间还不如这样搞下。
redstone1202 2012-09-21
  • 打赏
  • 举报
回复
好吧,我不是偷懒,我整了好几天了。恩我再 看看;后来这个方法不能排序了,不过项目少,不排也可,我再攻克一下。
liu4626846 2012-09-20
  • 打赏
  • 举报
回复
其实是非常简单的问题! 无非就是多层循环嵌套从最外面开始一层一层写确保正确
你是自乱阵脚了!
wingson_shen 2012-09-20
  • 打赏
  • 举报
回复
多层关系很容易乱。。。建议:

一层层地写。。。确保外层是对的。定位出错地方。
redstone1202 2012-09-20
  • 打赏
  • 举报
回复
现在后台更改了一下,去除了装map的一个list,map直接装map



ZoneView zv = new ZoneBean().getZoneViewById(listId);
String str = "";
int sumOfZone = 0;
int sumOfPjtSelf = 0;
int sumOfPjt = 0;
int sumOfAll = 0;
List listOfZone = new ArrayList();//zone
List listOfTemp = new ArrayList();
List listOfPjt = new ArrayList();
Map<BuildView, List> mapOfZone = new TreeMap<BuildView, List>();//zone
//Map<BuildView, List> mapOfTemp = null;
Map<ManagementProjectInfoView, Map> mapOfPjt = new TreeMap<ManagementProjectInfoView, Map>();
RelInfoBean rIBean = new RelInfoBean();
////小区下幢
rIBean.existBuilds(zv.getId(), listOfZone, Constants.DELETE_ZONEINFO);
for(int i=0; i<listOfZone.size(); i++) {
List houseList = new ArrayList();
RelInfo rInfo = (RelInfo)listOfZone.get(i);
BuildView bView = new BuildTabBean().getBuildTabView(rInfo.getBuildId());
int total = new HouseTabBean().getHousePositionInfo(houseList, bView.getId());
mapOfZone.put(bView, houseList);
sumOfZone += total;
}
Collections.sort(new ArrayList(mapOfZone.keySet()));
/*
Collections.sort(new ArrayList(map.keySet()), new Comparator(){
public int compare(Object o1, Object o2) {
return (((BuildView)o1).getBuildNum().toString()).
compareTo(((BuildView)o2).getBuildNum().toString());
}
});*/
str = "zoneID = " + zv.getId();
listOfZone = new ManagementProjectInfoBean().getManagementProjectInfoListBySql(str);//临时存放小区下项目
for(int i=0; i<listOfZone.size(); i++) {
//每个项目下的幢
Map<BuildView, List> mapOfTemp = new TreeMap<BuildView, List>();
rIBean.existBuilds(((ManagementProjectInfoView)listOfZone.get(i)).getId(), listOfTemp, Constants.DELETE_MANAGEMENTPROJECTINFO);
for(int j=0; j<listOfTemp.size(); j++) {
List houseList = new ArrayList();
RelInfo rInfo = (RelInfo)listOfTemp.get(j);//
BuildView bView = new BuildTabBean().getBuildTabView(rInfo.getBuildId());
int total = new HouseTabBean().getHousePositionInfo(houseList, bView.getId());
//mapOfTemp = new TreeMap<BuildView, List>();
mapOfTemp.put(bView, houseList);
sumOfPjtSelf += total;
//listOfPjt.add(mapOfTemp);
}
sumOfPjt += sumOfPjtSelf;
mapOfPjt.put(((ManagementProjectInfoView)listOfZone.get(i)), mapOfTemp);
//mapOfTemp.clear();
}
sumOfAll = sumOfPjt + sumOfZone;
//Collections.sort(new ArrayList(mapOfPjt.keySet()));
request.setAttribute("sumOfZone", sumOfZone);
request.setAttribute("sumOfPjt", sumOfPjt);
request.setAttribute("mapOfZone", mapOfZone);
request.setAttribute("mapOfPjt", mapOfPjt);
request.setAttribute("zv", zv);
request.getRequestDispatcher("/company/zone/zoneInfoSelfList.jsp").forward(request, response);





前台如下



<table border=0 cellpadding="5" cellspacing="1" class="table_huei" >
<tr class="tr_data1">
<td colspan="2" class="tr_title2" align="center">${zv.name}:幢/户信息</td>
<td width=4%>${sumOfZone}</td>
</tr>
<c:forEach items="${mapOfZone}" var="item1" >
<tr class="tr_data1" >
<td width=17% align="right">${item1.key.broough}${item1.key.road}${item1.key.tabletNum}</td>
<td width=79%><c:forEach items="${item1.value}" var="item11" >
${item11.cellNum}单元${item11.floorNum}${item11.maproomNum} |
</c:forEach></td>
<td width=4%><c:out value="${fn:length(item1.value)}"></c:out></td>
</tr>
</c:forEach>
</table>
<table border=0 cellpadding="5" cellspacing="1" class="table_huei" >
<tr class="tr_data1">
<td colspan="2" class="tr_title2" align="center">${zv.name}:项目信息</td>
<td width=4%>${sumOfPjt}</td>
</tr>
<!-- map start-->
<c:forEach items="${mapOfPjt}" var="item2" >
<tr class="tr_data1">
<td colspan="2" class="tr_data3" align="center">${item2.key.projectName}:项目信息</td>
<td width=4%>${sumOfPjt}</td>
</tr>
<c:forEach items="${item2.value}" var="item22" >
<tr class="tr_data1">
<td width=17% align="right">${item22.key.broough}${item22.key.road}${item22.key.tabletNum}</td>


</tr>
</c:forEach>
</c:forEach>
<!-- map end-->





第一个table显示正常,第二个的话

假设有2个项目 ,第一个 有3幢,第二个有5幢

显示的结果第一个能显示3,第二个显示3+5=8幢

我检查了一下,该清除的都清除了 ,换了好几个地方,还是无结果,都显示8个

望高人帮忙仔细分析一下,谢谢。
木薯超人 2012-09-19
  • 打赏
  • 举报
回复
恕我直言 拼JSP拿不好么= =
redstone1202 2012-09-19
  • 打赏
  • 举报
回复
我也扩展了啊,出现了问题,
redstone1202 2012-09-19
  • 打赏
  • 举报
回复
望高人作答,恩很有挑战性的问题。看来最近高手都隐起来了啊。
aa00aa00 2012-09-18
  • 打赏
  • 举报
回复
我上面处理的是list放入map中的情况,你可以继续进行扩展的!!
redstone1202 2012-09-18
  • 打赏
  • 举报
回复
楼上没明白我的意思,没有那么简单啦;三层嵌套呢,map里面list,list里面map,map里面又是list呢,望高人解答了。
aa00aa00 2012-09-18
  • 打赏
  • 举报
回复
List list1 = new ArrayList();
list.add(xxxx)
List list2 = new ArrayList();

Map map = new HashMap();
map.put("key1",list1);
map.put("key2",list2);

request.setAttribute("maps",map);

jsp:

<c:forEach var="map" items="${maps}">
<c:out value='${map.key }'/><br>

<c:forEach var="each" items="${map.value }">
<c:out value='${each.id }'/><br>
<c:out value='${each.name }'/>
<hr>
</c:forEach>
</c:forEach>
redstone1202 2012-09-17
  • 打赏
  • 举报
回复
刚上网差了一下 貌似是 数组转换的问题,自己锁定错误在这行

<td width=17% align="right">${item22.key.broough}${item22.key.road}${item22.key.tabletNum}</td>

不知在jstl下该中如何 转换数组相关问题
redstone1202 2012-09-17
  • 打赏
  • 举报
回复
debug也无从调试起,郁闷中,望高人指点小弟一二,不胜感激。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧