我框架搭好启动tomcat没有报错 但是一提交页面就会报错 后台不报错
HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionUnable to instantiate Action, com.swlz.groupon.action.UserAction,  defined for 'doLoginAction' in namespace ''Error creating bean with name 'com.swlz.groupon.action.UserAction': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.swlz.groupon.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:318)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:399)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:198)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:475)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root causeorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.swlz.groupon.action.UserAction': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.swlz.groupon.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:300)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:374)
com.opensymphony.xwork2.spring.SpringObjectFactory.autoWireBean(SpringObjectFactory.java:193)
com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:173)
com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:144)
com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:150)
com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:120)
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:299)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:399)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:198)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:475)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root causeorg.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.swlz.groupon.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:431)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:409)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:541)
org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:156)
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:297)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:374)
com.opensymphony.xwork2.spring.SpringObjectFactory.autoWireBean(SpringObjectFactory.java:193)
com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:173)
com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:144)
com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:150)
com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:120)
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:299)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:399)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:198)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:475)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.
  

解决方案 »

  1.   

    配置文件如下
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <!-- 关闭动态调用 -->
    <constant name="struts.enable.DynamicMethodInvocation"
    value="false" />
    <!-- 开发模式 不用一直重启服务器 -->
    <!-- 解决中文问题 -->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant> <package name="user" extends="struts-default">
    <action name="regAction"
    class="com.swlz.groupon.action.UserAction" method="register">
    <result name="success">/registerSuccess.jsp</result>
    <result name="error">/error.jsp</result>
    </action>
    <action name="doLoginAction"
    class="com.swlz.groupon.action.UserAction" method="doLogin">
    <result name="doLoginManager">/Login.jsp</result>
    <result name="doLoginsuccess">/disp.jsp</result>
    <result name="fail">/loginfail.jsp</result>
    </action>
    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:context="http://www.springframework.org/schema/context"
    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-3.0.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-3.0.xsd
               http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                http://www.springframework.org/schema/tx
               http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
               
    <!-- <context:annotation-config/> -->
        <context:component-scan base-package="com.swlz.groupon"/>
    <!--
    <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
    <bean id="userService" class="com.aisi.userman.service.impl.UserServiceImpl"></bean>
    -->
    <!-- 配置数据库连接池 -->
    <bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
    <value>classpath:jdbc.properties</value>
    </property>
    </bean> <!-- 配置DataSource数据源 -->
    <bean id="myDataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    </bean>
    <!-- 配置sessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <!--  <property name="packagesToScan">
    <list>
    <value>com.aisi.userman.model</value>
    </list>
    </property>-->
    <property name="annotatedClasses"> 
    <list> 
    <value>com.swlz.groupon.model.Userinfo</value> 
    </list> 
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    </bean>
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!-- Spring关于事务的TransactionManager配置 -->
    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <!-- spring具体事务配置 -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
    <tx:method name="save*" read-only="false"/>
    <tx:method name="do*" read-only="false"/>
    <tx:method name="find*" read-only="false"/>
    <tx:method name="upd*" read-only="false"/>
    <tx:method name="del*" read-only="false"/>
    </tx:attributes>
    </tx:advice>

    <!-- spring的AOP事务处理 -->
    <aop:config>
    <aop:pointcut    id="transactionPointcut" expression="execution(public * com.swlz.groupon.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
    </aop:config>
    </beans>
    action代码如下
    @Scope("prototype")
    @Component("userAction")
    public class UserAction extends ActionSupport implements ModelDriven { private UserService userService;
    private Userinfo user = new Userinfo();// Struts2用ModelDriven自动装配需要new实体
    private List<Userinfo> users; //注册的方法
    public String register() {
    String s = "";
    int role = 0;
    if (user.getLimit() ==0) {
    role = 0;
    } else {
    role =user.getLimit();
    }
    Userinfo newUser = null;
    user.setUiLoginId(user.getUiLoginId());
    user.setUiPassword(user.getUiPassword());
    user.setLimit(user.getLimit());
    System.out.println(user.getUiLoginId() + "=========>"
    + user.getUiPassword());
    newUser = userService.add(user);
    System.out.println(newUser.getUiLoginId() + "---------"
    + newUser.getUiPassword());
    if (newUser != null) {
    s = "success";
    System.out.println(s);
    return s; } else {
    return "error";
    }
    }
    //登陆
    public String doLogin() {
    user.setUiLoginId(user.getUiLoginId());
    user.setUiPassword(user.getUiPassword());
     System.out.println("username===="+user.getUiLoginId()+"+_+"+"userpwd==="+user.getUiPassword());
    if (userService.doLogin(user) != null) {
    if (userService.doLogin(user).equals("man")) {
    System.out.println("管理员");
    return "doLoginManager";
    } else {
    return "doLoginsuccess";
    }
    } else {
    System.out.println("userService.doLogin(user)为null");
    }
    return "fail";
    }
    求解决啊 
      

  2.   

    把这个struts.xml中的com.swlz.groupon.action.UserAction的这个玩样替换为userAction,也就是@Component("userAction")的这个名称,这样action就由spring管理了
      

  3.   

    貌似UserService 这个没注入进去你的Action....你怎么注入的
      

  4.   

    没看到你实例化userService,在spring中又没配置,没有注入给action ,所以要在action这里就要报错了,你应该把userService配置到spring中,在action中通过applicationContext来得到,或者 你直接把action交spring来管理,再着你也可以用@的方式来注入
      

  5.   

    找到问题了 多谢你哦  我的userService是个接口已经生了get set方法了  问题是我自己的一个失误  丢人啊