Llegar java.lang.NullPointerException en spring mvc

Estoy tratando de persistir los datos del formulario a la base de datos utilizando MVC de spring y hibernate pero cuando se llama el método save de la sesión de hibernate.getSession.guardar(s) que está regresando a NullPointerException.

Aquí es el código de mi índice.jsp

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Welcome to Spring Web MVC project</title>
</head>

<body>
    <form action="insert.htm">
        <label>  Name:</label><input type="text" name="name"><br>
        <label> Id:</label><input type="text" name="id"><br>
        <input type="submit" value="Enter">
    </form>
</body>
</html>

Y aquí está el web.xml archivo

 <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

Y mi dispatcher-servlet.xml es

<bean class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"  id="sessionFactory">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
    <list>
        <value>com.model.Student</value>
    </list>
</property>
<property name="hibernateProperties">  
<props>
        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    p:driverClassName="oracle.jdbc.driver.OracleDriver"
    p:url="jdbc:oracle:thin:@localhost:1521:Xe"
    p:username="hibernate"
    p:password="hibernate"></bean>
   <bean id="hibernatetransactionManager"             class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"></property>                
   </bean>

y aquí está mi clase de modelo del Estudiante

package com.model;

import javax.persistence.Id;
import javax.persistence.Entity;


 @Entity
  public class Student {
  @Id    
  private int id;
  private String name;

  public int getId() {
    return id;
 }

 public void setId(int id) {
     this.id = id;
 } 

 public String getName() {
     return name;
 }

 public void setName(String name) {
     this.name = name;
 }

  }

Y mi controlador es

@Controller
public class MyController {

@Autowired
    private Dao d;
@RequestMapping(value="/insert.htm",method = RequestMethod.GET)
public ModelAndView insert(HttpServletRequest req,Student s)
{
   String name=req.getParameter("name");
    int id=Integer.parseInt(req.getParameter("id"));
    s.setId(id);
    s.setName(name);
   System.out.println(s.getName());
    d.save(s);
    return new ModelAndView("display","Student",s);

}

Aquí está mi Dao

 @Repository
 public class Dao {
 @Autowired
 private SessionFactory sessionFactory;

 public int save(Student s)
   {

     /*Session s1=sf.openSession();
     s1.beginTransaction();
     int i=(Integer)s1.save(s);
     s1.getTransaction().commit();
     return i;*/
     int i=(Integer)sessionFactory.getCurrentSession().save(s);
     return i;
     }
   }

La Excepción me estoy refiriendo a d.guardar(s) en MyController

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/Spring5]          
threw exception [Request processing failed; nested exception
at com.controller.MyController.insert(MyController.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at s   un.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at  org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(Ha ndlerMethodInvoker.java:176)
    at  org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
    at  org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    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.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.jav a: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:472)
    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:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at  org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    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)

Estoy principiantes a spring mvc por favor que me ayude .
estoy recibiendo una Excepción mientras se llama a insertar he usado @Autowired también…

  • Que la línea es la línea 36 en MyController?
  • d.guardar(s) en la clase de controlador que se MyController
  • Usted tiene SessionFactory de referencia denominado como sessionFactory pero usted está usando sf para llamar openSession() ?….¿Tienes dos SessionFactory configurado?…Y también donde se ha inicializado el objeto de Estudiante?
InformationsquelleAutor Rahul Bussa | 2013-06-25

3 Kommentare

  1. 2

    A menos que el stacktrace que se han publicado no es exacta, entonces la referencia nula es su Dao en el controlador. Está usted seguro de que se está cableado correctamente?

  2. 1

    La razón por la NullPointerException es: ni usted está usando @ModelAttribute para frijol de unión, ni se han creado

    Student s = new Student();

    en caso de que usted no desea que @ModelAttribute.
    Usted
    Faltan @ModelA rrtibute antes de que el parámetro Estudiante en el controlador de código. Si el uso de @ModelAttribute anotación para frijol de unión, no es necesario para obtener los parámetros de la petición de solicitar y llenar el grano. Por lo tanto eliminar el siguiente:

    String name=req.getParameter("name");
    int id=Integer.parseInt(req.getParameter("id"));
    s.setId(id); /* Here you are setting a value with a reference wcich points to null */
    s.setName(name); /* Here you are setting a value with a reference wcich points to null */

    La Anotación @ModelAttribute se enlaza automáticamente los parámetros de solicitud a la que coinciden con las propiedades del bean en el que se aplica.

    @Controller
    public class MyController {
    
        @Autowired(required = true) 
        private Dao d;
        @RequestMapping(value="/insert.htm",method = RequestMethod.GET)
        public ModelAndView insert(HttpServletRequest req,@ModelAttribute Student s)
        {
            System.out.println(s.getName());
            d.save(s);
            return new ModelAndView("display","Student",s);
    
        }

    Edit: se han anotado la clase Dao con @Repositorio. Se creará un objeto singleton con el nombre de dao. Si desea cualquier otro nombre, excepto que, a continuación, utilizar

    @Repository(value ="d") 
     public class Dao{
    
    } 

    Ahora usted puede autowire la instancia de d a medida que se fueron haciendo

    @Autowired (required = true) 
    private Dao d;

    En su caso, el autowired Dao instancia es null porque la primavera es incapaz de autowire un bean llamado d. Por lo tanto, usted está invocando el método de guardar en una referencia nula.

    • Que no le parece correcto. El stacktrace indica que su Dao es nulo, nada que ver con el de referencia para el estudiante.
    • El seguimiento de la pila se indica acerca de NullPointerException en la línea nº 36 en MyController clase.
    • A la derecha, y el único puntero se eliminan las referencias en d.save(s) es el Dao.
    • Yo había hecho los Cambios mediante la adición de la @ModelAttribute parámetro, pero todavía estoy recibiendo el mismo error que se NullPointerException
    • Hola Vaibhav thank u por sus sugerencias.El problema es que aún permanece con la misma NullPointerException .
    • Puede usted decirme dónde está la línea número 30 en su MyController clase.
    • @Autowired(required = true) private Dao d; línea nº 30 es d.save(s);
    • Se han realizado cambios: @Repositorio(valor =»d») así como @ModelAttribute Estudiante s??
    • Si tienes tiempo por favor se mueven en el chat
    • permítanos continuar esta discusión en el chat

  3. 0

    @Rahul, que son vinculantes los datos en el Método Get, pero en realidad usted no debe hacer que en el método GET
    cuando se trata de la forma que usted siempre debe Usar el método POST
    creo que te podría ayudar 🙂

    @RequestMapping(value="/insert.htm",method = RequestMethod.POST)
        public ModelAndView insert(HttpServletRequest req,@ModelAttribute Student s)
        {
            System.out.println(s.getName());
            d.save(s);
            return new ModelAndView("display","Student",s);
    
        }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea