我想學習Spring MVC最近。看起來我並沒有很好地理解@SessionAttributes和@ModelAttribute註解的功能。Spring MVC SessionAttributes與ModelAttribute的使用
這是我的控制器的一部分:
@SessionAttributes({"shoppingCart", "count"})
public class ItemController {
@ModelAttribute("shoppingCart")
public List<Item> createShoppingCart() {
return new ArrayList<Item>();
}
@ModelAttribute("count")
public Integer createCount() {
return 0;
}
@RequestMapping(value="/addToCart/{itemId}", method=RequestMethod.GET)
public ModelAndView addToCart(@PathVariable("itemId") Item item,
@ModelAttribute("shoppingCart") List<Item> shoppingCart, @ModelAttribute("count") Integer count) {
if(item != null) {
shoppingCart.add(item);
count = count + 2;
}
return new ModelAndView(new RedirectView("showAllItems"));
}
基本上有一個jsp列出的所有項目。 Wenn用戶爲特定項目點擊「addToCart」,該項目將被添加到shoppingCart列表中。我最好先解釋一下我對這個控制器的理解,然後你可以告訴我我沒有得到什麼。
第一次調用ItemController時,將執行createShoppingCart和createCount方法,並將返回參數保存在名爲「shoppingCart」和「count」的會話中。當用戶調用URL「.../addToCart/1」時,將調用addToCart方法。因爲我需要從會話中獲取方法簽名2值,所以控制器會在會話中查看這些值是否已經存在。是的,他們是..這時shoppingCart是一個空的列表,並且count爲0.在方法體中,所選項目將被添加到列表中,count將爲2.jsp將再次顯示。
問題是,jsp可以看到列表shoppingCart現在不是空的。但計數仍然爲0.當我將商品添加到購物籃時,我可以在jsp上看到shoppingCart中充滿了商品,但count的值始終爲0.
實際上,shoppingCart和count之間沒有任何區別對象..我不明白爲什麼它的行爲是這樣的。我首先懷疑計數類型是原始int,然後我將其更改爲Integer typ,但問題仍未解決。
我不再在model中添加warenkorb對象。但它有效?有什麼不同? (順便說一句,它不是關於功能..我只是嘗試了一些不同的東西學習..當然warenkorb.size作品也 – akcasoy 2013-05-04 10:44:02
你的意思是這樣的:warenkorb.add(item)不改變會話中的對象,它只是操縱對象的屬性。但是在會話中仍然存在相同的對象,因此我們不需要再次將warenkorb添加到模型中。但count = count + 2正在改變對象的整數計數。所以新的對象必須添加到會話中? – akcasoy 2013-05-04 10:47:50
@Cimbom聽起來像你得到它:) – zeroflagL 2013-05-04 11:53:40