这个问题困扰我一天了,始终找不到哪里有错,经我分析应该是HibernateTemplate ht = this.getHibernateTemplate();
中没有得到对象,但我配置xml都是按照郭克华老师给的源码写的,不知道哪里有错,请各位大侠给我看看
有错dao类:
package dao;
import org.apache.log4j.Logger;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import po.Users;public class RegDao extends HibernateDaoSupport implements Iregdao {
private static Logger logger=Logger.getLogger("RegDao");

HibernateTemplate ht = this.getHibernateTemplate();

public boolean addUser(Users user) {
try {
ht.save(user);
return true;
} catch (DataAccessException e) {
e.printStackTrace();
}
return false;
}
public Users getUserByAccount(String account) {
Users user=null;
try {

user=(Users)ht.get(Users.class, account);//这里报错
                                                                        //java.lang.NullPointerException
} catch (DataAccessException e) {
e.printStackTrace();
}
return user;
}}
出错信息:
ERROR - Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at dao.RegDao.getUserByAccount(RegDao.java:34)
at action.UserRegistAction.execute(UserRegistAction.java:51)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
各配置文件我都放在webroot/WEB-INF/目录下
spring配置文件 :applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean id="regDao" class="dao.RegDao" >
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property> 
</bean>
<bean name="/userRegist" class="action.UserRegistAction" singleton="false">
<property name="regdao">
<ref local="regDao"/>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="/WEB-INF/hibernate.cfg.xml">
</property>
</bean></beans>
hibernate配置文件:hibernate.cfg.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"><!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration> <session-factory>
<property name="connection.username">sa</property>
<property name="connection.url">
jdbc:sqlserver://localhost:1433;databaseName=orderticket
</property>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="myeclipse.connection.profile">connect</property>
<property name="connection.password">000000</property>
<property name="connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<mapping resource="po/Users.hbm.xml" />
<mapping resource="po/Admin.hbm.xml" />
<mapping resource="po/Orderitems.hbm.xml" />
<mapping resource="po/Orders.hbm.xml" />
<mapping resource="po/Flights.hbm.xml" /> </session-factory></hibernate-configuration>
struts配置文件:struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="userRegistForm" type="form.UserRegistForm" />  </form-beans>  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      attribute="userRegistForm"
      input="/userRegist.jsp"
      name="userRegistForm"
      path="/userRegist"
      scope="request"
      type="org.springframework.web.struts.DelegatingActionProxy" />  </action-mappings>  <message-resources parameter="ApplicationResources" />
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
  </plug-in> 
</struts-config>不明白到底是哪里有错,请大家帮帮忙看一下

解决方案 »

  1.   

    我在struts配置文件中配置的spring插件 然后更换了action的 type="org.springframework.web.struts.DelegatingActionProxy" /> 
    然后在spring配置文件中配置了sessionFactory,并注入到dao类中,dao类继承了HibernateDaoSupport 类以便使用其sessionFactory属性,然后定义HibernateTemplate模版进行数据库查询
    可是没有得到要的ht
      

  2.   

    鄙人愚见
    是不是架包的错误,ssh有时候不同的版本jar 文件可能会出现问题
      

  3.   

    我更换成一本参考书上jar包,可是问题照旧。 
      

  4.   

    public Users getUserByAccount(String account) { 
    Users user=null; 
    try { user=(Users)ht.get(Users.class, account);//这里报错 
                                                                            //java.lang.NullPointerException 空指针异常  你把user对象 打印一下 看得到这个对象 这个对象有值没
    我觉得 没得到这个user对象
      

  5.   

    我单步调试了一下,发现到这里时
    user=(Users)ht.get(Users.class, account);//这里报错 
    ht为null然后报错
    ERROR - Servlet.service() for servlet action threw exception
    java.lang.NullPointerException
      

  6.   

    dao类是否只要继承HibernateDaoSupport 然后在配置文件中配置sessionFactory和数据源后就可以自动注入HibernateTemplate 中啊,为什么我HibernateTemplate ht = this.getHibernateTemplate(); 后ht为空呢?
      

  7.   

    最后终于弄出来了try {
    HibernateTemplate ht = this.getHibernateTemplate();
    user=(Users)ht.get(Users.class, account);
                                                                            //java.lang.NullPointerException
    } catch (DataAccessException e) {
    e.printStackTrace();
    } 这样写就不报错误了
      

  8.   

    spring配置文件改成这样就行了 :
    applicationContext.xml 
    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
    <beans> 
    <bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="configLocation" 
    value="/WEB-INF/hibernate.cfg.xml"> 
    </property> 
    </bean>
    <bean id="regDao" class="dao.RegDao" > 
    <property name="sessionFactory"> 
    <ref local="sessionFactory"/> 
    </property> 
    </bean> 
    <bean name="/userRegist" class="action.UserRegistAction" singleton="false"> 
    <property name="regdao"> 
    <ref local="regDao"/> 
    </property> 
    </bean> </beans>
      

  9.   

    java技术群:69705156
    欢迎加入
      

  10.   

    一般getHibernateTemplate()为空的情况有哪些 我的配置文件让别人看了没有问题呀 可就是没有获得session对象
      

  11.   

    楼主啊,我一开始整合SSH2时唯一遇到的问题就是你这个问题,我也是先
    HibernateTemplate template=getHibernateTemplate();
    绝对不行的,只能在使用时用getHibernateTemplate()来获得getHibernateTemplate,
    然后就没问题了
      

  12.   

    配置文件中:
    <bean id="hibernateTemplate" class="">  
    <property name="sessionFactory" ref="sessionFactory"> </property>  
    </bean>  <bean id="baseDao" class="com.gdekt.dao.daoimpl.BaseDaoImpl">  
    <property name="sessionFactory" ref="sessionFactory"> </property>  
    <property name="hibernateTemplate" ref="hibernateTemplate"> </property>  
    </bean> 
    把这个也注入进来,这样System.out的时候就会显示取到了hibernateTemplate了! 
      

  13.   

    看样子 好像是因为 hibernateTemplate 设成全局之后失效了,应该现取现用