版权声明:本文为博主原创文章,未经博主允许不得转载。 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中