@ModelAttribute注解

  1. 需求:假设有一个user对象,通过表单提交后,修改时不能修改密码可以修改值,达到部分数据修改的目的
  2. 代码清单 前台页面
	<!--
		模拟修改操作: 
			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;
	}