2013-05-04 24 views
1

我試圖一些春天例如programs.I我在使用休眠template.My POJO類是如下Spring MVC中使用的HibernateTemplate得到NullPointerException異常

package project4; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="user") 
public class User1 { 

    private int id; 
    private String name; 
    private String password; 
    private String gender; 
    private String country; 


    @Id 
    @GeneratedValue 
    @Column(name="USER_ID") 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

    @Column(name="USER_NAME") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    @Column(name="USER_PASSWORD") 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 

    @Column(name="USER_GENDER") 
    public String getGender() { 
     return gender; 
    } 
    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    @Column(name="USER_COUNTRY") 
    public String getCountry() { 
     return country; 
    } 
    public void setCountry(String country) { 
     this.country = country; 
    } 

} 

我的控制器類是如下

得到的NullPointerException

CController.java

import project4.UserDAO1; 
import project4.User1; 
import java.util.Map; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.stereotype.Controller; 
import org.springframework.transaction.annotation.Transactional; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.multiaction.MultiActionController; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.validation.BindingResult; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 


@Controller 




public class CController{ 

    private UserDAO1 userDAO; 
    @Autowired 
    @Qualifier("myUserDAO") 
    private UserDAOImpl1 myUserDAO; 

    public void setUserDAO(UserDAO1 userDAO) { 
     this.userDAO = userDAO; 
    } 

    @RequestMapping(value = "/frm4/add", method = RequestMethod.POST) 
    public ModelAndView add(@ModelAttribute("add") User1 user,HttpServletRequest 
      request,HttpServletResponse response) throws Exception { 
      System.out.println("hai"); 

     userDAO.saveUser(user); 
     System.out.println("hai"); 
     return new ModelAndView("redirect:list.htm"); 
    } 

     @RequestMapping(params = "delete", method = RequestMethod.POST) 
     @Transactional 
     public ModelAndView delete(@ModelAttribute("delete") User1 
     user,HttpServletRequest request,HttpServletResponse response) throws Exception { 
        userDAO.deleteUser(user); 
       return new ModelAndView("redirect:list.htm"); 
    } 


     @RequestMapping(params = "find", method = RequestMethod.POST) 
     @Transactional 
     public ModelAndView find(@ModelAttribute("find") User1 user,HttpServletRequest 
      request,HttpServletResponse response) throws Exception { 
        userDAO.findUser(user); 
         return new ModelAndView("redirect:list.htm"); 
     } 


     @RequestMapping(params = "update", method = RequestMethod.POST) 
     @Transactional 
    public ModelAndView update(@ModelAttribute("update") User1 user,HttpServletRequest 
      request,HttpServletResponse response) throws Exception { 
        userDAO.updateUser(user); 
         return new ModelAndView("redirect:list.htm"); 
     } 

     public ModelAndView list(HttpServletRequest request, 
       HttpServletResponse response) throws Exception { 


       ModelMap modelMap = new ModelMap(); 
       modelMap.addAttribute("userList", userDAO.listUser()); 
       modelMap.addAttribute("user", new User1()); 
       return new ModelAndView("list", modelMap); 
     } 
    } 

和我的HibernateTemplate實現類是如下

package project4; 
import project4.User1; 
import java.util.List; 

import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.springframework.orm.hibernate3.HibernateTemplate; 

public class UserDAOImpl1 implements UserDAO1 { 

    private HibernateTemplate hibernateTemplate; 

    public void setSessionFactory(SessionFactory sessionFactory) { 
     this.hibernateTemplate = new HibernateTemplate(sessionFactory); 
    } 

    @Override 
    public void saveUser(User1 user) { 

    hibernateTemplate.saveOrUpdate(user); 

    } 


    @Override 
    @SuppressWarnings("unchecked") 
    public List<User1> listUser() { 
     return hibernateTemplate.find("from user"); 
    } 

    @Override 
    public void deleteUser(User1 user) { 
      hibernateTemplate.delete(user); 
    } 

    @Override 
    public List<User1> findUser(User1 user) { 

     return hibernateTemplate.find("from user where USER_ID=:" +user.getId()); 
    } 

    @Override 
    public void updateUser(User1 user) { 
     hibernateTemplate.update(user); 

    } 
} 

和我的配置XML文件如下

<?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:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:util="http://www.springframework.org/schema/util" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema 
     /jdbc/spring-jdbc-3.0.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema 
     /tx/spring-tx-3.0.xsd 
http://www.springframework.org/schema/util http://www.springframework.org/schema 
    /util/spring-util-3.0.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema 
     /mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema 
    /context/spring-context-3.0.xsd"> 

<context:annotation-config/> 

<bean id="mySessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="basicDataSource" /> 
    <property name="packagesToScan" value="project4"/> 

    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

<bean id="myUserDAO" class="project4.UserDAOImpl1"> 
    <property name="sessionFactory" ref="mySessionFactory"/> 
    </bean> 
</beans> 

我使用兩個XML文件,一個是經理級調用,另一個用於DAO calls.The以上是道calls.My JSP頁面

frm4.jsp

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <form method="POST" action="<%=request.getContextPath()%>/frm4/add"> 
    <table> 
    <tr> 
     <td><label for="id">Id:</label></td> 
    <td> 
     <input name="id" value="${user.id}" /> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <label for="name">Name:</label></td> 
    <td> 
     <input name="name" value="${user.name}" /> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <label for="password">Password:</label></td> 
    <td> 
      <input name="password" value="${user.password}" /> 
    </td> 
    </tr> 

     <tr> 
     <td> 
      <label for="gender">Gender:</label></td> 
     <td> 
      <input name="gender" value="${user.gender}" /> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <label for="lastName">Country:</label></td> 
     <td> 
      <input name="country" value="${user.country}" /> 
     </td> 
     </tr> 

     </table> 
     <input type="submit" value="Submit"/> 
    </form> 
</body> 
</html> 

現在,當我運行這個程序,我得到NullPointerException.The錯誤堆棧跟蹤如下..

java.lang.NullPointerException 
project4.CController.add(CController.java:42) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:597) 
                         org.springframework.web.bind.annotation.support.HandlerMethodInvoker. 
    invokeHandlerMethod (HandlerMethodInvoker.java:176) 

org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter. 
     invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 

org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter. 
      handle(AnnotationMethodHandlerAdapter.java:424) 

org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790 

org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
org.springframework.web.servlet.FrameworkServlet.processRequest 
      (FrameworkServlet.java:669) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 

其中線42是

userDAO.saveUser(user); 

在控制器class.I正在從用戶用jsp頁面獲取輸入。

可能有人幫助PLZ

回答

1

看起來像你的UserDAOImpl bean沒有注入控制器。你可以mannualy初始化控制器bean並設置ref屬性到myUserDAO bean。

<bean class="project4.CController"> 
    <property name="userDAO" ref="myUserDAO"/> 
</bean> 

或者在UserDao的控制器中使用@Autowired註釋。

+0

感謝一大堆... THT幫助 – Ezhil 2013-05-04 05:23:23

+0

@ user1847395你可以從控制器刪除UserDAOImpl1,你不使用它,你已經通過Spring它映射組態。 – YoK 2013-05-04 05:29:53

2

嘗試添加@Autowired這裏:

public class CController{ 

    @Autowired 
    private UserDAO1 userDAO; 
    ..... 

和刪除UserDAOImpl1

0

在您的代碼「myUserDAO」類未找到,所以它會拋出NULLPointerException。

創建UserDAOImpl1對象而不是UserDAO1類對象。 示例代碼:

public class CController{ 
    @Autowired 
    private UserDAOImpl1 myUserDAO; 


    //your logic... 
    //.. 

} 

相反的:

private UserDAO1 userDAO; 
    @Autowired 
    @Qualifier("myUserDAO") 
    private UserDAOImpl1 myUserDAO; 
相關問題