`

@SessionAttributes与ModelAttribute

阅读更多

 

     @ModelAttribute

  •  1.@ModelAttribute注释在方法上
  •       1.1 @ModelAttribute加再void方法上
@ModelAttribute
	public void setCommonData(@RequestParam String param,Model model){
		model.addAttribute("message", param);
	}
	@RequestMapping(value="/hello")
	public String hello(){
		
		return "attributes";
	}

 在执行/hello所在Controller中的方法之前会先执行setCommonData方法,并且会将请求参数/hello?param=hello解析到message中。这个用法比较适合用于设置公共数据。

     1.2@ModelAttribute加在返回具体对象的方法上

@ModelAttribute
	public User fetchUser(){
		
		return new User();
	}

 这时,虽然model的属性名没有直接指定,但是默认根据返回的对象类型隐式给出。如上,返回为User对象,则model的属性名为user,对应属性对象为new User();

   1.3 上面两种情况的组合使用方法

@ModelAttribute("message")
	public String setCommonData(@RequestParam String param,Model model){
		//model.addAttribute("message", param);
		return param;
	}
	@RequestMapping(value="/hello")
	public String hello(){
		
		return "attributes";
	}

    1.4 @RequestMapping与@ModelAttribute一起加在方法上

    

        @RequestMapping(value="/attributes")
	@ModelAttribute("message")
	public String attributes(){
		
		return "helloattribute";				
	}

   这时,返回值就不是一个View名称了 而是model的属性值。视图名称将会根据/attributes生成

  •  2.@ModelAttribute注释在属性值上
  •    2.1 @ModelAttribute注释在一个方法的参数上
@ModelAttribute("user")
	public User setCommonData(@RequestParam String param,Model model){
		return new User("Rose","123",23);
	}
        @RequestMapping(value="/onParam")
	public String onParam(@ModelAttribute("user") User user){
		user.setUsername("Tom");
		return "attributes";
	}

 user可以从setCommonData中获取 也可以通过url里的参数获取(此时需要user具有无参构造器)

此时,如果在Controller类上有@SessionAttributes("user")

则user的scope为session否则其scope为request。

默认情况下,ModelMap中的属性的scope是request级别的。也即,一个request请求结束,ModelMap中的属性将会被销毁。如果希望将ModelMap中的属性在多个请求中共享,我们需要使用@SessonAttributes注解来完成。

@SessionAttributes

使用方法:

@Controller
@RequestMapping(value="/attributes")
@SessionAttributes("user")//将user对象透明地加入到Session中
public class Attributes {

 其实,

@SessionAttributes允许指定多个属性。如@SessionAttributes({"attr1","attr2"})

@SessionAttributes允许通过属性类型指定要Session化的ModelMap属性。如@SessionAttributes(types=User.class)也可指定多个@SessionAttributes(types={User.class,Company.class})

也可以联合属性名和属性类型来指定@SessionAttributes(types={User.class,Company.class},value={"attr1","attr2"})

只要我们不调用SessionStatus的setComplete方法,这些对象会一直保存在Session中。

       @RequestMapping(value="/complete")
	public String complete(SessionStatus sessionStatus){
		sessionStatus.setComplete();//清除@SessionAttributes在Session中存储的对象信息
		return "complete";
	}

 

 

 

 

 

 

分享到:
评论

相关推荐

    SpringMVC-4 处理模型数据

    通过ModelAndView、Map与Model、@SessionAttributes和@ModelAttribute注解来处理模型数据;其中,@ModelAttribute是重点,说明其运行流程并进行代码分析,最终给出SpringMVC目标方法的POJO类型参数的入参全过程,并...

    springMVC详解以及注解说明

    • @ModelAttribute • @Cacheable • @CacheFlush • @Resource • @PostConstruct • @PreDestroy • @Repository • @Component (不推荐使用) • @Scope • @SessionAttributes • @InitBinder

    Spring MVC 3.0实战指南.ppt

    访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案... 如何避免@SessionAttributes引发的血案 目录 Spring MVC如何解析视图 视图解析...

    Spring3MVC注解教程.ppt

    访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案... 如何避免@SessionAttributes引发的血案 目录 Spring MVC如何解析视图 ...

    SpringMVC处理模型数据-2.docx

    模型数据类型 ...– @SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性 – @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中。

    sample-springmvc

    样本SpringMVC Spring MVC表单-验证,数据绑定,验证Spring注释-@ RequestParam,@ PathVariable,@ ModelAttribute,@ SessionAttributes Spring安全Spring国际化Spring异常处理Spring基本REST服务用户-hsetpaing...

    SpringMVC示例

    RequestParam 注解、RequestHeader 注解、CookieValue 注解、使用POJO作为参数(属性与页面自动匹配及级联)、使用Servlet原生API作为参数、处理模型数据(ModelAndView、Map、SessionAttributes 注解)、...

    SpringMVC Employee Demo

    本次实践内容包括RequestMapping关键字修饰类和方法(请求方式、请求参数&...与页面自动匹配及级联)、使用Servlet原生API作为参数、处理模型数据(ModelAndView、Map、SessionAttributes注解)、ModelAttribute注解如...

    SSM笔记-处理模型数据

    SSM笔记-处理模型数据 处理模型数据之ModelAndView + 处理模型数据之ModelAttribute + 处理模型数据之 SessionAttributes

    Spring中文帮助文档

    使用@ModelAttribute提供一个从模型到数据的链接 13.12.6. 使用@SessionAttributes指定存储在会话中的属性 13.12.7. 自定义WebDataBinder初始化 13.13. 更多资源 14. 集成视图技术 14.1. 简介 14.2. JSP和...

    Spring API

    使用@ModelAttribute提供一个从模型到数据的链接 13.12.6. 使用@SessionAttributes指定存储在会话中的属性 13.12.7. 自定义WebDataBinder初始化 13.13. 更多资源 14. 集成视图技术 14.1. 简介 14.2. JSP和...

    spring-framework-reference4.1.4

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    spring-framework-reference-4.1.2

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    spring-web-2.5.jar

    org.springframework.web.bind.annotation.SessionAttributes.class org.springframework.web.bind.support.ConfigurableWebBindingInitializer.class org.springframework.web.bind.support....

Global site tag (gtag.js) - Google Analytics