正确使用弹簧形式的方法

时间:2014-09-03 23:47:47

标签: spring-mvc

我正在尝试从html表单切换到spring表单,以便我可以使用消息属性,我认为这是一个非常酷的功能。但是我遇到了错误Http 500:

org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 19

18:             <form:form action="example" method="post" modelAttribute="example" >
19:                 UserName<form:input path="email" />
20:                 Password<form:input path="password" />
21:             </form:form>    


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:465)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
root cause

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'example' available as request attribute

我在论坛中寻找其他主题,但找不到原因。你能告诉我在哪里修理它吗? 这是我的控制器代码:

@RequestMapping(value="/example", method=RequestMethod.POST)
public String example(@ModelAttribute("example") UserAccount aUser, BindingResult result, Model model) {
    model.addAttribute("example", aUser);
    return "";
}

1 个答案:

答案 0 :(得分:0)

首先,忘记你发布的处理程序方法。它完全不涉及这里发生的事情。

其次,错误说明

  

bean名称'example'的BindingResult和普通目标对象都不可用作请求属性

因此,当您的JSP代码

<form:form action="example" method="post" modelAttribute="example" >
    UserName<form:input path="email" />
    Password<form:input path="password" />
</form:form>    

由JSP Servlet呈现,并由Spring处理,不存在名为HttpServletRequest的{​​{1}}属性。这意味着您尚未添加一个。

所以转到控制器(如果不存在,创建它),返回上面JSP的JSP视图名称,并添加example属性或名为HttpServletRequest的模型属性,类型为example。例如

UserAccount

Spring将使用此(命令)对象创建具有相应model.addAttribute("example", new UserAccount()); 字段的HTML <form>