2016-06-06 14 views
0

Ich versuche eine einfache Form mit form Tag im Frühjahr MVC erstellen. Es gibt nur ein Feld namens uname für die Übergabe des Benutzernamens.
Im ganzen Programm verwende ich Java-basierte Anmerkungen und keine XML-Dateien, aber ich bekomme diesen ärgerlichen Fehler und weiß nicht, wie ich ihn beheben kann.Daten Binding Fehler im Frühjahr mvc

SEVERE: Neither BindingResult nor plain target object for bean name 'user' available as request attribute 
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute 
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144) 
    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.Home_jsp._jspx_meth_form_005finput_005f0(Home_jsp.java:213) 
    at org.apache.jsp.Home_jsp._jspx_meth_form_005fform_005f0(Home_jsp.java:177) 
    at org.apache.jsp.Home_jsp._jspService(Home_jsp.java:132) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

Jun 07, 2016 1:56:33 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [jsp] in context with path [/first] threw exception [An exception occurred processing JSP page /Home.jsp at line 14 

11: <body> 
12: <form:form method="post" action="vv" commandName="user"> 
13: Name: 
14: <form:input path="uname"/> 
15: <input type="submit" value="Login"/> 
16: 
17: </form:form> 


Stacktrace:] with root cause 
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute 
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144) 
    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.Home_jsp._jspx_meth_form_005finput_005f0(Home_jsp.java:213) 
    at org.apache.jsp.Home_jsp._jspx_meth_form_005fform_005f0(Home_jsp.java:177) 
    at org.apache.jsp.Home_jsp._jspService(Home_jsp.java:132) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

Home.jsp

%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<form:form method="post" action="vv" commandName="user"> 
Name: 
<form:input path="uname"/> 
<input type="submit" value="Login"/> 

</form:form> 
</body> 
</html> 

-Controller

package one; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
@RequestMapping("vv") 
public class MainC { 

    @RequestMapping(method=RequestMethod.GET) 
    public String pp(ModelMap m) 
    { 
     User u=new User(); 
     m.addAttribute("user",u); 
     return "Home"; 
    } 
    @RequestMapping(method=RequestMethod.POST) 
    public String pp1(@ModelAttribute("user") User user, BindingResult br) 
    { 
     if(user.getUname().length()!=0) 
     return "Success"; 
     else 
      return "Failure"; 

    } 

} 

Konfiguration

package one; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages={"one"}) 
public class Conf { 

    @Bean(name="viewResolver") 
    public InternalResourceViewResolver ii() 
    { 
     InternalResourceViewResolver i=new InternalResourceViewResolver(); 
     i.setPrefix("/"); 
     i.setSuffix(".jsp"); 
     return i; 
    } 

} 

initialiser

package one; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration; 

import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.ContextLoaderListener; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.servlet.DispatcherServlet; 

public class WebInit implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext arg0) throws ServletException { 
     // TODO Auto-generated method stub 

     AnnotationConfigWebApplicationContext cxt=new AnnotationConfigWebApplicationContext(); 
     cxt.register(Conf.class); 
     arg0.addListener(new ContextLoaderListener(cxt)); 
     ServletRegistration.Dynamic srv=arg0.addServlet("HelloWeb", new DispatcherServlet(cxt)); 
     srv.setLoadOnStartup(1); 
     srv.addMapping("/"); 


    } 

} 

Benutzer

package one; 

public class User { 

    private String uname; 


    public void setUname(String uname) { 
     this.uname = uname; 
    } 

    public String getUname() { 
     return uname; 
    } 

} 
+0

Mögliches Duplikat [weder BindingResult noch schlicht Zielobjekt für Bohnennamen als Anforderungsattribut] (http://stackoverflow.com/questions/8781558/neither-bindingresult-nor- plain-target-object-für-bean-name-available-as-request) –

+0

In Ihrer Formulardefinition haben Sie action = "vv", aber in der Controller-Definition haben Sie @RequestMapping ("/ Home.jsp"), denke ich Sie müssen das Anforderungsmapping in vv ändern. – reos

+0

@reos Ich versuchte es auch mit "vv". Aber immer noch denselben Fehler. – Neeraj

Antwort

0

Das Problem war, dass das Verfahren, das das leere Bean-Objekt stellt wurde nie ausgeführt zu werden. Deshalb kam der Fehler: Ein einfaches Zielobjekt für den Bean-Namen 'Benutzer' war nicht verfügbar.

Lösung

Add a new jsp page -index.jsp which will be the home page for your application and in it add just one line in <body> 
<a href=Home>Home Page</a> 

And then in controller class... 
@RequestMapping("/Home") 
public String pp(Model m) 
{ 
User u=new User(); 
m.addAtribute("command",u); 
return "Home"; 
} 


It will solve the issue.