一、绑定机制
表单提交的数据都是k=v格式的,SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的,要求提交表单的name与参数的名称是相同的。
二、支持的数据类型
1、基本数据类型和字符串类型。
2、实体类型(JavaBean)。
3、集合数据类型(List、map集合等)。
三、使用要求及示例
1、基本数据类型和字符串类型
要求:表单提交的name参数名称必须和控制器中方法的形参名称保持一致,严格区分大小写。
主要代码示例:
<!-- 基本类型示例 -->
<a href="account/findAccount?accountId=0001&accountName=Jack">查询账户</a>
@Controller("accountController")
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/findAccount")
public String findAccount(Integer accountId,String accountName) {
System.out.println("查询账户:"+accountId+","+accountName);
return "success";
}
}
2、实体类型(JavaBean)
要求:表单提交的name参数名称必须和JavaBean中的属性名称一致;如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性。
主要代码示例:
/**
* 实体类
*/
public class Account implements Serializable {
private Integer id;
private String name;
private Float money;
private Address address;
//省略 getters and setters
}
public class Address implements Serializable {
private String provinceName;
private String cityName;
//省略 getters and setters
}
<!-- 页面表单 -->
<form action="account/saveAccount" method="post">
账户名称:<input type="text" name="name" ><br/>
账户金额:<input type="text" name="money" ><br/>
账户省份:<input type="text" name="address.provinceName" ><br/>
账户城市:<input type="text" name="address.cityName" ><br/>
<input type="submit" value="保存">
</form>
/**
* 控制器
*/
@Controller("accountController")
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/saveAccount")
public String saveAccount(Integer accountId,String accountName) {
System.out.println("保存账户:"+account);
return "success";
}
}
3、集合数据类型(List、map集合等)
要求:1、集合类型的请求参数必须在POJO中。在表单中请求参数名称要和POJO中集合属性名称相同。
2、给List集合中的元素赋值,使用下标。
3、给Map集合中的元素赋值,使用键值对。
主要代码示例:
/**
* 实体类
*/
public class User implements Serializable {
private String username;
private String password;
private Integer age;
private List<Account> accounts;
private Map<String,Account> accountMap;
//省略 getters and setters
}
<!-- 页面表单 -->
<form action="account/updateAccount" method="post">
用户名称:<input type="text" name="username" ><br/>
用户密码:<input type="password" name="password" ><br/>
用户年龄:<input type="text" name="age" ><br/>
账户1名称:<input type="text" name="accounts[0].name" ><br/>
账户1金额:<input type="text" name="accounts[0].money" ><br/>
账户2名称:<input type="text" name="accounts[1].name" ><br/>
账户2金额:<input type="text" name="accounts[1].money" ><br/>
账户3名称:<input type="text" name="accountMap['one'].name" ><br/>
账户3金额:<input type="text" name="accountMap['one'].money" ><br/>
账户4名称:<input type="text" name="accountMap['two'].name" ><br/>
账户4金额:<input type="text" name="accountMap['two'].money" ><br/>
<input type="submit" value="保存">
</form>
/**
* 控制器
*/
@Controller("accountController")
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/updateAccount")
public String updateAccount(User user) {
System.out.println("更新账户:"+user);
return "success";
}
}