के बीच अंतर मैं हाल ही में स्प्रिंग एमवीसी सीखने की कोशिश कर रहा हूं। ऐसा लगता है कि मैं @ModelAttribute एनोटेशन और HttpSession की कार्यक्षमताओं को अच्छी तरह से समझ में नहीं आया।स्प्रिंग एमवीसी - HttpSession.setAttribute और model.addObject
@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 + 1;
}
return new ModelAndView(new RedirectView("showAllItems")).addObject("count", count);
}
@RequestMapping(value="/deleteFromCart/{itemId}", method=RequestMethod.GET)
public ModelAndView deleteFromCart(@PathVariable("itemId") Item item,
HttpSession session) {
List<Item> list = (List<Item>) session.getAttribute("shoppingCart");
list.remove(item);
//session.setAttribute("shoppingCart", list);
Integer count = (Integer) session.getAttribute("count");
count = count - 1;
session.setAttribute("count", count);
return new ModelAndView(new RedirectView("showAllItems"));
}
शॉपिंगकार्ट और गिनती सत्र विशेषताएँ हैं।
समस्या हटाएं FromCart विधि में है। मुझे सत्र से पुन: असाइन करें सत्र में ओवरराइट करें। लेकिन मैं जेएसपी पर अद्यतन मूल्य देख नहीं सकता। हालांकि, अद्यतन शॉपिंग कार्ट ऑब्जेक्ट को अद्यतन किया जा सकता है, हालांकि मैं सत्र ऑब्जेक्ट को ओवरराइट नहीं करता (क्योंकि ऑब्जेक्ट वही ऑब्जेक्ट है जो पहले से ही सत्र में है)।
लेकिन गिनती क्यों अपडेट नहीं की गई है, हालांकि मैं session.setAttribute के साथ इसे ओवरराइट करता हूं? जब मैं मॉडल पर नया गिनती ऑब्जेक्ट जोड़ता हूं (model.addObject ("गिनती", गिनती)) तो मैं गिनती के अद्यतन मूल्य को देख सकता हूं। लेकिन session.setAttribute क्यों नतीजा देता है?
तो मूल रूप से; एक नियंत्रक विधि लागू करने से पहले, सत्र मॉडल अद्यतन करता है। विधि के बाद, मॉडल सत्र अद्यतन करता है। तो एकमात्र पल, जब सत्र और मॉडल दोनों में एक ही विशेषता है, तो नियंत्रक विधि में अलग-अलग मान हो सकते हैं। आपका बहुत बहुत धन्यवाद। – akcasoy