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"})

  实例:

    spring mvc session注解用法_第1张图片

       ----------------------------------------------------------------------------------------------------------------------

  2.11  @ModelAttribute

    这个注解可以跟@SessionAttributes配合在一起用。可以将ModelMap中属性的值通过该注解自动赋给指定变量。

    示例代码如下:

[java]  view plain copy
  1. import javax.annotation.Resource;  
  2. import org.springframework.stereotype.Controller;  
  3. import org.springframework.ui.ModelMap;  
  4. import org.springframework.web.bind.annotation.ModelAttribute;  
  5. import org.springframework.web.bind.annotation.RequestMapping;  
  6. import org.springframework.web.bind.annotation.SessionAttributes;  
  7. @Controller  
  8. @RequestMapping("/user.do")  
  9. @SessionAttributes({"u","a"})   
  10. public class UserController  {  
  11.      
  12.     @RequestMapping(params="method=reg4")  
  13.     public String reg4(ModelMap map) {  
  14.        System.out.println("HelloController.handleRequest()");  
  15.        map.addAttribute("u","kobe");  
  16.        return "index";  
  17.     }  
  18.      
  19.     @RequestMapping(params="method=reg5")  
  20. //将属性u的值赋给形参uname  
  21. public String reg5(@ModelAttribute("u")String uname,ModelMap map) {  
  22.        System.out.println("HelloController.handleRequest()");  
  23.        System.out.println(uname);  
  24.        return "index";  
  25.     }  
  26.      
  27. }  
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:  }

你可能感兴趣的:(spring,session,springMVC,session注解用法)