Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据方式

目录
  • Spring MVC jstl 标签c:forEach 遍历输出双层嵌套List数据
    • 1、创建Controller
    • 2、创建对应的jsp页面
      • 注意事项:
  • springMVC的forEach不能正常显示
    • 1、问题
    • 2、解决

Spring MVC jstl 标签c:forEach 遍历输出双层嵌套List数据

具体操作步骤如下:

1、创建Controller

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页面

<%@ 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及以上)用:

<%@taglibprefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  

web.xml

<?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及以前,

<%@taglibprefix="c" uri="http://java.sun.com/jstl/core"%>  

与2.4比较,以后版本路径少了jsp。

web.xml

<?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

    <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方法即可。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java8 Stream对两个 List 遍历匹配数据的优化处理操作

    使用场景,有两个List<Map<String,Object>>集合,第一个集合的所有元素都是需要保留的. 第一个集合的值为: {name=张三丰1, id=1} {name=张三丰2, id=2} {name=张三丰3, id=3} {name=张三丰4, id=4} {name=张三丰5, id=5} {name=张三丰6, id=6} {name=张三丰7, id=7} {name=张三丰8, id=8} 第二个集合的值为: {grade=61, id=1} {grade=6

  • 详解javaweb中jstl如何循环List中的Map数据

    详解javaweb中jstl如何循环List中的Map数据 第一种方式: 1:后台代码(测试) List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); Map<String, Object> map = null; for (int i = 0; i < 4; i++) { map = new HashMap<String, Object>();

  • 一篇文章带你了解SpringMVC数据绑定

    目录 1.配置web.xml 2.在resources目录下配springmvc_servlet.xml 3.在WEB-INF目录下新建jsp文件夹 4.在java目录下新建com.sxau2包并在子目录下新建Controller.pojo.servlet包 Controller包下新建GoodsController.java pojo包下新建Goods.java实体类 service业务层新建GoodsService.java service业务层新建Impl包并在包下新建GoodsServi

  • Java8处理List的双层循环问题

    Java处理List的双层循环程序员经常遇到,一般都是当两个List某个值满足某条件时候,进行相应的处理: 1.list和map之间的相互转换 /** * 两个List对象当id相同的时候(注意是两个对象,而非两个集合) * @param husbands * @param wives */ private static void test8(List<Husband> husbands, List<Wife> wives) { List<Family> familie

  • Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据方式

    目录 Spring MVC jstl 标签c:forEach 遍历输出双层嵌套List数据 1.创建Controller 2.创建对应的jsp页面 注意事项: springMVC的forEach不能正常显示 1.问题 2.解决 Spring MVC jstl 标签c:forEach 遍历输出双层嵌套List数据 具体操作步骤如下: 1.创建Controller import java.util.ArrayList; import java.util.List; import javax.serv

  • spring mvc使用@InitBinder标签对表单数据绑定的方法

    在SpringMVC中,bean中定义了Date,double等类型,如果没有做任何处理的话,日期以及double都无法绑定. 解决的办法就是使用spring mvc提供的@InitBinder标签 在我的项目中是在BaseController中增加方法initBinder,并使用注解@InitBinder标注,那么spring mvc在绑定表单之前,都会先注册这些编辑器,当然你如果不嫌麻烦,你也可以单独的写在你的每一个controller中.剩下的控制器都继承该类.spring自己提供了大量的

  • jsp简单自定义标签的forEach遍历及转义字符示例

    接着昨天的,如果<forEach>中的items类型是map或者Collection类型的,怎样使用增强for循环: 首先还是创建一个标签处理器类,定义两个属性,String var; Object items: 因为items要迭代各种集合,所以要使用Object; 然后重写setter方法: 声明一个成员变量,集合类型的, 和上面两个属性是不相同的,这个是用在类里的, 在items的setter方法中,判断items的类型 然后继承他的doTag方法: 复制代码 代码如下: public

  • 深入理解Spring MVC概要与环境配置

    一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务逻辑间的双向偶合.MVC不是一种设计模式,MVC是一种架构模式.当然不同的MVC存在差异. 在web早期的开发中,通常采用的都是Model1.Model1中,如图所示主要分为两层,视图层和模型层.Model2把一个项目分成三部分,包括视图.控制.模型.这样不仅提高的代码的复用率与项目的扩展性,且大大

  • Spring MVC InitBinder验证方法

    使用InitBinder做验证的情况一般会在此Controller中提交的数据需要有一些是业务性质的,也即比较复杂的验证情况下才会使用.大部份简单的表单验证,使用annotation验证即可以解决. Annotation验证使用方法可参见:http://www.jb51.net/article/136448.htm 这里需要注意的一点:InitBinder和Annotation两种验证只能二选一,如果使用了InitBinder,就不能使用Annotation验证. 前面的web.xml和spri

  • 详解在Spring MVC中使用注解的方式校验RequestParams

    概述 Spring MVC支持Bean Validation,通过这个验证技术,可以通过注解方式,很方便的对输入参数进行验证,之前使用的校验方式,都是基于Bean对象的,但是在@RequestParam中,没有Bean对象,这样使得校验无法进行,可以通过使用@Validated注解,使得校验可以进行. 校验bean对象 一般校验bean对象,为了可以自动的校验属性,可以通过两步解决: 一.声明对象 package com.github.yongzhizhan.draftbox.model; im

  • Spring MVC获取HTTP请求头的两种方式小结

    1 前言 请求是任何Web服务要关注的对象,而请求头也是其中非常重要的信息.本文将通过代码讲解如何在Spring MVC项目中获取请求头的内容.主要通过两种方式获取: (1)通过注解@RequestHeader获取,需要在Controller中显式获取: (2)通过RequestContextHolder获取,可以任何地方获取. 接下来通过代码讲解. 2 通过注解@RequestHeader获取 需要在Controller中显示使用@RequestHeader. 2.1 获取某个请求头 只获取其

  • [Spring MVC] -简单表单提交实例

    Spring MVC自带的表单标签比较简单,很多时候需要借助EL和JSTL来完成. 下面是一个比较简单的表单提交页面功能: 1.User model package com.my.controller.bean; import java.util.Date; import java.util.List; import javax.validation.constraints.Future; import javax.validation.constraints.Max; import javax

  • 基于Spring Mvc实现的Excel文件上传下载示例

    最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring mvc的项目如何搭建,传送门在这里. 这次就基于这个工程,继续实现上传下载的小例子.需要做下面的事情: 1 增加index.html,添加form提交文件 2 引入commons-fileupload.commons-io.jxl等工具包 3 创建upload download接口 4 注入mul

  • 基于Spring + Spring MVC + Mybatis 高性能web构建实例详解

    一直想写这篇文章,前段时间痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详细的配置,详细的注释,看起来应该很容易懂. 用最合适的技术去实现,并不断追求最佳实践.这就是架构之道. 希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法. 源码地址:https://github.com/Eliteams/quick4j 点击打开 源码地址:https://gi

随机推荐