spring mvc session注解用法
顾名思义SessionAttributes就是保存session的,SessionAttributes使用方法很简单,@SessionAttributes 允许指定多个属性。你可以通过字符串数组的方式指定多个属性,如 @SessionAttributes({“attr1”,”attr2”})。此外,@SessionAttributes 还可以通过属性类型指定要 session 化的 ModelMap 属性,如 @SessionAttributes(types = User.class),当然也可以指定多个类,如 @SessionAttributes(types = {User.class,Dept.class}),还可以联合使用属性名和属性类型指定:@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})。
以下例子使用:@SessionAttribute必须配合@ModelAttribute一起使用。
1. SessionAttributes 的作用
?1 2 3 4 5 6 7 |
一般而言ModelAndView中的属性作用域都是request级别,即本次请求结束,属性也随之销毁。
如果想要实现多个请求共享其某个属性,需将其保存至session
@SessionAttributes 能自动捕获到当前controller中ModelAndView的指定属性,并转存为session
@SessionAttributes ({ "a" , "b" }) 保存多个session
|
2. 通过使用 @SessionAttributes("user") 快速得到user
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping ( "/info" )
@SessionAttributes ( "user" ) //要在方法中直接注解user必须要这一步
public class InfoController {
private Logger logger = LoggerFactory.getLogger(InfoController. class );
@RequestMapping ( "" )
public ModelAndView view( @ModelAttribute User user,) {
ModelAndView modelView = new ModelAndView( "/info/view" );
logger.info(user.toString());
return modelView;
}
}
|
@SessionAttributes
说明:
Spring允许我们有选择地指定 ModelMap中的哪些属性需要转存到 session中,以便下一个请求属对应的 ModelMap的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes注解来实现的。@SessionAttributes只能声明在类上,而不能声明在方法上。
例如:
@SessionAttributes("currUser") //将ModelMap中属性名为currUser的属性
@SessionAttributes({"attr1","attr2"})
@SessionAttributes(types = User.class)
@SessionAttributes(types = {User.class,Dept.class})
@SessionAttributes(types ={User.class,Dept.class},value={"attr1","attr2"})
实例:
----------------------------------------------------------------------------------------------------------------------
2.11 @ModelAttribute
这个注解可以跟@SessionAttributes配合在一起用。可以将ModelMap中属性的值通过该注解自动赋给指定变量。
示例代码如下:
[java] view plaincopy
- import javax.annotation.Resource;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.ModelMap;
- import org.springframework.web.bind.annotation.ModelAttribute;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.SessionAttributes;
- @Controller
- @RequestMapping("/user.do")
- @SessionAttributes({"u","a"})
- public class UserController {
- @RequestMapping(params="method=reg4")
- public String reg4(ModelMap map) {
- System.out.println("HelloController.handleRequest()");
- map.addAttribute("u","kobe");
- return "index";
- }
- @RequestMapping(params="method=reg5")
- //将属性u的值赋给形参uname
- public String reg5(@ModelAttribute("u")String uname,ModelMap map) {
- System.out.println("HelloController.handleRequest()");
- System.out.println(uname);
- return "index";
- }
- }
1: @Controller
2: @SessionAttributes("user")
3: public class testSessionAttribute {
4:
5: private Logger logger = LoggerFactory.getLogger(testSessionAttribute.class);
6:
7: @RequestMapping("test")
8: public String test(ModelMap map){
9: UserBean userBean = new UserBean();
10: userBean.setId(1);
11: userBean.setUsername("EdwardLau");
12: userBean.setPassword("Hello World !");
13: map.put("user", userBean);
14: return "sessionattribute";
15: }
16:
17:
18: @RequestMapping("test1")
19: public String test(@ModelAttribute("user") UserBean userBean){
20: logger.debug("test1 方法调用----------");
21: logger.debug(userBean.getId()+":"+userBean.getPassword()+":"+userBean.getUsername());
22: logger.debug("test1 方法调用结束----------");
23: return "users";
24: }
25:
26: }
- 上一篇:没有了
- 下一篇:没有了