HttpSessionRequiredException:需要会话属性'registrationForm' - 在会话中找不到

sat*_*shi 0 forms session spring spring-mvc

我只在某些情况下得到此错误.我正在编码的是注册表,这里是基本代码:

@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";
    }
Run Code Online (Sandbox Code Playgroud)

表格:

<form:form method="POST" modelAttribute="registrationForm">
    ...
</form:form>
Run Code Online (Sandbox Code Playgroud)

我遇到的一个非常奇怪的问题是,如果我清除会话数据并直接进入/registration,整个注册过程就完美无缺.但是当我调用首先在另一个控制器中映射的页面(即主页)时,我得到标题中指定的错误.

谁能帮我?

谢谢.

sat*_*shi 5

添加这个解决了这个问题:

@ModelAttribute("registrationForm")
public RegistrationForm populateRegistrationForm()
{
    return new RegistrationForm();
}
Run Code Online (Sandbox Code Playgroud)