java.lang.IllegalStateException:BindingResult和bean名称’category’的普通目标对象都不能作为请求属性使用

我在网上查看了几乎所有与此问题相关的答案,但无法在我的代码中找出问题所在。

这是我的JSP页面。

当我删除

 

它工作正常。 我可以与我的控制器通信。 所以问题与这条线有关。

 @Controller public class SearchCategory { @Autowired private CategoryService categoryService; @RequestMapping(value = "/search_category", method = RequestMethod.POST) public @ResponseBody String searchCategoryFromDatabase(@ModelAttribute("category") Category category, BindingResult result){ return "something"; } } 

这是我的web.xml

     appServlet org.springframework.web.servlet.DispatcherServlet  contextConfigLocation /WEB-INF/servlet-context.xml  1   appServlet /    contextConfigLocation /WEB-INF/applicationContext.xml   hibernateFilter org.springframework.orm.hibernate4.support.OpenSessionInViewFilter   hibernateFilter /*   org.springframework.web.context.ContextLoaderListener   

这是我的servlet-context.xml

          

还有我的applicationContext.xml

                           classpath:hibernate.cfg.xml    com.XXXX     hibernate.dialect=org.hibernate.dialect.MySQLDialect          

我可能在我的XML文件中做错了。 我是今年spring的新手 – Hibernate员工正在等待你的帮助。 谢谢..

这是抛出的exception

 Stacktrace:] with root cause java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'category' available as request attribute at org.springframework.web.servlet.support.BindStatus.(BindStatus.java:141) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116) at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422) at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142) at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84) at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80) at org.apache.jsp.index_jsp._jspx_meth_form_005finput_005f0(index_jsp.java:208) at org.apache.jsp.index_jsp._jspx_meth_form_005fform_005f0(index_jsp.java:168) at org.apache.jsp.index_jsp._jspService(index_jsp.java:100) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:149) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) 

如果您通过http://localhost:8080/yourapp类的东西进入index.jsp ,我会假设你有一个

这意味着index.jsp生成HTML而不需要Spring进行任何预处理。 你试图渲染这个

     

其中来自Spring的标签库。 首先,请注意您同时使用commandNamemodelAttribute 。 这是多余的。 使用其中一个,而不是两个。 其次,当您指定其中任何一个时,标记实现将查找具有指定名称的HttpServletRequest属性。 在您的情况下, HttpServletRequest属性中没有添加此类属性。 这是因为Servlet容器直接转发到index.jsp

而不是这样做,创建一个新的@Controller处理程序方法,该方法将向模型添加属性并转发到index.jsp视图。

 @RequestMapping(value = "/", method = RequestMethod.GET) public String welcomePage(Model model) { model.addAttribute("category", new Category()); // the Category object is used as a template to generate the form return "index"; } 

你可以摆脱这个

   

此外,将任何mvc配置从applicationContext.xml文件移动到servlet-context.xml文件。 这就是它所属的地方。 这就是原因。

当您的表单输入ID未正确绑定时,通常会发生此错误,这意味着表单标记中使用的名称/ ID与bean不同。

这适合我!

  
Name
Age

调节器

 @RequestMapping(value = "/employee", method = RequestMethod.POST) private ModelAndView addemployee(Employee emp, ModelAndView model, @RequestParam String name, @RequestParam String age) { emp.setAge(age); emp.setName(name); employeeService.persistEmployee(emp); return new ModelAndView("redirect:/employee.do"); }