여러 뷰에서 단일 빈의 관리를 처리하는 마법사 형 컨트롤러를 작성했습니다. @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
에서 수동으로 다시 채울 수있다처럼