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
示例程式碼如下:
- 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"})
- publicclass 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: }