@ModelAttribute注解
- 需求:假设有一个user对象,通过表单提交后,修改时不能修改密码可以修改值,达到部分数据修改的目的
- 代码清单 前台页面
<!--
模拟修改操作:
1. 原始数据为: 1, Tom, 123, tom@zgz.com, 11
2. 密码不能被修改
3. 表单回显, 模拟操作直接在表单填写对应的属性值
-->
<form action="springmvc/testModelAttribute" method="post">
<input type="hidden" name="id" value="1">
username: <input type="text" name="username" value="Tom">
<br />
email: <input type="email" name="email" value="tom@zgz.com">
<br />
age: <input type="text" name="age" value="11">
<br />
<input type="submit" value="Submit">
</form>
<br /><br />
控制器
/**
/**
* 1. 有 @ModelAttribute 注解标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用
* 2. @ModelAttribute 注解也可以用来修饰目标方法 POJO 类型的入参, 其 value 属性值有如下作用:
* 1). SpringMVC 会使用 value 属性值在 implicitModel 中查找对应的对象, 若存在则会直接传入到目标方法的入参中.
* 2). SpringMVC 会以 value 为 key, POJO 类型的对象为 value, 存入到 request 中.
* @param id
* @param map
*/
* @param id
* @param map
*/
@ModelAttribute
public void getUser(@RequestParam(value="id",required=false) Integer id,
Map<String, Object> map){
if(id != null){
//模拟从数据库中取出对象
User user = new User(1, "Tom", "123", "tom@zgz.com", 11);
System.out.println("从数据库中获取一个对象: " + user);
map.put("user", user);
}
}
/**
* 运行流程:
* 1. 执行@ModelAttribute 注解修饰的方法: 从数据库中取出对象, 把对象放到了Map中, 键为: user
* 2. SpringMVC 从 Map 中取出user对象, 并把表单的请求赋给该 User对象的对应属性
* 3. SpringMVC 把上述对象传入目标方法的参数
*
* 注意:
* 在@ModelAttribute 修饰的方法中, 放入到 Map 时的键需要和目标方法入参类型的第一个字母小写的字符串一致!
* @param user
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
System.out.println("修改: " + user);
return SUCCESS;
}