Spring MVC - différence entre HttpSession.setAttribute et le modèle.addObject

Je suis en train d'apprendre Spring MVC récemment. Il semble que je ne comprenais pas bien les fonctionnalités de @ModelAttribute d'annotation et de HttpSession.

@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"));
}

ShoppingCart et comptent sont les attributs de session.

Le problème est dans la deleteFromCart méthode. Je reçois le compter de session, réaffecter et remplacer en session. Mais je ne peux pas le voir la mise à jour de la valeur de compter sur jsp. Toutefois, la mise à jour shoppingCart objet peut être vu à jour, bien que je ne remplace pas l'objet de session (puisque l'objet est le même objet qui est déjà en cours).

Mais pourquoi est le nombre de pas mis à jour, bien que je la remplacer par de la session.setAttribute?
Quand j'ai ajouter le nouveau compte de l'objet du modèle (le modèle.addObject("count", count)) alors je peux voir la mise à jour de la valeur de comptage. Mais pourquoi ne pas en session.setAttribute donner le même résultat?

InformationsquelleAutor akcasoy | 2013-05-05