一、数组绑定的使用场景
在实际开发中,可能会遇到客户端请求需要传递多个同名参数到服务器端的情况,这种情况采用前面讲解的简单数据绑定的方式显然是不合适的。此时,可以使用数组来接收客户端的请求参数,完成数据绑定。
接下来通过一个批量提交商品的案例来演示数组的数据绑定,具体实现步骤如下所示。
1、创建一个商品类Product,用于封装商品信息。Product类的具体代码如下所示。
public class Product {private String proId; //商品idprivate String proName; //商品名称public String getProId() {return proId;}public void setProId(String proId) {this.proId = proId;}public String getProName() {return proName;}public void setProName(String proName) {this.proName = proName;}
}
2、创建一个提交商品页面products.jsp,在products.jsp中创建一个展示商品列表的表单,表单提交时向服务器端发送商品列表的所有id。products.jsp的具体代码如下所示。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head><title>提交商品</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/getProducts"method="post"><table width="220px" border="1"><tr><td>选择</td><td>商品名称</td></tr><tr><td><input name="proIds" value="1" type="checkbox"></td><td>Java基础教程</td></tr><tr><td><input name="proIds" value="2" type="checkbox"></td><td>JavaWeb案例</td></tr><tr><td><input name="proIds" value="3" type="checkbox"></td><td>SSM框架实战</td></tr></table><input type="submit" value="提交商品"/>
</form>
</body>
</html>
3、创建一个商品处理器类ProductController,在ProductController类中定义getProducts() 方法,用于接收表单提交的商品id。ProductController类的具体代码如下所示。
@Controller
public class ProductController {// 获取商品列表@RequestMapping("/getProducts")public void getProducts(String[] proIds) {for (String proId : proIds) {System.out.println("获取到了Id为"+proId+"的商品"); }}
}
4、启动chapter12项目,在浏览器中访问提交商品页面products.jsp,访问地址为http://localhost:8080/chapter12/products.jsp。
5、勾选products.jsp显示效果图中所示的全部复选框,然后单击“提交商品”按钮,控制台打印信息如下图所示。
获取到了Id为1的商品
获取到了Id为2的商品
获取到了Id为3的商品
从图中所示的打印信息可以看出,程序打印出了提交的商品,这表明getProducts()方法获取到了客户端请求中的参数proIds的值,并将请求参数中多个同名的proIds参数值全部存储在了getProducts()方法的proIds形参中,实现了数组的数据绑定。