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