为什么我在使用Spring MVC + Hibernate应用程序的控制器中出现NullPointerException

Swikriti

这是我的控制器:

            package com.tec.controller;
            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.context.annotation.Configuration;
            import org.springframework.stereotype.Controller;
            import org.springframework.ui.Model;
            import org.springframework.web.bind.annotation.RequestMapping;
            import org.springframework.web.servlet.ModelAndView;

            import com.tec.domain.RegisterDetails;
            import com.tec.service.RegisterServiceIfc;

            @Controller("registerServiceIfc")

            public class LoginRegisterController {


            private RegisterServiceIfc registerServiceIfc;
            @Autowired(required=true)


                @RequestMapping("/home.sahu")
                public ModelAndView helloWorld() {

                 return new ModelAndView();

                }

                 @RequestMapping("/registration.sahu")

                public ModelAndView LoginPage() {

                        return new ModelAndView();

                 }

                @RequestMapping("/registerDetails.sahu")
                public ModelAndView registerDetails(RegisterDetails perDetails,Model model) {

                    model.addAttribute("pb",perDetails);

                    registerServiceIfc.registerPerson(perDetails);// getting exception here.Its showing perDetails object is null

                    return new ModelAndView();

             }

            }

这是我的服务班级:

        package com.tec.service;

        import java.util.List;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.stereotype.Service;
        import org.springframework.transaction.annotation.Transactional;

        import com.tec.dao.RegisterDaoIfc;
        import com.tec.domain.RegisterDetails;

        @Service("registerDaoIfc")

        public class RegisterServiceIfcImpl implements RegisterServiceIfc{


            private RegisterDaoIfc registerDaoIfc ;
            @Autowired(required=true)


            @Override
            @Transactional
            public void registerPerson(RegisterDetails perDetails) {


                registerDaoIfc.registerPerson(perDetails);
            }

            @Override
            @Transactional
            public List<RegisterDetails> getRegAllDetails() {
                return registerDaoIfc.getRegAllDetails();

            }

        }

这是我的道课:

    package com.tec.dao;

    import java.util.List;
    import org.hibernate.SessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    import org.springframework.transaction.annotation.Transactional;

    import com.tec.domain.RegisterDetails;

    @Repository
    public class RegisterDaoIfcImpl implements RegisterDaoIfc{
        @Autowired(required=true)
        SessionFactory sessionFactory;


        @Override
        @Transactional
        public void registerPerson(RegisterDetails perDetails) {

              this.sessionFactory.getCurrentSession().save(perDetails);

        }

        @Override
        @Transactional
        public List<RegisterDetails> getRegAllDetails() {
            return this.sessionFactory.getCurrentSession().createCriteria(RegisterDetails.class).list();
        }

    }


    This is my POJO class:



    package com.tec.domain;

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.Column;


    @Entity
    @Table(name="registerdetails")
    public class RegisterDetails {


        @Id
         @GeneratedValue(strategy=GenerationType.IDENTITY)

       @Column(name = "pid")
       private String pid;

       @Column(name = "firstName")
       private String firstName;

       @Column(name = "lastName")
       private String lastName;

       @Column(name = "mobileNo")
       private String mobileNo;

       @Column(name = "email")
       private String email;

       @Column(name = "address")
       private String address;

       @Column(name = "landmark")
       private String landmark;

       @Column(name = "city")
       private String city;

       @Column(name = "state")
       private String state;

       @Column(name = "country")
       private String country;

       @Column(name = "pinno")
       private String pinno;



    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getMobileNo() {
        return mobileNo;
    }

    public void setMobileNo(String mobileNo) {
        this.mobileNo = mobileNo;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getLandmark() {
        return landmark;
    }

    public void setLandmark(String landmark) {
        this.landmark = landmark;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getPinno() {
        return pinno;
    }

    public void setPinno(String pinno) {
        this.pinno = pinno;
    }

       }



    This is my JSP page:



    <%@ 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">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    <link href='http://fonts.googleapis.com/css?family=Pacifico' rel='stylesheet' type='text/css'>
      <link rel="stylesheet" href="css/style.css">

    </head>
    <body>


    <form action="registerDetails.sahu" class="elegant-aero">

    <h1>Registration Form
            <span>Please fill all the texts in the fields.</span>
        </h1>


        <label>
            <span>First Name :</span>

           <input type="text" name="firstName" id="firstName" value="${pb.firstName}">
        </label>


         <label>
            <span>Last Name :</span>
            <input type="text" name="lastName" id="lastName" value="${pb.lastName}">
        </label>

         <label>
            <span>Mobile No :</span>
          <input type="text" name="mobileNo" id="mobileNo" value="${pb.mobileNo}">
        </label>

         <label>
            <span>Email :</span>
          <input type="text" name="email" id="email" value="${pb.email}">
        </label>

         <label>
            <span>Address :</span>
           <input type="text" name="address" id="address" value="${pb.address}">
        </label>

         <label>
            <span>Landmark :</span>
           <input type="text" name="landmark" id="landmark" value="${pb.landmark}">
        </label>


     <label>
            <span>City :</span>
         <input type="text" name="city" id="city" value="${pb.city}">
        </label>

         <label>
            <span>State :</span>
      <input type="text" name="state" id="state" value="${pb.state}">
        </label>

         <label>
            <span>Country :</span>
       <input type="text" name="country" id="country" value="${pb.country}">
        </label>

         <label>
            <span>Pin No :</span>
       <input type="text" name="pinno" id="pinno" value="${pb.pinno}">
        </label>

          <label>
            <span>Register :</span>
       <input type="submit"  value="register"  class="button purple" >
        </label>

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




This is my XML configuration file:



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">


 <context:component-scan base-package="com.tec.controller." />


    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>




    <!-- For Hibernate -->

    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
          p:location="/WEB-INF/jdbc.properties"></bean>

    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource"
          p:driverClassName="${jdbc.driverClassName}"
          p:url="${jdbc.databaseurl}" p:username="${jdbc.username}"
          p:password="${jdbc.password}"></bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
            <prop key="hibernate.sql_comments">true</prop>
            <prop key="hibernate.format_sql">true</prop>
             <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>

      <property name="annotatedClasses">
             <list> 
                <value>com.tec.domain.RegisterDetails</value>
                <value>com.tec.domain.StudentRegister</value>
            </list>
        </property>
    </bean>

 <tx:annotation-driven/>
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>




This is my properties file for database:



jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.databaseurl=jdbc:mysql://localhost:3306/tecnics
jdbc.username=root
jdbc.password=root



This is my web.xml:


<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
     <display-name>Spring3MVC</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>swikriti</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>swikriti</servlet-name>
        <url-pattern>*.sahu</url-pattern>
    </servlet-mapping>
</web-app>

我收到以下异常:

严重:路径为[/ SpringTest]的上下文中的Servlet [swikriti]的Servlet.service()抛出异常[请求处理失败;嵌套的异常是java.lang.NullPointerException],其根本原因是com.tec.controller.LoginRegisterController.registerDetails(LoginRegisterController.java:48)处的com.tec.controller.LoginRegisterController.registerDetails(LoginRegisterController.java:48)处,sun.reflect处的本地原因org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod上的java.lang.reflect.Method.invoke上的.NativeMethodAccessorImpl.invoke(未知源) (HandlerMethodInvoker.java:710)位于org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)位于org.springframework.web.servlet.mvc.annotation。

我添加了以下库:

在此处输入图片说明

尼古拉·鲁塞夫(Nikolay Rusev)

当然perDetails对象会是null你错过了很多东西。

首先,在您的GET请求中,应在show web form方法中添加以下内容。同样在每个请求映射处理程序中,不仅返回相应的html视图ModelAndView()

     @RequestMapping(value= "/registration.sahu",method = RequestMethod.GET)
     public ModelAndView LoginPage(Model model) {
        RegisterDetails perDetails = new RegisterDetails();
        model.addAttribute("perDetailsForm", perDetails);
        return  new ModelAndview(model,"correspondingHtmlView");
     }

其次,您应该更改您的POST请求,以便它可以处理表单提交。添加Modelattribute到您的输入参数,它将html表单绑定到perDetails对象。

    @RequestMapping("/registerDetails.sahu")
    public ModelAndView registerDetails(@ModelAttribute("perDetailsForm") RegisterDetailsperDetails perDetails) {
        registerServiceIfc.registerPerson(perDetails);
        return new ModelAndView("viewname");
}

第三个也是最后一个是将您的表单从干净的html更改为spring表单。还添加spring taglibs!

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

<form:form method="post" modelAttribute="perDetailsForm" action="actionUrl">
    <form:input path="property" type="text" /> <!-- bind to perDetail.property-->
</form:form>

是一个很好的教程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当数据正确显示时,为什么在此Spring MVC Web应用程序中出现Hibernate LazyInitializationException?

为什么我们不应该使用Spring MVC控制器@Transactional?

在spring-mvc应用程序中未调用控制器

构建Spring MVC应用程序,控制器“找不到符号”模型

Spring MVC应用程序中可以有多个控制器吗?

映射到应用程序根目录的spring mvc控制器的操作

控制器如何与Extjs应用程序中的MVC一起使用

使用 MVC 的 ASP.NET Core Web 应用程序/自动更新控制器

我可以在spring mvc应用程序中合并控制器吗?如果可以,它将如何影响性能?

我可以配置Spring MVC应用程序,以便每当我运行该应用程序时,都应自动调用控制器或任何方法

从MVC Web应用程序的MVC控制器获取用户名的代码是什么

在服务器上运行但未在devbox上运行的Spring MVC应用程序中出现404错误

在我的应用程序 asp.net mvc 的后台运行这个控制器和 javascript 代码

在IIS7.5上部署mvc3应用程序后未击中我的控制器操作

如何将控制器 (MVC) 添加到我用 Java 编写的 JavaFX 应用程序中?

在Node.js应用程序(MVC架构)中确切代表控制器的是什么

Spring MVC与Web应用程序中的服务,控制器和数据访问层有何关系?

如何在混合的Web API和MVC应用程序中使用Autofac解析Web API控制器?

为什么我的字体无法在ASP.NET Core MVC应用程序中使用?

MVC应用程序和控制器设计

为什么当我向Spring MVC应用程序提交表单时会获得此HTTP Status 404错误页面?

Node应用程序中的MVC控制器,这些是控制器吗?

仅当我进入ASP .NET MVC 5.1应用程序中的“人员控制器”索引操作时,ApplicationDbContext种子才会启动

当您拥有控制器类的单元提示时,为什么要使用Spring's Mock MVC

为什么我的警报控制器没有在我的 Swift 应用程序中关闭?

为什么我不能在我的 MVC 控制器上声明多个方法?

使用Intellij 15创建新的Play应用程序时出现控制器问题

为什么我应该在ASP .Net MVC应用程序中使用HTTPContext会话状态来移走表格?

在Spring MVC和Hibernate中将数据从控制器发送到视图时出现问题