Spring MVC数据绑定和响应——复杂数据绑定(二)集合绑定

发布于:2024-07-02 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、集合绑定的使用

        集合中存储简单类型数据时,数据的绑定规则和数组的绑定规则相似,需要请求参数名称与处理器的形参名称保持一致。不同的是,使用集合绑定时,处理器的形参名称需要使用@RequestParam注解标注。

接下来使用集合数据绑定来批量提交商品案例,具体实现步骤如下所示。

1、修改ProductController.java类的getProducts()方法,让getProducts( )方法使用List类型来接受客户端的请求参数,修改后getProducts( )方法的具体代码如下所示。

// 获取商品列表(使用List绑定数据)
@RequestMapping("/getProducts")
public void getProducts(@RequestParam("proIds") List<String> proIds) {
    for (String proId : proIds) {
        System.out.println("获取到了Id为"+proId+"的商品");
}

2、启动chapter12项目,在浏览器中访问地址http://localhost:8080/chapter12/products.jsp,勾选products.jsp页面表单的所有复选框,然后单击“提交商品”按钮,控制台打印信息如图所示。

获取到了Id为1的商品
获取到了Id为2的商品
获取到了Id为3的商品

        从图中所示的打印信息可以看出,程序正确打印出了提交的商品信息。这表明getProducts()方法获取到了客户端请求中的参数proIds的值,并将请求参数中多个同名的proIds参数值全部存储在了getProducts()方法的proIds形参中,实现了集合的数据绑定。

二、@RequestParam注解解决集合绑定的异常问题

        如果getProducts( )方法中不使用@RequestParam注解,Spring MVC默认将List作为对象处理,赋值前先创建List对象,然后将proIds作为List对象的属性进行处理。由于List是接口,无法创建对象,所以会出现无法找到构造方法异常。如果将类型更改为可创建对象的类型,如ArrayList,可以创建ArrayList对象,但ArrayList对象依旧没有proIds属性,因此无法正常绑定,数据为空。此时需要告知Spring MVC的处理器proIds是一组数据, 而不是一个单一数据。通过@RequestParam注解,将参数打包成参数数组或集合后,Spring MVC才能识别该数据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据。