SpringMVC框架学习(十一)——参数绑定(下)

SpringMVC框架学习之参数绑定(下)

除了前面两章介绍的参数绑定外,SpringMVC还可以进行一些高级参数的绑定,比如数组、List、Map等:

5、绑定数组类型

在实际开发中,如果前端请求需要传递多个相同名称的参数值时,在控制类中的处理方法使用数组进行接收。
比如:每个学生前有一个checkbok,选中多个学生后点击删除按钮需要把所有学生的id传递给Controller,这时就可以使用数据来接收参数。

(1)、直接在方法形参里面,定义一个同名的数组接收

前端页面:

<body>
<form action="delete" method="post">
    <table width="30%" border="1">
        <tr>
            <td>选择</td>
            <td>学生</td>
        </tr>
        <tr>
            <td><input name="ids" value="1" type="checkbox"/></td>
            <td>乔峰</td>
        </tr>
        <tr>
            <td><input name="ids" value="2" type="checkbox"/></td>
            <td>段誉</td>
        </tr>
        <tr>
            <td><input name="ids" value="3" type="checkbox"/></td>
            <td>虚竹</td>
        </tr>
    </table>
    <input type="submit" value="删除">
</form>
</body>

选择多个学生后点击删除提交至后台:
在这里插入图片描述
后台使用一个名称为ids的数组接受前台传来的多个值:

@Controller
public class MyController3 {
    @RequestMapping("/delete")
    public void deleteStudents(Integer[] ids){
        for (int i = 0; i <ids.length ; i++) {
            System.out.println(ids[i]);
        }
    }
}

控制台输出如下:
在这里插入图片描述

(2)、将数组放入对象中作为属性存在

需要保证属性名必须和必须和请求参数的名称一致:

Student对象:

public class Student {
    private Integer[] ids;
    private String name;
    private int age;
    
    get/set方法

Controller方法中使用对象接受参数,效果和上面一样:

 @RequestMapping("/delete2")
    public void deleteStudents2(Student student){
        Integer[] ids = student.getIds();
        for (int i = 0; i <ids.length ; i++) {
            System.out.println(ids[i]);
        }
    }
6、绑定List类型

List类型不能直接在方法中使用去接受,如果需要使用 List 集合接收前端传来的数据,List 集合本身需要放在一个封装对象中,这个时候,List 中,可以是基本数据类型,也可以是对象。
例如有一个班级类,班级里边有学生,学生有多个:

班级MyClass:

public class MyClass {
    private Integer id;
    private List<Student> students;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }

    public List<Student> getStudents() {
        return students;
    }
    public void setStudents(List<Student> students) {
        this.students = students;
    }
    @Override
    public String toString() {
        return "MyClass{" +
                "id=" + id +
                ", students=" + students +
                '}';
    }
}

添加班级的时候,可以传递多个 Student,前端页面写法如下:

<form action="addclass" method="post">
    <table>
        <tr>
            <td>班级编号:</td>
            <td><input type="text" name="id"></td>
        </tr>
        <tr>
            <td>学生编号:</td>
            <td><input type="text" name="students[0].age"></td>
        </tr>
        <tr>
            <td>学生姓名:</td>
            <td><input type="text" name="students[0].name"></td>
        </tr>
        <tr>
            <td>学生编号:</td>
            <td><input type="text" name="students[1].age"></td>
        </tr>
        <tr>
            <td>学生姓名:</td>
            <td><input type="text" name="students[1].name"></td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="提交">
            </td>
        </tr>
    </table>
</form>

页面添加学生信息:
在这里插入图片描述
Controller中使用MyClass对象接受参数:

@RequestMapping("/addclass")
    public void deleteStudents3(MyClass myClass){
        System.out.println(myClass);
    }

控制台输出如下:
在这里插入图片描述

6、绑定Map集合

Map的绑定其实和List的绑定是差不多的,首先也是在包装的pojo中新添加一个Map类型的属性,但是,Map 可维护性比较差,因此一般不推荐使用,这里就不举例子了,可以参考下面的文章:
https://www.cnblogs.com/ysocean/p/7425861.html

7、自定义类型转换器

我们提交数据的时候,request中的数据都是以String的类型存在的,Spring会做一些类型转换,将这些数据转换成我们所需要的数据类型(int、float等)。对于日期来说,Spring支持的格式是2019/11/11,当我们传入2019-11-11,程序会报错,这时候就需要我们自定义类型转换器来满足我们的需要。详情参考文章:
https://www.cnblogs.com/jinchengll/p/11792300.html
http://www.monkey1024.com/framework/1293

发布了61 篇原创文章 · 获赞 0 · 访问量 615

猜你喜欢

转载自blog.csdn.net/weixin_44075963/article/details/103690742
今日推荐