Hey, Nice to meet You. 

有过人之节.人情有所不能忍者,匹夫见辱,拔剑而起,挺身而斗,此不足为勇也,天下有大勇者,猝然临之而不惊,无故加之而不怒.此其所挟持者甚大,而其志甚远也.          ☆☆☆所谓豪杰之士,必

SpringMVC入门学习(四)----SpringMVC绑定参数(集合类型绑定)

 


1、List集合绑定

SpringMVC中,如果前端需要传递批量数据时,就可以使用List来接收,此时的 List 集合本身需要放在一个封装对象中,也就是作为一个嵌套的对象类型。List 中可以是基本数据类型,也可以是对象。例如一本书有时不止是一个作者,也可以有多个,所以我们可以在Book类中添加一个Author的集合类,代码如下所示:

[1]、编写实体类Author:

public class Author {
    private String name;
    private String age;
    //getter,setter和toString省略
}

[2]、编写实体类Book:

public class Book {
    //书的ID
    private Integer id;
    //书名
    private String name;
    //出版社
    private String publisher;
    //图书作者(可以有多位)
    private List<Author> author;

    //getter,setter和toString省略
}

[3]、编写前端提交图书页面index.jsp。注意:绑定List集合时,前端页面中每一组数据的input控件的name属性的格式为:集合名[下标].属性,当请求传递到后端时,处理器适配器会根据name的格式将请求参数解析为相应的List集合。前台的JSP代码如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<!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>
<form action="${pageContext.request.contextPath}/book" method="post">
    图书 ID:<input type="text" name="id"/><br/>
    图书名称:<input type="text" name="name"/><br/>
    出版社:<input type="text" name="publisher"/><br/>
    List类型-作者1名称:<input type="text" name="author[0].name"/><br/>
    List类型-作者1年龄:<input type="text" name="author[0].age"/><br/>
    List类型-作者2名称:<input type="text" name="author[1].name"/><br/>
    List类型-作者2年龄:<input type="text" name="author[1].age"/><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

[4]、编写Controller类中的具体代码如下:

//@Controller:表示一个Controller实例,该实例由Spring容器管理
@Controller
public class BookController {
    //配置请求的地址
    @RequestMapping(value = "book", method = RequestMethod.POST)
    public String getInfo(Book book) {
        System.out.println("获取到的数据为:ID--" + book.getId()
                + ",名称--" + book.getName()
                + ",出版社--" + book.getPublisher()
                + "\n作者信息--" + book.getAuthor());
        //成功后跳转的页面
        return "success";
    }
}

[5]、启动Tomcat测试代码,运行后的结果如下所示:

image

image

2、数组绑定

如果前台传输了多个相同name的数据,比如多选框,SpringMVC可以在处理器方法中使用数组参数接收这些数据。

[1]、实体类Book:

public class Book {
    //书的ID
    private Integer id;
    //书名
    private String name;
    //出版社
    private String publisher;
    //图书类型
    private String[] bookType;
    
    //getter,setter和toString省略
}

[2]、提交数据页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<!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>
<form action="${pageContext.request.contextPath}/book" method="post">
    图书 ID:<input type="text" name="id"/><br/>
    图书名称:<input type="text" name="name"/><br/>
    出版社:<input type="text" name="publisher"/><br/>
    图书类型 :<input type="checkbox" name="bookType" value="Java">Java
    <input type="checkbox" name="bookType" value="C++">C++
    <input type="checkbox" name="bookType" value="PHP">PHP
    <input type="checkbox" name="bookType" value="Python">Python <br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

[3]、Controller控制器中的代码:

//@Controller:表示一个Controller实例,该实例由Spring容器管理
@Controller
public class BookController {
    //配置请求的地址
    @RequestMapping(value = "book", method = RequestMethod.POST)
    public String getInfo(Book book) {
        System.out.println("图书ID:"+book.getId());
        System.out.println("图书名称:"+book.getName());
        System.out.println("出版社:"+book.getPublisher());
        System.out.println("图书类型:");
        for (String bookType : book.getBookType()) {
            System.out.println(bookType);
        }
        //成功后跳转的页面
        return "success";
    }
}

[4]、运行结果如下:

image

image

3、Map集合绑定

SpringMVC也可以绑定Map集合类型,Map的绑定其实和List的绑定是差不多的。虽然Map的使用比较灵活,但是对于这里绑定数据而言就显得乏力了,可维护性比较差,所以因此一般不推荐使用。

[1]、给上面的Book类添加一个Map属性:

public class Book {
    //书的ID
    private Integer id;
    //书名
    private String name;
    //出版社
    private String publisher;
    //图书作者(可以有多位)
    private List<Author> author;
    //添加Map集合
    private Map<String, Author> authorMap;

    //getter,setter和toString省略
}

[2]、Controller类中的具体代码如下:

//@Controller:表示一个Controller实例,该实例由Spring容器管理
@Controller
public class BookController {
    //配置请求的地址
    @RequestMapping(value = "book", method = RequestMethod.POST)
    public String getInfo(Book book) {
        System.out.println("获取到的数据为:ID--" + book.getId()
                + ",名称--" + book.getName()
                + ",出版社--" + book.getPublisher());

        //遍历Map集合
        Map<String, Author> authorMap = book.getAuthorMap();
        Set<Map.Entry<String, Author>> entries = authorMap.entrySet();
        for (Map.Entry<String, Author> entry : entries) {
            System.out.println("键key:"+entry.getKey()+"--作者名称:"
                    +entry.getValue().getName()+"--作者年龄:"+entry.getValue().getAge());
        }

        //成功后跳转的页面
        return "success";
    }
}

[3]、在前端index.jsp页面额外添加如下JSP代码。当想把页面上的批量数据通过Spring MVC转换为Web端的Map类型的对象时,每一组数据的input控件的name属性使用Map名['key值']的形式。当请求传递到Web端时,处理器适配器会根据name的格式将请求参数解析为相应的Map集合。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<!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>
<form action="${pageContext.request.contextPath}/book" method="post">
    图书 ID:<input type="text" name="id"/><br/>
    图书名称:<input type="text" name="name"/><br/>
    出版社:<input type="text" name="publisher"/><br/>
    Map类型-作者1名称:<input type="text" name="authorMap['a1'].name"/><br/>
    Map类型-作者1年龄:<input type="text" name="authorMap['a1'].age"/><br/>
    Map类型-作者2名称:<input type="text" name="authorMap['a2'].name"/><br/>
    Map类型-作者2年龄:<input type="text" name="authorMap['a2'].age"/><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

[4]、将项目部署到Tomcat然后启动测试,效果如下所示:

image

image

posted @   唐浩荣  阅读(1025)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示

目录导航