1. 程式人生 > >spring mvc session註解用法

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

    示例程式碼如下:

  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. publicclass UserController  {  
  11.     @RequestMapping(params="method=reg4")  
  12.     public String reg4(ModelMap map) {  
  13.        System.out.println("HelloController.handleRequest()");  
  14.        map.addAttribute("u","kobe");  
  15.        return"index";  
  16.     }  
  17.     @RequestMapping(params="method=reg5")  
  18. //將屬性u的值賦給形參uname
  19. public String reg5(@ModelAttribute("u")String uname,ModelMap map) {  
  20.        System.out.println("HelloController.handleRequest()");  
  21.        System.out.println(uname);  
  22.        return"index";  
  23.     }  
  24. }  
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:  }