是否必须以spring形式使用commandName属性?

时间:2015-04-09 17:58:00

标签: java spring-mvc

这是我的表格

<form:form name="UserRegistrationForm" id="UserRegistrationForm" method="post" action="user" commandName="userData" autocomplete="off">
.....
</form:form>

这是我的控制器

@RequestMapping(value = "/user", method = RequestMethod.GET)
    public String showUserPage(Model model, HttpServletRequest request,
            HttpSession session, Locale locale) throws HCException {
model.addAttribute("userData",userData);
        return "home/userHome";
    }

我得到以下错误

Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141) ~[spring-webmvc-3.1.2.RELEASE.jar:3.1.2.RELEASE]

如果我添加commandName="userData&#34;表单标签中的属性,它工作正常

是否必须以spring形式使用commandName属性?

根据我的理解,只有开发人员在控制器中的modelAttribute(比如userData)下设置了某些内容时才需要commandName属性。 并且想要在没有前缀userData的情况下访问其属性。例如,如果userData包含电子邮件字段,开发人员可以直接在路径if commandName = "userData" is specified in form tag下使用电子邮件 否则他可以使用EL即$ userData.email。那么为什么spring期待commandName属性呢?

2 个答案:

答案 0 :(得分:0)

没有

它有一个默认值,即“command”。

如果在您的控制器中,您可以设置“主”表单属性的名称:

model.addAttribute("command", foo); 

但是我认为最好明确地命名模型属性和表单属性,反映对象的类型,在你的情况下是“userData”。

答案 1 :(得分:0)

您需要使用commandName弹出表单标记,否则您将获得以下异常。当您为html元素使用spring标记时会发生这种情况 IllegalStateException:BindingResult和普通目标对象“command”都不能作为请求参数...

另见Spring 3 MVC: is it possible to have a spring form without 'commandName' binding?