采用是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整合,则可以保存。
问题已困住我几天了,哪位有经验的大虾帮帮忙
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整合,则可以保存。
问题已困住我几天了,哪位有经验的大虾帮帮忙
<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>
怎么就有<ref bean="hibernateTemplate"/> 呢
你必须将你要由spring注入的类的配置加入配置文件中.
<?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>
可是错误依然一样的,我很迷惑啊
不知道这与上面的错误有没 关系
在WEB开发中spring一定要和Struts整合,才能与Hibernate整合吗
<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>
确实是少了这个<property name="sessionFactory" ref="sessionFactory"/>//
因为hibernateTemplate需要注入他
才能进行对事物的包装
还要在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>
grade.setGrade_name(gradeName);
这样写就写死了,要用SPRING的注入来管理