SpringMVC_04 数据处理模型 ModeAndView、Map及Model、@SessionAttributes、@ModelAttribute、@SessionAttributes

一、ModeAndView:

目标方法返回值类型可以是ModelAndView类型其中可以包含视图和模型信息。

SpringMVC 会把ModelAndView的model中数据放到request域对象中。

二、Map及Model:

入参为org.springframework.ui.model、org.springframework.ui.ModelMap 
或 java.uti.Map时,在处理方法返回时,Map中的数据会自动添加到模型中。

三、@SessionAttributes:

--此注解只能放在类上

--通过制定属性名放到会话中

--通过模型属性的对象类型指定哪些模型属性需要放到会话中
(实际上使用的是types属性值)

--将模型中的某个属性暂存到HttpSession中,

--以便多个请求之间可以共享这个属性

四、@ModelAttribute:

--方法入参标注该注解后,入参的对象就会放到数据模型中

--用于修改对象时使用

--有@ModelAttribute标记的方法,会在每个目标方法执行之前被SpringMVC调用

--将数据从数据库中取出  赋给对象  修改要修改的对象

运行流程:用户填写表单--------赋给对象-------传入数据库

1. 执行@ModelAttribute注解修饰的方法:
			从数据库中取出对象,把对象放入Map中。
2.SpringMVC从Map中取出User对象,并把表带请求的参数赋给该User对象的属性
3.SpringMVC把上述对象传入目标方法的参数
4.放到map中时的键需要和目标方法入参类型的第一个小写的字符串一致

springMVC确定目标方法POJO类型入参的过程

1.确定一个key:
2.在implicitModel中查找key对应的对象,若存在,在作为入参传入
3.若implicitModel中不存在key对应的对象,则检查当前handler是否使用

四、@SessionAttributes

注解修饰。
若使用了该注解,
且@SessionAttributes注解的value属性值中包含了key,
则会从HttpSession中来获取key所对应的value值。
若存在则直接传入到目标方法的入参中。若不存在则抛出异常。
若Handler没有标识@SessionAttributes注解或@SessionAttributes
注解的value值不包含key
,则会通过反射来创建POJO类型的参数,传入目标方法的参数 
SpringMVC会把key和value保存到implicitModel中进而会保存到request中

实例代码:

@SessionAttributes(value={"user"}, types={String.class})
@RequestMapping("/springmvc")
@Controller
public class springMVCTest {
	private static final String SUCCESS = "success";
	
	@RequestMapping("/testViewAndViewResolver")
	public String testViewAndViewResolver(){
		System.out.println("testViewAndViewResolver");
		return SUCCESS;
	}
	
	@ModelAttribute
	public void getUser(@RequestParam(value="id", required=false) Integer id,
			Map<String, Object> map){
		if(id != null){
			//模拟从数据库中获取对象
			User user = new User(001, "sunqg", "123456", "sunqg@163.com", 12);
			System.out.println("从数据库中获取一个对象: " + user);
			
			map.put("user", user);
		}
	}
	
	@RequestMapping("/testModelAttribute")
	public String testModelAttribute(User user){
		System.out.println("修改: " + user);
		return SUCCESS;
	}
	
	@RequestMapping("/testSessionAttributs")
	public String testSessionAttributes(Map<String, Object> map){
		User user = new User("Tom", "123456", "tom@163.com", 15);
		
		map.put("user", user);
		map.put("school", "sycu");
		
		return SUCCESS;
	}
	
	@RequestMapping("/testMap")
	public String testMap(Map<String, Object> map){
		map.put("names", Arrays.asList("Tom", "Jerry", "Mike"));
		return SUCCESS;
	}
本人初学
欢迎指点
有问题可私信或评论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值