BindingResult和bean名称AFTER重定向都不是普通目标对象

时间:2016-04-09 13:08:40

标签: spring

我有一个这样的表单(在名为add.jsp的页面中):

<form:form action="${pageContext.request.contextPath}/add" method="post" modelAttribute="addForm">
</form:form>

在GET请求中,我填充了modelAttribute:

@RequestMapping(value ="add", method = RequestMethod.GET)
    public ModelAndView add(Map<String, Object> model) {

        model.put("addForm", new AddUserForm());
        return new ModelAndView("add");
    }

当我执行表单提交(POST请求)时,我有以下方法:

@RequestMapping(value ="add", method = RequestMethod.POST)
public ModelAndView add(Map<String, Object> model, @Valid AddUserForm form, Errors errors) {

    if (errors.hasErrors()) {
        //model.put("addForm", new AddUserForm());
        return new ModelAndView("add");
    }
    ....
}

但我收到此错误:Neither BindingResult nor plain target object for bean name 'addForm' available as request attribute

我的解决方法是添加model.put("addForm", new AddUserForm());,我对POST请求发表评论的命令....但是......我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

在这两种情况下,您都返回相同的视图(即“添加”),此视图包含一个带有null的表单,因此模型必须包含一个名为“addForm”的对象。

如果您在POST错误后不想使用新的AddUserForm填充模型,您可能应该:

  • 返回另一个视图(没有“addForm”模型属性)

  • 重复使用相同的“addForm”:modelAttribute="addForm"