2012-07-27 2 views
2

여러 뷰에서 단일 빈의 관리를 처리하는 마법사 형 컨트롤러를 작성했습니다. @SessionAttributes를 사용하여 Bean을 저장하고 SessionStatus.setComplete()를 사용하여 최종 호출에서 세션을 종료합니다. 그러나 사용자가 마법사를 포기하고 응용 프로그램의 다른 부분으로 이동하면 반환 할 때 @ModelAttribute를 다시 작성하도록 Spring에 강제해야합니다. 예를 들어 사용자가 "getCustomerForm"방법을 (즉, http://mysite.com/order)를 발생하게 응용 프로그램에 요청을하고, "commandBean"세션 속성이 이미있다Spring MVC 3.1에서 @ModelAttributes의 강제 초기화

@Controller 
@SessionAttributes("commandBean") 
@RequestMapping(value = "/order") 
public class OrderController 
{ 
    @RequestMapping("/*", method=RequestMethod.GET) 
    public String getCustomerForm(@ModelAttribute("commandBean") Order commandBean) 
    { 
    return "customerForm"; 
    } 

    @RequestMapping("/*", method=RequestMethod.GET) 
    public String saveCustomer(@ModelAttribute("commandBean") Order commandBean, BindingResult result) 
    { 
    [ Save the customer data ]; 
    return "redirect:payment"; 
    } 

    @RequestMapping("/payment", method=RequestMethod.GET) 
    public String getPaymentForm(@ModelAttribute("commandBean") Order commandBean) 
    { 
    return "paymentForm"; 
    } 

    @RequestMapping("/payment", method=RequestMethod.GET) 
    public String savePayment(@ModelAttribute("commandBean") Order commandBean, BindingResult result) 
    { 
    [ Save the payment data ]; 
    return "redirect:confirmation"; 
    } 

    @RequestMapping("/confirmation", method=RequestMethod.GET) 
    public String getConfirmationForm(@ModelAttribute("commandBean") Order commandBean) 
    { 
    return "confirmationForm"; 
    } 

    @RequestMapping("/confirmation", method=RequestMethod.GET) 
    public String saveOrder(@ModelAttribute("commandBean") Order commandBean, BindingResult result, SessionStatus status) 
    { 
    [ Save the payment data ]; 
    status.setComplete(); 
    return "redirect:/order"; 
    } 

    @ModelAttribute("commandBean") 
    public Order getOrder() 
    { 
    return new Order(); 
    } 
} 

경우, "getOrder는"호출되지 않습니다 . 이 상황에서 새 Order 객체가 만들어 졌는지 확인해야합니다. getCustomerForm에서 수동으로 다시 채워야합니까?

생각하십니까? 내가 스스로를 분명히하지 않으면 알려줘. 속성이 세션에서 @SessionAttributes의 일부가 존재하는 경우 @ModelAttribute 방법은 그것을 호출되지 않습니다 말했다 다음과 같은 - 당신이 getCustomerForm에서 수동으로 다시 채울 수있다처럼

답변

0

예, 소리가 난다. 당신이 @ModelAttribute 방법이라고 보장하고 기존 @RequestMapped 방법을 계속 할 수 있도록

대안은 종류에 @ModelAttribute method과 함께하지만, @SessionAttributes없는 유일한 getCustomerForm 방법으로 새 ​​컨트롤러를 정의 할 수 있습니다 기존 컨트롤러에서.