2013-05-04 4 views
3

최근 스프링 MVC를 배우려고합니다. @SessionAttributes 및 @ModelAttribute 주석의 기능을 잘 이해하지 못하는 것 같습니다.ModelAttribute 사용을 사용하는 Spring MVC SessionAttributes

@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입니다. 메소드 본문에서 선택된 항목이 list에 추가되고 count는 2가됩니다. jsp가 다시 표시됩니다.

문제는 jsp가 목록 shoppingCart가 이제 비어 있지 않음을 알 수 있습니다. 하지만 그 수는 여전히 0입니다. 바구니에 항목을 추가하면 jsp에서 shoppingCart가 항목으로 채워지지만 count 값은 항상 0입니다.

실제로 shoppingCart와 count 사이에는 차이가 없습니다 개체 .. 나는 왜 이런 식으로 행동하는지 알지 못한다. 먼저 카운트 유형이 원시 int인지 의심하고 Integer typ로 변경했지만 여전히 문제가 해결되지 않았습니다.

답변

1

변경count (실제로는 할 수 없음), 사용자가 할당합니다. 따라서 모델은 여전히 ​​이전 값을 가리 킵니다. 새 값을 수동으로 추가해야합니다. 어쨌든 warenkorb.size를 사용할 수 있는지

myModelAndView.add("count", count); 

그러나

count로 귀찮게?

+0

모델에 warenkorb 객체를 다시 추가하지 마십시오. 그러나 그것은 작동합니까? 그 차이점은 무엇입니까? (BTW는 기능에 관한 것이 아닙니다. 나는 배우려고 다른 것을 시도하고있었습니다. 물론 warenkorb.size도 작동합니다.) – akcasoy

+0

이것을 의미합니까? warenkorb.add (item) 세션의 객체를 변경하지 않습니다. 그냥 개체의 속성을 조작합니다. 그러나 세션에서 여전히 동일한 객체가 있습니다.이 때문에 우리는 모델에 warenkorb를 다시 추가하지 않아도됩니다. 하지만 count = count + 2는 정수형 개체를 변경합니다. 그래서 새로운 객체가 세션에 추가되어야합니까? – akcasoy

+0

@Cimbom 당신이 가지고있는 것처럼 들리네 :) – zeroflagL

관련 문제