本人郁闷啊,难道UserService没有注入到Action中啊??求高人解答
java.lang.NullPointerException
com.portal.user.web.UserAction.login(UserAction.java:44)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)UserAction代码:
package com.portal.user.web;import java.util.Map;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.portal.user.model.User;
import com.portal.user.service.IUserService;//通过实现ModelDriven来获取表单的内容
public class UserAction extends ActionSupport implements ModelDriven<User>{
private static final Logger log =
(Logger) LoggerFactory.getLogger(UserAction.class);
private IUserService userService;

private User model = new User();
//private String username;  
    //private String password;
    //private String email;
    
    @Override
public User getModel() {
// TODO Auto-generated method stub
return model;
}
//依赖注入业务逻辑组件
public void setUserService(IUserService userService) {
this.userService = userService;
}

/*
 * 处理用户登录
 * */
public String login(){
log.debug("user login!");
Map session = ActionContext.getContext().getSession();
//获取用户请求的表单的值
try{
//查找是否有该用户
int va = userService.login(model.getUserName(), model.getPassWord());
//如果没有,返回错误界面
if(va!=-1){
//把用户名放入session对象
session.put("username", model.getUserName());
userService.addUser(model);
return SUCCESS;
}
}catch(RuntimeException e){
log.error("login failed", e);
throw e;
}
return LOGIN;
}

/**
 * 用户注册
 * */
public String register()throws Exception{
log.debug("User register!");
int emailnum=1;
//try{
//查找用户名是否已经存在
int va = userService.findUserByName(model.getUserName());
if(va!=-1){
//邮箱是否注册过了
emailnum = userService.findByEmail(model.getEmail());
if(emailnum!=-1){
userService.addUser(model);
return SUCCESS;
}
}
return INPUT;
}
}
application中的配置:
<bean id="UserDAO" class="com.portal.user.dao.UserDAO">
     <property name="sessionFactory">
     <ref bean="sessionFactory"></ref>
     </property>
    </bean>
    <!-- 部署业务逻辑组件,并把它所依赖的DAO组件注入到业务逻辑组件中 -->
    <bean id="UserService" class="com.portal.user.service.UserService">
     <property name="userDAO" ref="UserDAO"></property>
    </bean>
    <!-- 把业务逻辑组件注入到Action中 -->
    <bean id="UserAction" class="com.portal.user.web.UserAction">
     <property name="userService" ref="UserService"></property>
    </bean>本人根据异常的断点来看
44行的  int va = userService.login(model.getUserName(), model.getPassWord());这句 userService的值是null,是不是这个原因呢? 他应该注入到action中了的,奇怪了。

解决方案 »

  1.   

    userService.login(model.getUserName(), model.getPassWord())  model是有值的,获得了表单的内容
      

  2.   

    你的action的范围也有问题,bean的范围默认是单例,action是web的,能单例?
      

  3.   

    不是很理解。
    错误的信息是:
    HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionjava.lang.NullPointerException
    com.portal.user.web.UserAction.login(UserAction.java:47)
    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)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.30 logs.Apache Tomcat/6.0.30
      

  4.   

    不好意思,是47行的 int va = userService.login(model.getUserName(), model.getPassWord())
      

  5.   

    难道是配置文件有误? 配置顺序有问题吗?<?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/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
                http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="com.mysql.jdbc.Driver">
    </property>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"></property>
    <property name="username" value="root"></property>
    </bean>
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource"></ref>
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>

    <value>com/portal/user/model/User.hbm.xml</value></list>
    </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="save*" propagation="REQUIRED" />
     <tx:method name="update*" propagation="REQUIRED" />
     <tx:method name="delete*" propagation="REQUIRED" />
     <tx:method name="add*" propagation="REQUIRED" />
     <tx:method name="del*" propagation="REQUIRED" />
     <tx:method name="*" read-only="true" />
     </tx:attributes>
        </tx:advice>
        <!-- 哪些类的方法参与事物 -->
        <!-- 配置一个切入点,匹配com.portal.*.service包下
    所有的类的所有方法的执行 -->
        <aop:config>
     <aop:pointcut id="allServiceMethod" expression="execution(* com.portal.*.service.*.*(..))" />
     <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" />
        </aop:config>

    <!--项目的开发  -->
    <!-- 用户Bean的-->
    <bean id="UserDAO" class="com.portal.user.dao.UserDAO">
         <property name="sessionFactory">
         <ref bean="sessionFactory"></ref>
         </property>
        </bean>
        <!-- 部署业务逻辑组件,并把它所依赖的DAO组件注入到业务逻辑组件中 -->
        <bean id="UserService" class="com.portal.user.service.UserService">
         <property name="userDAO" ref="UserDAO"></property>
        </bean>
        <!-- 把业务逻辑组件注入到Action中 -->
        <bean id="UserAction" class="com.portal.user.web.UserAction">
         <property name="userService" ref="UserService"></property>
        </bean>
    </beans>
      

  6.   

    看起来没问题,
    你调试一下,看dao是不是空的
      

  7.   

    哎,我做service的单元测试的时候,说是没有名为UserDAO的bean,这可奇怪了,
    测试类:
    package com.portal.user.service;import static org.junit.Assert.*;import java.util.List;import org.junit.Test;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;import com.portal.user.dao.UserDAO;
    import com.portal.user.model.User;public class DAOTest {
    public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");
    @Test
    public void testSave() {
    //不用spring注入的话就自己new一个dao出来
      UserDAO dao1 = (UserDAO)factory.getBean("UserDAO");
      List<User> list = dao1.findAll();
      User user = list.get(0);
      System.out.print(user.getUserName());

     }}JUNIT的失败信息怎么就没有UserDAO呢,配置我没写错啊,求解啊,大哥们org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'UserDAO' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:509)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1041)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:273)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1044)
    at com.portal.user.service.DAOTest.testSave(DAOTest.java:94)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
      

  8.   

    单元测试DAOpackage com.portal.user.service;import static org.junit.Assert.*;import java.util.List;import org.junit.Test;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;import com.portal.user.dao.UserDAO;
    import com.portal.user.model.User;public class DAOTest {
    public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    @Test
    public void testSave() {
    //不用spring注入的话就自己new一个dao出来
      UserDAO dao1 = (UserDAO)factory.getBean("UserDAO");
      List<User> list = dao1.findAll();
      User user = list.get(0);
      System.out.println(user.getUserName());
      System.out.println(user.getEmail());
    //dao1.get(xx);dao1.update(xx);dao1.delete(xx); - c、r、u、d操作
     }}输出:
    123456
    23456
    说明DAO注入到了service中,没有问题。测试UserAction,是否UserService注入到了Action中package com.portal.user.web;import static org.junit.Assert.*;import org.junit.Test;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;import com.portal.user.service.UserService;public class ServiceTest { @Test
    public void testGetModel() {
    fail("Not yet implemented");
    }
    public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    @Test
    public void testTest() {
    //不用spring注入的话就自己new一个dao出来
      UserService us = (UserService)factory.getBean("UserService");
      us.Test();
    }
    }但是有错误啊,java.lang.ClassCastException: $Proxy4 cannot be cast to com.portal.user.service.UserService
    at com.portal.user.web.ServiceTest.testTest(ServiceTest.java:21)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    这是怎么回事啊,我检查了我bean配置,应该没有问题的啊。
      

  9.   

    @8楼
    public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");这个applicationContext-*.xml和下文中的applicationContext.xml不同,是不是有问题呢?没有UserDAO应该就是因为文件名称错误导致的@9楼
    这个问题确实有点儿奇怪,UserService的类型就是com.portal.user.service.UserService
    ,难道有多个id为UserService的bean,应该也不大可能
    讨论:最近几天也遇到类似的一个问题,但是不太一样,JUnit测试Service中可以注入DAO,Action中可以注入Service,可是部署成Web项目之后,访问Action就提示Service异常NullPointException,怎么个情况呢?Spring.xml<!-- DAO -->
    <bean id="demoDao" class="org.xianfeng.hibernate.dao.HibernateDaoImpl">
    <constructor-arg>
    <value>org.xianfeng.ssh.demo.entity.DemoEntity</value>
    </constructor-arg>
    <property name="dataSource" ref="dataSource" />
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <!-- Service -->
    <bean name="demoService" class="org.xianfeng.ssh.demo.service.DemoService" scope="prototype">
    <property name="demoDao" ref="demoDao"/>  
    </bean>

    <!-- Action  -->
    <bean name="demoAction" class="org.xianfeng.ssh.demo.action.DemoAction" scope="prototype">  
    <property name="demoService" ref="demoService"/>  
    </bean>      Struts.xml<package name="demo" namespace="/demo" extends="struts-default">
    <action name="Demo" class="org.xianfeng.ssh.demo.action.DemoAction" method="execute">
    <result name="success">success.jsp</result>
    <result name="failed">failed.jsp</result>
    </action>
    </package>Struts2.2.3.1.GA+Spring3.0.6.RELEASE+Hibernate3.3.2.GA
    路过的朋友,帮忙看看,纠结好几天了,jar包什么的应该没有太大问题
    struts2-spring-plugin-2.2.3.1.jar也有
      

  10.   

    private IUserService userService;
    这句是什么意思???
      

  11.   

    lz的问题应该解决了吧,帖子都结了,谢谢给的分哦我的问题也解决了,是web.xml中关于Spring的参数contextConfigLocation出了问题,没有加载上Spring的配置文件,所以Ioc注入的Bean都无效,导致NullPointException
      

  12.   

    嗯?我的相关配置没有配好,像一些bean 和action。用spring来管理bean,那么struts中action应该配置成这样:
    例如在applicationContext中:
    <bean id="LoginAction" class="com.portal.user.action.LoginAction" scope="prototype">
         <property name="userService" ref="UserService"></property>
        </bean>
        <bean id="RegisterAction" class="com.portal.user.action.RegisterAction" scope="prototype">
         <property name="userService" ref="UserService"></property>
        </bean>
    那么struts中action配置成:
    <action name="login" class="LoginAction" method="userLogin">
       <result name="success">/success.jsp</result>
      <result name="input">/login.jsp</result>
      </action>
      <action name="register" class="RegisterAction" method="regist">
       <result name="success">/success.jsp</result>
      <result name="input">/register.jsp</result>
      </action>
    也就是说struts中class的路径应是applicationContext中bean的id;
    我当时是没有配好,所以出现那个问题。
    希望对你有帮助
      

  13.   

    说实在的,不是看到你这个问题,我估计我都想放弃这个问题了,我和你同样的问题,搞的我头都大了。之前我一直是用注解配置框架,换成XML后好多地方都不一样,唯一让人容易忽略的就是struts中class的路径应是applicationContext中bean的id,所以,切记切记!!!