做java web项目有时候会需要在页面使用嵌套<c:forEach>遍历一个List,但是嵌套很容易忽略一些东西导致出错
后台代码:
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (Map<String, Object> map : list) { List<Map<String, Object>> wordsList = new ArrayList<Map<String, Object>>(); Map<String, Object> tmap = new HashMap<String, Object>(); tmap.put("author", "author"); tmap.put("sign", "sign"); wordsList.add(tmap); map.put("wordsList", wordsList); } model.addAttribute("list", list);
这个时候list里面的每一个元素还包含一个wordsList,到页面遍历就需要用到嵌套<c:forEach>
JSP页面代码:
<c:forEach items="${list }" var="cl" varStatus="i"> <c:forEach items="${cl.wordsList}" varStatus="i" var="wl"> <li>${wl.author }</li> <li>${wl.sign }</li> </c:forEach> </c:forEach>
在写内层循环的时候很容易犯错,写成
<c:forEach items="${wordsList}" varStatus="i" var="wl"> <li>${wl.author }</li> <li>${wl.sign }</li> </c:forEach>
内层循环的items属性需要带上上层循环的var属性值,必须写成
<c:forEach items="${cl.wordsList}" varStatus="i" var="wl"> <li>${wl.author }</li> <li>${wl.sign }</li> </c:forEach>