当前位置 : 主页 > 编程语言 > c++ >

SpringMVC的注解(6)

来源:互联网 收集:自由互联 发布时间:2021-07-03
被@ModelAttribute注解修饰的方法,会在每个目标方法调用之前被SpringMVC调用 /* * 被@ModelAttribute注解修饰的方法,会在每个目标方法调用之前被SpringMVC调用 */@ModelAttributepublic void getUser(@Req
被@ModelAttribute注解修饰的方法,会在每个目标方法调用之前被SpringMVC调用
/*
	 * 被@ModelAttribute注解修饰的方法,会在每个目标方法调用之前被SpringMVC调用
	 */
	@ModelAttribute
	public void getUser(@RequestParam(value="id",required=false)Integer id,Map
 
   map) {
		if(id != null) {
			/*
			 * 这里本意是从数据库中获取对象属性然后封装成对象
			 * 但是模拟省去,直接new
			 */
			Student stu=new Student(1, "zsl", "sddas", "zsl@yeah.net");
			System.out.println("从数据库中获取该对象="+stu);
			map.put("student", stu);		
		}
	}
 
@ModelAttribute注解运行流程
/**
	 * 运行流程
	 * 1. 运行@ModelAttribute注解修饰的方法,从数据库中取出数据,并将该数据封装成对象放入map中,value为"stu"
	 * 2. SpringMVC从map中取出对象stu,把表单的请求参数附给对象对应的参数
	 * 3. SpringMVC把该对象传入目标方法的参数
	 * 
	 * 注意: map中的键需与目标方法的入参名一致
	 * 
	 * SpringMVC确定目标方法POJO类型入参的过程
	 * 1. 确定一个 key
	 * 1). 若目标方法的 POJO 类型参数没有使用@ModelAttribute注解修饰,则 key 为POJO类型的第一个字母小写的字符串
	 * 2). 若使用了@ModelAttribute注解修饰,则 key 为@ModelAttribute注解的 value 值
	 * 2.在 implicitModel 中查询有 key 对应的对象,则作为入参传入
	 * 1).若在@ModelAttribute标记的方法中在 Map 中保存过,且 key 和1中对应的 key 一致,则会获取到
	 * 3.若 implicitModel 中查询不到 key 对应的对象,则检查当前 Handler 是否使用@SessionAttributes注解修饰,
	 * 若使用了该注解,且@SessionAttributes注解的 value 属性值中包含了 key,则会从 sessionScope 中获取 key 
	 * 所对应的 value 值,若存在将传入方法入参,若不存在,则抛出异常。
	 * 4.若 Handler 没有标识@SessionAttributes注解或@SessionAttributes注解的value属性值中不包含 key 值,
	 * 会通过反射来创建对应的 POJO 类型的对象,传入目标方法作为入参。
	 * 5.SpringMVC会将 key 和 POJO 类型的对象保存到 implicitModel 中,进而保存到 requestScope 中。
	 */
	@RequestMapping("/testModelAttribute")
	public String testModelAttribute(Student stu) {
		System.out.println("修改后的User="+stu);
		return success;
	}
index1.jsp请求页面(包含了testModelAttribute,testModelAndView,testRequestParam等测试案例的请求)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




 
Insert title here



	
 
username:
email:

Test ModelAndView

Test Map
Test SessionAttributes
Test testView =
网友评论