SpringMvc @SessionAttributes與@SessionAttribute及@ModelAttribute
阿新 • • 發佈:2019-01-02
[email protected](加在類上面的註解)
將模型中的某個屬性值暫存到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";
}
}
[email protected]
使用SessionAttribute來訪問預先存在的全域性會話屬性,註解標記在處理器對映方法上來獲取引數
假設提前在session域中存了key值為name的鍵值對 如若沒有,伺服器會報錯
@RequestMapping("testsession2") public String testsession2(@SessionAttribute("name") String name){ System.out.println(name); return "/result2.jsp"; }
[email protected]
@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中