Spring MVC jstl 标签c:forEach 遍历输出双层嵌套List数据
具体操作步骤如下:
1、创建Controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.mahaochen.springmvc.domain.Goods; import com.mahaochen.springmvc.domain.Inventory; @Controller @RequestMapping ( "/shop" ) public class ShoppingController { @RequestMapping ( "/shoppingCart" ) public String getShoppingCart(HttpServletRequest request, HttpServletResponse response,Model model){ model.addAttribute( "list" , generateData()); return "shoppingCart" ; } private List<Inventory> generateData(){ List<Inventory> inventories = new ArrayList<Inventory>(); for ( int i= 0 ; i< 2 ; i++){ switch (i) { case 0 : Inventory inventory1 = new Inventory(); inventory1.setInventoryType( "水果" ); List<Goods> goodsList1 = new ArrayList<Goods>(); for ( int j= 0 ;j< 5 ;j++){ Goods goods = new Goods(); goods.setGoodsName( "苹果" +j); goodsList1.add(goods); } inventory1.setGoodList(goodsList1); inventories.add(inventory1); break ; default : Inventory inventory2 = new Inventory(); inventory2.setInventoryType( "蔬菜" ); List<Goods> goodsList2 = new ArrayList<Goods>(); for ( int j= 0 ;j< 5 ;j++){ Goods goods = new Goods(); goods.setGoodsName( "茄子" +j); goodsList2.add(goods); } inventory2.setGoodList(goodsList2); inventories.add(inventory2); break ; } } return inventories; } } |
2、创建对应的jsp页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > < title >购物车</ title > </ head > < body > < c:forEach items = "${list }" var = "item" > ${item.inventoryType}< br /> < c:set value = "${item.goodList }" var = "subItem" /> < c:forEach items = "${subItem }" var = "var" > --${var.goodsName }< br /> </ c:forEach > </ c:forEach > </ body > </ html > |
注意事项:
JSTL1.1的库 在JSP2.0(Servlet 2.4)及以后(推荐用JSTL1.1及以上)用:
1
|
<% @taglibprefix = "c" uri= "http://java.sun.com/jsp/jstl/core" %> |
web.xml
1
2
3
4
5
6
|
<? xml version = "1.0" encoding = "UTF-8" ?> < web-app version = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > </ web-app > |
在 Servlet2.3及以前,
1
|
<% @taglibprefix = "c" uri= "http://java.sun.com/jstl/core" %> |
与2.4比较,以后版本路径少了jsp。
web.xml
1
2
3
4
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> < web-app > </ web-app > |
不然会出现以下错误:
org.apache.jasper.JasperException:/WEB-INF/jsp/shoppingCart.jsp(line: 10, column: 1) According to TLD or attribute directive in tag file,attribute items does not accept any expressions
springMVC的forEach不能正常显示
1、问题
在进行springMVC的forEach联系时,出现如下错误
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/index.jsp at line 12
1
2
3
4
5
6
7
|
< table border = "2" bgcolor = "aqua" width = "500px" > < c:forEach items = "${list}" var = "student" > < tr > < td height = "50px" >${student.id}</ td > < td height = "50px" >${student.name}</ td > </ tr > </ c:forEach > |
2、解决
forEach的获取是通过getter来进行的,在实体类中添加getter方法即可。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/mahoking/article/details/53265942