tomcat启动时的报错信息:严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeesImpl' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1337)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)struts.xml:
<package name="logincode" extends="struts-default">
        <action name="login" class="loginAction" method="login">
            <result name="success">oo.jsp</result>
            <result name="input">index.jsp</result>
            <result name="error">index.jsp</result>
        </action>
    </package>cpplicationContext.xml:
<bean id="mylogin" class="com.zoye.oa.service.Login"/>
<bean id="loginAction" class= "com.zoye.oa.action.LoginAction" scope="prototype">
     <property name="login" ref="mylogin"/>
</bean>LoginAction.java:
public String login(){
 if(login.login(userID,passWord)){
 return "success";
 }
 tip="账号或密码错误";
 return "lost";
 }
Login.java:public class Login extends EmployeesDaoImpl{
      public boolean login(String userid,String password){
   List <Employees>list=findOne(userid,password);//findOne是EmployeesDaoImpl里面的方法
}
}当我去掉extends EmployeesDaoImpl的时候可以正常启动。请问是什么原因。

解决方案 »

  1.   

    <bean id="mylogin" class="com.zoye.oa.service.Login"/>
    要注入sessionFactory 另外:
    <bean id="loginAction" class= "com.zoye.oa.action.LoginAction" scope="prototype">
      <property name="login" ref="mylogin"/>
    </bean>
    应该是:
    <bean name="/*" class= "com.zoye.oa.action.LoginAction" scope="prototype">
      <property name="login" ref="mylogin"/>
    </bean>
    注:"/*" 为struts中的path
      

  2.   

    ???
    bean id="loginAction"这个id要跟struts.xml中的class="loginAction"对应吧
      

  3.   

    1楼 误会了  人家用的是Struts2 不是 1 。。 小弟也刚学,没什么经验。鉴于你说的这句话    “ 当我去掉extends EmployeesDaoImpl的时候可以正常启动。请问是什么原因。”楼主的问题可能出现在Action里面。 你用了spring的事务管理功能, 它返回的是com.zoye.oa.service.Login这个类的代理类如果你的目标类实现了接口。 那这个代理类就实现了这些接口  (这里内部用的是JDK里自带的proxy实现的)如果你的目标类没有实现任何接口,那这个代理类就是目标类的子类。(这是用cgLib实现的)所以你引用 那个spring传进来的服务Bean 的变量不对。 楼主最好 去掉Struts层   单独测试一下 这样错误信息显示的更清晰一点。 
      

  4.   

    是不是 jdk的问题 啊
      

  5.   

    applicationContext.xml里面有这个employeesImpl类吗????没从楼主的applicationContext.xml看到.........
      

  6.   

    我是用Login类的啊,Login集成employeesImpl,这个在xml里面配置?
      

  7.   

    你不用Struts 。单独在Junit 里测试 或者  自己写个 Main 方法 测试一下 看看有什么错误
      

  8.   

    java程序员群 108363309(欢迎加入)
      

  9.   

     //登录验证
     public String login(){
     if(login.login("","")){
     return "success";
     }
     tip="账号或密码错误";
     return "lost";
     }
     
     public static void main(String [] arg){
     LoginAction loginAction=new LoginAction();
     
     loginAction.login();
     }Exception in thread "main" java.lang.NullPointerException
    at com.zoye.oa.action.LoginAction.login(LoginAction.java:26)
    at com.zoye.oa.action.LoginAction.main(LoginAction.java:36)

      

  10.   

    <bean id="loginAction" class= "com.zoye.oa.action.LoginAction" scope="prototype">
      <property name="login" ref="mylogin"/>
    </bean>
    哪集成了employeesImpl?
      

  11.   

    你这里 login.login("","")  这个login 是什么类型的?我没猜错的话 你这个 login 应该是引用 这个  com.zoye.oa.service.Login 的对象吧!这里居然是空指针异常 你是不是 忘了把 注入了??
      

  12.   

    是你EmployeesDaoImpl这里需要sessionFactory你没给传进去?
      

  13.   

    我是楼主,我把用到的类也写一下。LoginAction.java  public void setLogin(Login login){
     this.login=login;
     } public String login(){
    login.login(userID,passWord)
    }Login.java:
    public class Login extends EmployeesDaoImpl {
    public boolean login(String userid,String password){
    .......
    }
    }EmployeesDaoImpl.java
    public class EmployeesDaoImpl extends MySupportHibernate implements
    EmployeesDao{
    .....
    }MySupportHibernate.java
    public class MySupportHibernate extends HibernateDaoSupport {
    }配置文件就是上面那些。
    请教怎么解决这个问题
      

  14.   

    这个正确的。我加上了一下代码
    <bean id="mylogin" class="com.zoye.oa.service.Login">
    <property name="sessionFactory">
    <ref bean="sessionFactory"/>
    </property>
    </bean>
    运行起来没报错了。但是还不理解啊。
    Login类里面并没有sessionFactory啊,EmployeesDaoImpl,MySupportHibernate都没有这个。为什么要注入这个呢
      

  15.   


    HibernateDaoSupport 依赖sessionFactory啊,所以要注入
      

  16.   


    <!-- 配置模板 -->
        <bean id="ht" class="MySupportHibernate">
         <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
    然后
    <bean id="mylogin" class="com.zoye.oa.service.Login" parent="ht"></bean>
    就不需要每个bean都注入了因为你间接继承了HibernateDaoSupport,这个类需要sessionFactory
      

  17.   

    你最终继承的是HibernateDaoSupport  它获得session时是依赖工厂模式的,所以需要注入
      

  18.   

    如果还没有解决msn:[email protected]