jsp两次foreach循环输出list.list()的数据生成不规则table

版权声明:本文为博主原创文章,转载表明出处即可,欢迎转载! https://blog.csdn.net/qq_39767955/article/details/82890553

先来看一下效果吧:

第3、4行最后两个数据是合并的,所以说它不规则。

进入正题,我们来看看数据源:

public class LadingInfo implements Serializable{
    //.........
 private List<LadingDetail> ladingDetailList;

}

public class LadingDetail implements Serializable{
    //...................

}

ladingInfo类以ladingDetail类的对象集合的list类型的属性,在数据库中对应了两张表,一下是service层代码:

for (String id : ids) {
			
			LadingInfo ladingInfo= dao.getLadingInfoById(id);

			List<LadingDetail> ladingDetailList = dao.findLadingDetailListByLadingId(id);
			ladingInfo.setLadingDetailList(ladingDetailList);
			ladingList.add(ladingInfo);
			
			}
		}

//controller往jsp返回数据
model.addAttribute("ladingInfoList",ladingInfoList);

小结一下:一个ladingList有很多ladingInfo对象,一个ladingInfo对象有很多ladingDetail对象,ladingDetail作为ladingInfo的属性存储就是一个list集合了。

现在来说说怎么把ladingList这个list中的数据遍历在表中显示出来:

1 <c:forEach items="${ladingInfoList}" var="lading" varStatus="p">
2	<tr>
3		<c:forEach items="${lading.ladingDetailList}" var="detail" varStatus="pd">
4			<c:set var="orderSize" value="${fn:length(lading.ladingDetailList)}"></c:set>
	
5				<c:if test="${pd.index gt 0 }">
6					<tr>
7				</c:if>

8				<td>${detail.maktx} </td> 
9				<td>${lading.consigneeAddress} </td>
10				<td>${lading.consigneeCompany} </td>
												
11				<c:if test="${pd.index eq 0 }">						
12				<td rowspan="${orderSize>0?orderSize:1}"> </td>
13				<td rowspan="${orderSize>0?orderSize:1}">${lading.ladingCode}</td>
14				</c:if>

15			<c:if test="${pd.index gt 0 }">
16				</tr>
17			</c:if>

18		</c:forEach>	
19	</tr>
20</c:forEach>

解释一下:先循环最外面的ladingInfoList,再循环每个对象的list集合属性;

                  第4行定义了一个orderSize,这是最后合并列用的参数,在12行用到了;

           第5行是说,如果大对象(ladingInfo)的list集合的长度大于0时,这里的index是从0开始计算(参见:https://blog.csdn.net/qq_39767955/article/details/82691125),也就是说list里面有两个以上ladingDetail类的对象时,就增加一个<tr>;

扫描二维码关注公众号,回复: 3541292 查看本文章

               8,9,10行是显示数据(精简的部分代码,不影响整体效果),第10行是说,当前循环list是第一次时(因为这里的pd.index 等于0),那么就显示ladingInfo大对象的数据,并做行合并处理。

                 15行和以后的用过不用解释了,都很简单的。

ps:如果你学会了,并喜欢我的博客,请关注,点赞,留言,Thanks♪(・ω・)ノ。写了这么多博客都没有人关注,好气呀。

猜你喜欢

转载自blog.csdn.net/qq_39767955/article/details/82890553