这是我的表格
<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属性呢?
答案 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?