2013-03-24 36 views
0

struts.xml中的Struts 2 +休眠没有能够解决空指针

<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <package name="default" extends="hibernate-default"> 
       <action name="addEmp" method="add" class="app.web.EmployeeAction"> 
      <result name="success" type="redirect">/success.jsp</result> 
     </action> 
    </package> 
</struts> 

hibernate.chg.xml

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 

    <session-factory> 

     <!-- Database connection settings --> 
     <property name="connection.driver_class"> 
      com.mysql.jdbc.Driver 
     </property> 
     <property name="connection.url"> 
      jdbc:mysql://localhost:3306/struts 
     </property> 
     <property name="connection.username">pluto</property> 
     <property name="connection.password">admin</property> 

     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">1</property> 

     <!-- SQL dialect --> 
     <property name="dialect"> 
      org.hibernate.dialect.MySQLDialect 
     </property> 

     <!-- Enable Hibernate's automatic session context management --> 
     <property name="current_session_context_class">thread</property> 

     <!-- Disable the second-level cache --> 
     <property name="cache.provider_class"> 
      org.hibernate.cache.NoCacheProvider 
     </property> 

     <!-- Echo all executed SQL to stdout --> 
     <property name="show_sql">true</property> 

     <!-- Drop and re-create the database schema on startup --> 
     <property name="hbm2ddl.auto">update</property> 

     <mapping class="app.domain.User" /> 
       <mapping class="chapter1.Employee" /> 

    </session-factory> 

</hibernate-configuration> 

Employees.java

package app.domain; 

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

@Entity 
public class Employees { 
    private int empId; 
    private String empName; 

    @Id 
    public int getEmpId() { 
     return empId; 
    } 

    public void setEmpId(int empId) { 
     this.empId = empId; 
    } 

    public String getEmpName() { 
     return empName; 
    } 

    public void setEmpName(String empName) { 
     this.empName = empName; 
    } 

} 

HibernateUtil.java

package app.domain; 

import chapter1.Employee; 
import org.hibernate.cfg.AnnotationConfiguration; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class HibernateUtil { 

    private static final SessionFactory sessionFactory; 

    static { 
     try { 
      AnnotationConfiguration config = new AnnotationConfiguration(); 
     config.addAnnotatedClass(Employee.class); 

     config.configure("hibernate.cfg.xml"); 
     //new SchemaExport(config).create(true,true); 

     sessionFactory = config.buildSessionFactory(); 

     } catch (Throwable ex) { 
      // Log the exception. 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 

EmpDAO.java

package app.dao; 

import app.domain.Employees; 

public interface EmpDAO { 
    public void saveEmp(Employees emps); 
} 

EmpDAOImpl.java

package app.dao; 

import app.domain.Employees; 
import com.googlecode.s2hibernate.struts2.plugin.annotations.SessionTarget; 
import com.googlecode.s2hibernate.struts2.plugin.annotations.TransactionTarget; 
import org.hibernate.Session; 
import org.hibernate.Transaction; 
public class EmpDAOImpl implements EmpDAO { 
    @SessionTarget 
    Session session; 

    @TransactionTarget 
    Transaction transaction; 

    @SuppressWarnings("unchecked") 

    @Override 
    public void saveEmp(Employees emps) 
    { 
     session.save(emps); 
    } 
} 

EmployeeAction.java

package app.web; 

import app.dao.EmpDAO; 
import app.dao.EmpDAOImpl; 
import app.domain.Employees; 
import app.domain.HibernateUtil; 
import app.domain.User; 
import com.opensymphony.xwork2.ActionSupport; 
import com.opensymphony.xwork2.ModelDriven; 

public class EmployeeAction extends ActionSupport{ 
    HibernateUtil hu = new HibernateUtil(); 
    Employees emps = new Employees(); 

    EmpDAO empDAO; 
    public String execute() 
    { 

     return SUCCESS; 
    } 
    public String add() 
    { 

     emps = new Employees(); 
      emps.setEmpId(200); 
      emps.setEmpName("sadi"); 
     empDAO.saveEmp(emps); 
     return SUCCESS; 
    } 

    public Employees getEmps() { 
     return emps; 
    } 

    public void setEmps(Employees emps) { 
     this.emps = emps; 
    } 
} 

现在我想从形式EmployeeAction传递值手动没有,所以我还没有使用模型驱动的,我得到的错误,如下图所示,在这里我做错

java.lang.NullPointerException 
app.web.EmployeeAction.add(EmployeeAction.java:40) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:601) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255) 
com.googlecode.s2hibernate.struts2.plugin.s2hibernatevalidator.interceptor.HibernateValidatorInterceptor.intercept(HibernateValidatorInterceptor.java:123) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.intercept(SessionTransactionInjectorInterceptor.java:211) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510) 
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 
+0

你有没有试过用调试器调试它? – 2013-03-24 06:32:07

+0

首先我是struts和hibernate的新手,所以我想确认一下,我发布的代码是否有效,就像我已经使用了所有的注释一样。 – Aadam 2013-03-24 07:24:05

+0

即使是映射的东西,请指导我,我确定我在某处做错了,但在哪里? – Aadam 2013-03-24 07:24:47

回答

0

的错误你有没有初始化DAO实例empDAO。您应该手动执行此操作

empDAO = new EmpDAOImpl(); 

在将此变量用作左值之前。

+0

但我越来越错误,因为EmpDAO是抽象的;不能实例化,我也使用abstract关键字。 – Aadam 2013-03-24 10:07:23

+0

哎哟,我真的没有看到。拿一个不抽象的实例。 – 2013-03-24 10:12:23

+0

现在我该怎么做,我正在做一个实现hibernate的示例,我正在尝试使用struts 2来做同样的事情,但我想手动传递这些值。 – Aadam 2013-03-24 10:26:54