我正在尝试从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 "";
}
答案 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>
。