@ModelAttribute和@sessionattributes介绍

@ModelAttribute

@ModelAttribute使用大致有有两种,一种是是直接标记在方法上,一种是标记在方法的参数中,两种标记方法产生的效果也各不相同。

直接标记在方法上

当同一个controller(控制器)中有任意一个方法被@ModelAttribute注解标记,页面请求只要进入这个控制器,不管请求那个方法,均会先执行被@ModelAttribute标记的方法,所以我们可以用@ModelAttribute注解的方法做一些初始化操作。当同一个controller中有多个方法被@ModelAttribute注解标记,所有被@ModelAttribute标记的方法均会被执行,按先后顺序执行,然后再进入请求的方法。

标记在方法的参数中

Spring MVC中,将方法入参 对象 添加到模型中,仅需要在对应的入参前使用 (1)@ModelAttribute注解即可。(2)当然也可以不使用@ModelAttribute,直接在Model入参,并将对象放入.

@RequestMapping(value="/useradd",method=RequestMethod.GET)
	public String addUser(@ModelAttribute("user") User user){
	//@ModelAttribute("user")表示将user放入Model当中
		return "useradd";
	}

相当于:

@RequestMapping(value="/useradd",method=RequestMethod.GET)
	public String addUser(User user,Model model){
		model.addAttribute("user", user);
		return "useradd";
	}

@sessionAttributes

@sessionattributes注解应用到Controller上面,可以将Model中的属性同步到session当中。

@Controller
@RequestMapping("/Demo.do")
@SessionAttributes(value={"attr1","attr2"})
public class Demo {
    
    @RequestMapping(params="method=index")
    public ModelAndView index() {
        ModelAndView mav = new ModelAndView("index.jsp");
        mav.addObject("attr1", "attr1Value");
        mav.addObject("attr2", "attr2Value");
        return mav;
    }
    
    @RequestMapping(params="method=index2")
    public ModelAndView index2(@ModelAttribute("attr1")String attr1, @ModelAttribute("attr2")String attr2) {
        ModelAndView mav = new ModelAndView("success.jsp");
        return mav;
    }
}

index方法返回一个ModelAndView 其中包括视图index.jsp 和 两个键值放入model当中,在没有加入@sessionattributes注解的时候,放入model当中的键值是request级别的。

现在因为在Controller上面标记了@SessionAttributes(value={“attr1”,“attr2”}) 那么model中的attr1,attr2会同步到session中,这样当你访问index 然后在去访问index2的时候也会获取这俩个属性的值。

当需要清除session当中的值得时候,我们只需要在controller的方法中传入一个SessionStatus的类型对象 通过调用setComplete方法就可以清除了。

@RequestMapping(params="method=index3")
  public ModelAndView index4(SessionStatus status) {
  ModelAndView mav = new ModelAndView("success.jsp");
  status.setComplete();
  return mav;
}

版权声明:本文为weixin_45496051原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。