2012-02-14 114 views
0

仅在某些情况下出现此错误。什么我编码是一个登记表,这里是基本的代码:HttpSessionRequiredException:会话属性'registrationForm'必需 - 未在会话中找到

@Controller 
@SessionAttributes("registrationForm") 
@RequestMapping(value = "/registration") 
public class RegistrationController 
{ 
    @Autowired 
    private RegistrationValidator registrationValidator; 

    @RequestMapping(method = RequestMethod.GET) 
    public String setupForm(Model model) throws Exception 
    { 
     return setupForm(model, new RegistrationForm()); 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String submitForm(@ModelAttribute("registrationForm") RegistrationForm registrationForm, 
          Model model, 
          BindingResult result, 
          SessionStatus sessionStatus) throws Exception 
    { 
     registrationValidator.validate(registrationForm, result); 

     if(result.hasErrors()) 
     { 
      return setupForm(model, registrationForm); 
     } 
     else 
     { 
      // Do stuff 

      sessionStatus.setComplete(); 

      return "redirect:success"; 
     } 
    } 

    private String setupForm(Model model, RegistrationForm registrationForm) throws Exception 
    { 
     model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR)); 
     model.addAttribute("registrationForm", registrationForm); 
     return "registration"; 
    } 

形式:

<form:form method="POST" modelAttribute="registrationForm"> 
    ... 
</form:form> 

的很奇怪的问题我有,是,如果我清除会话数据和我直接去/registration,整个注册过程完美。但是,当我调用首先映射到另一个控制器(即主页)的页面时,则会收到标题中指定的错误。

任何人都可以帮助我吗?

谢谢。

+0

并使用其他控制器(即主页)具有相同的会话属性为“registrationForm”? – Nani 2012-02-14 15:48:02

+0

@Nani不,应该吗? – satoshi 2012-02-14 15:51:16

回答

5

添加此解决了这个问题:

@ModelAttribute("registrationForm") 
public RegistrationForm populateRegistrationForm() 
{ 
    return new RegistrationForm(); 
}