spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--UserInfo相关  -->
<bean id="userFinder"
class="com.service.impl.UserFinderImpl"
parent="abstractFinder">
</bean>
<bean id="userService"
class="com.service.impl.UserServiceImpl"
parent="abstractPersistenceSerice">
</bean>

<bean id="AddAction" class="com.action.AddAction">
<property name="userService" ref="userService"></property>
</bean>
<bean id="DelAction" class="com.action.DelAction">
<property name="userService" ref="userService"></property>
</bean>
<bean id="DisplayAction" class="com.action.DisplayAction">
<property name="userFinder" ref="userFinder"></property>
</bean>
<bean id="FindAction" class="com.action.FindAction">
<property name="userFinder" ref="userFinder"></property>
</bean>
<bean id="ModifyAction" class="com.action.ModifyAction">
<property name="userService" ref="userService"></property>
</bean>

</beans>struts2的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="user" extends="default">
<!-- 用于对同一表单,不同提交按钮的业务 -->
<action name="AddAction" class="com.action.AddAction" method="post">
<result name="success">/success.jsp</result>
<result name="failed">/failed.jsp</result>
</action>

<action name="DelAction" class="com.action.DelAction" method="post">
<result name="success">/index.jsp</result>
<result name="failed">/error.jsp</result>
</action>

<action name="DisplayAction" class="com.action.DisplayAction" method="post">
<result name="success">/index.jsp</result>
<result name="fail">/error.jsp</result>
</action>

<action name="FindAction" class="com.action.FindAction" method="Login">
<result name="success">/index.jsp</result>
<result name="fail">/error.jsp</result>
</action>

<action name="ModifyAction" class="com.action.ModifyAction" method="Login">
<result name="success">/index.jsp</result>
<result name="fail">/error.jsp</result>
</action>

</package>
</struts>
struts总配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 交出控制权给Spring -->
<constant name="struts.objectFactory" value="spring" /> <include file="struts-default.xml"></include>
<!-- 设置字符编码 -->
<constant name="struts.i18n.encoding" value="utf-8" />

<package name="default" extends="struts-default">
<!-- 设置全局的result,出现错误时跳转该页面 -->
<global-results>
<result name="no">/failed.jsp</result>
<result name="success">/seccess.jsp</result>
</global-results>
</package>
<!-- <include file="com/sff/config/struts/*-action.xml"></include> -->
<include file="com/config/struts/*-action.xml"></include>
</struts>
Action类代码
package com.action;
import com.model.UserInfo;
import com.service.UserService;
import com.util.BaseAction;public class AddAction extends BaseAction {
private UserInfo user;

private UserService userService;

/**
 * @return the user
 */
public UserInfo getUser() {
return user;
}
/**
 * @param user the user to set
 */
public void setUser(UserInfo user) {
this.user = user;
} /**
 * @return the userService
 */
public UserService getUserService() {
return userService;
}
/**
 *
 * @param userService the userService to set
 */
public void setUserService(UserService userService) {
System.out.println(userService);
this.userService = userService;
}
public String addUserInfo() {
try{
System.out.println(userService);
userService.addUserInfo(user);
}catch(Exception e){
e.printStackTrace();
return "failed";
}
return "success";
}
}
userService一直为空,希望大家帮忙看下,怎么解决,谢谢

解决方案 »

  1.   

    abstractPersistenceSerice 这个bean申明在什么地方?
      

  2.   


    parent="abstractPersistenceSerice"定义?
      

  3.   

    <?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: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/tx   
         http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
    <value>org.gjt.mm.mysql.Driver</value>
    </property>
    <property name="url">
    <value>jdbc:mysql://192.168.1.91:3306/demogxa</value>
    </property>
    <property name="username">
    <value>root</value>
    </property>
    <property name="password">
    <value></value>
    </property>
    </bean>

    <!-- 配置Hibernate的sessionFactory -->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref local="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">
    <!--添加配置的映射文件  -->
    <list>
    <value>com/sff/project/model/User.hbm.xml</value>
    </list>
    </property>
    </bean> <!--事务定义 -->
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref local="sessionFactory" />
    </property>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- 创建事务代理对象
    <bean id="interceptor"
    class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <property name="transactionManager">
    <ref local="transactionManager"/>
    </property>
    <property name="transactionAttributes"> 
    <props>
    <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
    </props>
    </property>
    </bean> -->

    <!--自动事务代理,所有需要事务的bean的名称在这里定义>
     <bean id="autocreator"
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames">
    <list>
    <value>*Biz</value>
    </list>
    </property>
    <property name="interceptorNames"> 
    <list>
    <value>interceptor</value>
    </list>
    </property>
    </bean>
    -->

    <!--增强的hibernateTemplate,如客户使用到该类,可用此类注入 -->
    <bean id="hibernateTemplateExt"
    class="com.lovo.framework.persistence.hibernate3.HibernateTemplateExt">
    <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> <!-- 增强的hibernateDaoSupport -->
    <bean id="hibernateDaoSupportExt"
    class="com.lovo.framework.persistence.hibernate3.HibernateDaoSupportExt">
    <property name="hibernateTemplate" ref="hibernateTemplateExt"></property>
    </bean> <!-- 增、删、改dao实现类 -->
    <bean id="dao"
    class="com.lovo.framework.persistence.hibernate3.DaoHibernate3Impl">
    <property name="hibernateTemplate" ref="hibernateTemplateExt"></property>
    </bean> <!-- 增、删、改abstract持久服务抽象类-->
    <bean id="abstractPersistenceSerice"
    class="com.lovo.framework.persistence.AbstractPersistenceService"
    abstract="true">
    <property name="dao" ref="dao"></property>
    </bean> <!-- hibernate查询服务抽象类 -->
    <bean id="abstractFinder"
    class="com.lovo.framework.persistence.hibernate3.AbstractHibernate3Finder"
    abstract="true" parent="hibernateDaoSupportExt">
    </bean>

    </beans>申明在spring-resource.xml文件中
      

  4.   

    <?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: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/tx   
         http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
    <value>org.gjt.mm.mysql.Driver</value>
    </property>
    <property name="url">
    <value>jdbc:mysql://192.168.1.91:3306/demogxa</value>
    </property>
    <property name="username">
    <value>root</value>
    </property>
    <property name="password">
    <value></value>
    </property>
    </bean>

    <!-- 配置Hibernate的sessionFactory -->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref local="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">
    <!--添加配置的映射文件  -->
    <list>
    <value>com/sff/project/model/User.hbm.xml</value>
    </list>
    </property>
    </bean> <!--事务定义 -->
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref local="sessionFactory" />
    </property>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- 创建事务代理对象
    <bean id="interceptor"
    class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <property name="transactionManager">
    <ref local="transactionManager"/>
    </property>
    <property name="transactionAttributes"> 
    <props>
    <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
    </props>
    </property>
    </bean> -->

    <!--自动事务代理,所有需要事务的bean的名称在这里定义>
     <bean id="autocreator"
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames">
    <list>
    <value>*Biz</value>
    </list>
    </property>
    <property name="interceptorNames"> 
    <list>
    <value>interceptor</value>
    </list>
    </property>
    </bean>
    -->

    <!--增强的hibernateTemplate,如客户使用到该类,可用此类注入 -->
    <bean id="hibernateTemplateExt"
    class="com.lovo.framework.persistence.hibernate3.HibernateTemplateExt">
    <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> <!-- 增强的hibernateDaoSupport -->
    <bean id="hibernateDaoSupportExt"
    class="com.lovo.framework.persistence.hibernate3.HibernateDaoSupportExt">
    <property name="hibernateTemplate" ref="hibernateTemplateExt"></property>
    </bean> <!-- 增、删、改dao实现类 -->
    <bean id="dao"
    class="com.lovo.framework.persistence.hibernate3.DaoHibernate3Impl">
    <property name="hibernateTemplate" ref="hibernateTemplateExt"></property>
    </bean> <!-- 增、删、改abstract持久服务抽象类-->
    <bean id="abstractPersistenceSerice"
    class="com.lovo.framework.persistence.AbstractPersistenceService"
    abstract="true">
    <property name="dao" ref="dao"></property>
    </bean> <!-- hibernate查询服务抽象类 -->
    <bean id="abstractFinder"
    class="com.lovo.framework.persistence.hibernate3.AbstractHibernate3Finder"
    abstract="true" parent="hibernateDaoSupportExt">
    </bean>

    </beans>申明在spring-resource.xml文件中
      

  5.   

    这个Spring文件跟spring-resource.xml文件有没关联在一起?
      

  6.   


    肯定是关联在一起的
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
    <!-- 注入数据源 -->
    <import resource="spring-resource.xml"/>
    <!-- 注入user服务 -->
    <import resource="spring-user-service.xml"/>
    </beans>这个就是关联文件
      

  7.   

    <!-- 交出控制权给Spring -->
    <constant name="struts.objectFactory" value="spring" />既然控制权给Spring了 为什么在struts文件里面class属性还要写全?
    <!-- 用于对同一表单,不同提交按钮的业务 -->
    <action name="AddAction" class="com.action.AddAction" method="post">
    <result name="success">/success.jsp</result>
    改成这样的试试
    <action name="AddAction" class="AddAction" method="post">
    <result name="success">/success.jsp</result>
      

  8.   


    这样写要报错的,classnotfoundexception
      

  9.   

    第一个字母改成小写的:
    <action name="AddAction" class="addAction" method="post">
    <result name="success">/success.jsp</result>然后Spring中:
    <bean id="addAction" class="com.action.AddAction">
    <property name="userService" ref="userService"></property>
    </bean>
      

  10.   


    还是不行的,classnotfoundexception
      

  11.   

    <action name="AddAction" class="addAction" method="post">
    <result name="success">/success.jsp</result>然后Spring中:
    <bean id="addAction" class="com.action.AddAction">
    <property name="userService" ref="userService"></property>
    </bean>不知道 你在com.action.AddAction 这文件中是否有 post这个方法 
    因为你在 action 中配置了一个指定的方法名 
    spring 中 bean id 就是struts配置里的class 这两个值要匹配
    struts中的这个 method 应该是指定 spring中配置的这个action文件的 一个存在的方法
      

  12.   


    肯定是匹配的,只是属性注入失败,userService为null
      

  13.   

    <action name="addAction" method="post">
      

  14.   

    每个action类中的userService都是null吗
      

  15.   


    这个没有测试过,配置文件,和代码都看不出问题,但是确是null,百思不得其解
      

  16.   

    如果其它都这样,那么问题可能会出在struts配置上面如果有些action类里面不为null,那就排除struts有问题了,建议在其它action里面打印下userService信息...这个问题搞了一天了,没帮到你什么忙 真不好意思 我要下班了 
      

  17.   

    <!-- 用于对同一表单,不同提交按钮的业务 -->
    <action name="AddAction" class="com.action.AddAction" method="post">
    <result name="success">/success.jsp</result>
    <result name="failed">/failed.jsp</result>
    </action>
    你没有把struts交给spring托管!!
    你的action请求来了后,还是去直接找的
    <action name="AddAction" class="com.action.AddAction" method="post">,根本就没有到spring的配置文件中去找相应的action。
      

  18.   

    <action name="AddAction" class="com.action.AddAction" method="post">  class 应该是是AddAction  吧WEB  里  配这个没
    <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
    <listener>
    <listener-class>
    org.apache.struts2.tiles.StrutsTilesListener
    </listener-class>
    </listener>
      

  19.   


    控制权是交给spring的,托管自然给了spring的啊...