SpringMVC 第六章 模型数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kangkang_style/article/details/85916715

Spring MVC 提供了以下几种途径输出模型数据

1.ModelAndView:
    处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据
    既包含视图信息,也包含模型数据信息。
    ModelAndView中包含两个添加数据模型的方法:
        1.ModelAndView addObject(String attributeName, Object attributeValue)
        2.ModelAndView addAllObject(Map<String,?>modelMap)
    ModelAndView包含两个设置视图的方法:
        1.void setView(View view)
        2.void setViewName(String viewName)

实例:
	@RequestMapping(value="testModelAndView")
	public ModelAndView testModelAndView () {
	    System.out.println("entry in ModelAndView");
	    ModelAndView mv = new ModelAndView();
	    mv.setViewName("success");
	    // ModelAndView中模型数据的值,都是放置到request范围中的
	    mv.addObject("name", "MIKE");
	    return mv;
	}
	success.jsp中:
	    ${requestScope.name}显示输出
	注意事项:
		核心业务方法的返回值为ModelAndView:模型数据,视图
		ModelAndView当中模型数据是放置到请求范围当中的

2.Map及Model:
    入参为org.springframework.ui.Model/org.springframework.ui.ModelMap或java.util.Map时,
    处理方法返回时,Map中的数据会自动添加到模型中。
    具体步骤:
        SpringMVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器
        如果方法的入参为Map或Model类型,SpringMVC会将隐含模型的引用传递给入参。
        在方法体内,可以通过这个入参对象访问到模型中的所有数据,
        也可以向模型中添加新的属性数据
    使用方法:
        Map.put(String , Object)
        Model.addAttribute(String , Object)
        ModelMap.addAttribute(String, Object)

实例:
	Map:
	    @RequestMapping(value="/testMap")
	    public String testMap(Map<String,Object>map) {
		map.put("age", 12);
		return "success";
	    }

	Model:
	    @RequestMapping(value="/testModel")
	    public String testModel(Model model) {
		model.addAttribute("email", "[email protected]");
		return "success";
	}

	ModelMap:
	    @RequestMapping(value="/testModelMap")
	    public String testModelMap(ModelMap modelMap) {
		modelMap.addAttribute("city", "wuhan");
		return "success";
	    }

3.@SessionAttributes:
    将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性。
    @SessionAttributes除可以通过属性名指定需要放到会话中的属性外,还可以通过
    模型属性的对象类型指定哪些模型属性需要放到会话中
        @SessionAttributes(type=User.class)
            会将隐含模型中所有类型为User.class的属性添加到会话中
        @SessionAttributes(value={"user1", "user2"})
        @SessionAttributes(types={User.class, Dept.class})
        @SessionAttributes(value={"user1", "user2"}, types={Dept.class})
    注意事项:    
        1.要求放置的值,必须在模型数据里面(request范围中有限)
        2.复制的方式:
            通过属性的key值完成session的共享数据设置
            value:String[]
            value=["a","b"]
            也可以通过模型数据当中的类型,共享数据的设置

4.@ModelAttribute:
    1.在方法定义上使用@ModelAttribute注解:
        SpringMVC 在调用目标处理方法前,会逐个调用在方法级上标注了@ModelAttribute的方法
        1.1 修饰没有返回值的方法
            执行ModelAttribute修饰方法
            获取的原始数据放置到请求范围中指定key对应的value
            pojo入参会从请求范围当中查找指定key对应的value,找到的话,会将值赋给入参
            前端用户输入的值与入参进行绑定

实例:	
	@ModelAttribute
	public void start (Map<String,Object>map) {
	    // 模拟数据库访问
	    UserInfo info = new UserInfo(101,"Tom","[email protected]","2015-10-12");
	    map.put("abc", info);
	}
	
	@RequestMapping(value="/testModelAttribute")
	public String testModelAttribute(@ModelAttribute(value="abc")UserInfo info) {
	    System.out.println("userInfo:"+ info);
	    return "success";
	}

1.2 修饰有返回值的方法

实例:	
    @ModelAttribute(value="abc")
    public UserInfo start (Map<String,Object>map) {
	// 模拟数据库访问
	UserInfo userInfo = new UserInfo(101,"Tom","[email protected]","2015-10-12");
	return userInfo;
    }
	
    @RequestMapping(value="/testModelAttribute")
    public String testModelAttribute(@ModelAttribute(value="abc")UserInfo info) {
	System.out.println("userInfo:"+ info);
	return "success";
    }

2.在方法的入参前使用@ModelAttribute注解:
        可从隐含对象中获取隐含的模型数据中获取对象
        再将请求参数绑定到对象中,再传入入参
        将方法入参对象添加到模型中

猜你喜欢

转载自blog.csdn.net/kangkang_style/article/details/85916715
今日推荐