采用是SSH整合,但保存数据时候抛出异常如下:
   java.lang.NullPointerException
com.dao.GradeDaoImple.addGrade(GradeDaoImple.java:22)
com.manager.GradeManagerImple.addGrade(GradeManagerImple.java:7)
com.action.AdminAction.addGrade(AdminAction.java:77)
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.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
com.action.AdminAction.execute(AdminAction.java:20)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)Spring中的Application-comms.xml文件配置如下(这个文件,我放在src目录下):<?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:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>           

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>

<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.dao.*.*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
</beans>dao中的一GradeDaoImple如下:package com.dao;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.model.*;public class GradeDaoImple extends HibernateDaoSupport implements GradeDao { public void addGrade(String gradeName) {
Grade grade = new Grade();
grade.setGrade_name(gradeName);

this.getHibernateTemplate().save(grade);
}
}补充:
    我Debug了一下,是HibernateTemplate为空,不知道什么原因。我用FactoryBean取了sessionFactory,不为空!是哪里出错了,还有,我不采用Spring整合,则可以保存。
   问题已困住我几天了,哪位有经验的大虾帮帮忙

解决方案 »

  1.   

    你都没有注入spring怎么会去给你管理
      

  2.   

    给楼主个例子,看着写
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
      
        <bean id="bbsDao" class="cn.com.netDragon.dao.bbs.BbsDao">
             <property name="hibernateTemplate">
                 <ref bean="hibernateTemplate"/>
             </property>
        </bean>
        
        <bean id="bbsService" class="cn.com.netDragon.service.bbs.BbsService">
        <property name="bbsDao">
           <ref bean="bbsDao"/>
        </property>
        <property name="adminDaoImpl">
           <ref bean="adminDaoImpl"/>
        </property>
        </bean>
        <bean id="bbsAction" class="cn.com.netDragon.action.bbs.BbsAction">
        <property name="bbsService">
           <ref bean="bbsService"/>
        </property>
        </bean>
    </beans>
      

  3.   

    可是那个HibernateTemplate没有注入啊 
    怎么就有<ref bean="hibernateTemplate"/> 呢
      

  4.   

    应该是没有注入
    你必须将你要由spring注入的类的配置加入配置文件中.
      

  5.   

    开始注入了,如下:
    <?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:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
        
    <bean id="gradeDao" class="com.dao.GradeDaoImple">
      <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <bean id="gradeManager" class="com.manager.GradeManagerImple">
      <property name="gd">
        <ref bean="gradeDao"/>
      </property>
    </bean>
    </beans>
    可是错误依然一样的,我很迷惑啊 
      

  6.   

    在aop中添加属性targer-proxy-class="true"去试一下
      

  7.   

    啊,还有一点,我Struts的Action没有和Spring整合来的
    不知道这与上面的错误有没 关系
    在WEB开发中spring一定要和Struts整合,才能与Hibernate整合吗
      

  8.   

    <bean id="gradeDao" class="com.dao.GradeDaoImple"> 
      <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 
    <bean id="gradeManager" class="com.manager.GradeManagerImple"> 
    <property name="sessionFactory" ref="sessionFactory"/>//少了这个吧  <property name="gd"> 
        <ref bean="gradeDao"/> 
      </property> 
    </bean> 
      

  9.   


    确实是少了这个<property name="sessionFactory" ref="sessionFactory"/>//
    因为hibernateTemplate需要注入他
    才能进行对事物的包装
      

  10.   

    还有你要想进行和struts进行整合的话
    还要在struts-config.xml
    中进行配置就可以了用spring的一个类
     <action path="/org"
         type="org.springframework.web.struts.DelegatingActionProxy"
         name="orgForm"
         scope="request"
         parameter="method"
        >
        
    在spring配置如下 <bean name="/org" class="com.bjsxt.oa.web.actions.OrgAction" scope="prototype">
    <property name="orgManager" ref="orgManager"></property>
    </bean>
      

  11.   

    必须注入,不注入就为null,然后就空指针了
      

  12.   

    必须注入,不注入就为null,然后就空指针了
      

  13.   

    Grade grade = new Grade(); 
    grade.setGrade_name(gradeName); 
     
    这样写就写死了,要用SPRING的注入来管理
      

  14.   

    不注入怎么调用啊,不注入Spring知道给你设哪个对象啊