SpringMvc @SessionAttributes与@SessionAttribute及@ModelAttribute

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

1.@SessionAttributes(加在类上面的注解)

将模型中的某个属性值暂存到HttpSession中,以便多个请求之间可以共享这个属性

value:通过指定key将model中的数据存在session域中

types:将model中指定类型的额数据存在session域中

@Controller
//把model当中key为name的存在了session当中
@SessionAttributes("name")
public class MyController {
    @RequestMapping("/testsession")
    public String etstsession(Model model){
        //把数据存到了request域
        model.addAttribute("name","dell");
        return "/result2.jsp";
    }
}
@Controller
//把model当中String类型的属性都存在了session当中
@SessionAttributes(types=String.class)
public class MyController {
    @RequestMapping("/testsession")
    public String etstsession(Model model){
        //把数据存到了request域
        model.addAttribute("name","dell");
        return "/result2.jsp";
    }
}

 2.@SessionAttribute

使用SessionAttribute来访问预先存在的全局会话属性,注解标记在处理器映射方法上来获取参数

假设提前在session域中存了key值为name的键值对             如若没有,服务器会报错

 @RequestMapping("testsession2")
    public String testsession2(@SessionAttribute("name") String name){
        System.out.println(name);
        return "/result2.jsp";
    }

2.@ModelAttribute

@modelAttribute修饰参数

可以指定一个类的实体存到model中的key值,如果不指定,则默认是将类名的第一个字母小写作为key值

@RequestMapping("/testModelAttribute")
    //会自动的把对应的模型存放在model当中
    public String testModelAttribute(@ModelAttribute("GOODS") Goods mygoods, Model model){
        System.out.println(mygoods);
        System.out.println(model.asMap());
        return "/result3.jsp";
    }
/*
*Goods{name='aa', price=20}
*{GOODS=Goods{name='aa', price=20}
*/

@modelAttribute修饰方法

被@modelAttribute标记的方法会在requestmapping对应映射方法之前被执行,

并且会把映射方法中的model先传到该方法中供其先设置部分参数   

如果有key值相同,则会被覆盖

@ModelAttribute
    public void testModelAttribute(Model model){
        System.out.println("ModelAttribute被执行");
        model.addAttribute("sex","male");
    }

    @RequestMapping("/testModelAttribute")
    //会自动的把对应的模型存放在model当中
    public String testModelAttribute(@ModelAttribute("GOODS") Goods mygoods, Model model){
        System.out.println(mygoods);
        System.out.println(model.asMap());
        return "/result3.jsp";
    }
/*
*ModelAttribute被执行
*Goods{name='aaa', price=20}
*{sex=male, GOODS=Goods{name='aaa', price=20},
*/
 @ModelAttribute
    public void testModelAttribute(Model model){
        System.out.println("ModelAttribute被执行");
        model.addAttribute("sex","male");
    }

    @RequestMapping("/testModelAttribute")
    //会自动的把对应的模型存放在model当中
    public String testModelAttribute(@ModelAttribute("GOODS") Goods mygoods, Model model){
        model.addAttribute("sex","female");
        System.out.println(mygoods);
        System.out.println(model.asMap());
        return "/result3.jsp";
    }
//key为sex的键值对属性male被覆盖为female
/*
*ModelAttribute被执行
*Goods{name='aaa', price=20}
*{sex=female, GOODS=Goods{name='aaa', price=20}
*/

注意点:在往被@ModelAttribute标记的方法中传入的model时,session中的数据也会被先传入到model中

猜你喜欢

转载自blog.csdn.net/weixin_43014205/article/details/85340181