exception javax.servlet.ServletException
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
root cause java.lang.NullPointerException
com.crud.action.UserAction.execute(UserAction.java:48)
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:585)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling

解决方案 »

  1.   

    基本上就是这样。还有我的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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <bean id="dataSource"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/wcd"></property>
    </bean>
    <!--<bean id="dataSource"
    class="org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter">
    <property name="targetDataSource">
    <ref bean="dataSourcetarget" />
    </property>
    <property name="username" value="wang"></property>
    <property name="password" value="wangpwd"></property>
    </bean>-->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.Oracle9Dialect
    </prop>
    <prop key="show_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>com/crud/modelBean/Test.hbm.xml</value>
    </list>
    </property>
    </bean>
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref bean="sessionFactory"/>
    </property>
    </bean>

        <bean id="usi" class="com.crud.services.impl.UserServicesImpl">
         <property name="ud" ref="ud"/>
        </bean>
    <bean id="ud" class="com.crud.dao.impl.UsersImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
        
    </beans>
      

  2.   

    UserAction.java:48
    UserAction.java的48行错,先找到那一行
      

  3.   

    boolean   flag   =   usi.registUsers(username,   pwd,   address,   truename); 
    报的就是这个错,是调用业务逻辑的错误?会不会是配置方面有错呢?
    在WEB。XML里我有申明了DATASOURCE了如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      
      <filter>
    <filter-name>struts2-cleanup</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
      </filter>
      <filter-mapping>
       <filter-name>struts2-cleanup</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
      </filter>
      <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      <!--<servlet>
    <servlet-name>dwr</servlet-name>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    <init-param>
    <param-name>debug</param-name>
    <param-value>true</param-value>
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>dwr</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
      
      --><resource-ref>
        <description>DataSource test</description>
        <res-ref-name>jdbc/wcd</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>
      
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
      

  4.   

    com.crud.action.UserAction.execute(UserAction.java:48) 
    UserAction第48行是什么?
      

  5.   

    boolean flag = usi.registUsers(username, pwd,address,truename); 
    就是这一行
    是调用的UserServicesImpl里的方法
      

  6.   

    你Action里面是否注入了你的Service?
    也就是说boolean flag = usi.registUsers(username, pwd, address, truename);
    中的usi是否已经代理了?   
      

  7.   

    已经注入了,如何代理,我的SPRING配置文件也在上面?
    我的ACTION文件:package com.crud.action;import com.crud.services.impl.UserServicesImpl;
    import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {
    private UserServicesImpl usi;
    private String username;
    private String pwd;
    private String address;
    private String truename;
    private String rePwd;
    public String getRePwd() {
    return rePwd;
    }
    public void setRePwd(String rePwd) {
    this.rePwd = rePwd;
    }
    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }
    public String getPwd() {
    return pwd;
    }
    public void setPwd(String pwd) {
    this.pwd = pwd;
    }
    public String getAddress() {
    return address;
    }
    public void setAddress(String address) {
    this.address = address;
    }
    public String getTruename() {
    return truename;
    }
    public void setTruename(String truename) {
    this.truename = truename;
    }
    public void setUsi(UserServicesImpl usi) {
    this.usi = usi;
    }

    public String execute() {
    boolean flag = usi.registUsers(username, pwd, address, truename);
    System.out.println("**********" + flag);
    if (flag == true) {
    return SUCCESS;
    } else {
    addActionError("注册用户名时出错!");
    return ERROR;
    }
    }
    }
      

  8.   

    这里的UserAction中的UserServicesImpl 没有初始化,你应该在Spring的配置文件中给UserAction注入UserServicesImpl或者在UserAction中使用new构造一个UserSerivceImpl
      

  9.   

    情况1:如果你的UserAction也是由Spring来管理的,那么你只要在配置中给UserAction注入userServicesImpl就可以了
    情况2:如果你的UserAction不由Spring管理,那么你需要从BeanFactory中去拿一下这个bean,最好不要去new一个吧
      

  10.   

    楼主 很搞笑
    if(e)
    system“我草,出错了”else
    system("我草,通过了 ")
      

  11.   

    楼上的两位朋友,我的SPRING文件也在上面,你看哪里错了,帮我改下好吗?贴在下面,呵呵,SPRING初学
    刚才我又把ACTION文件改了下把业务逻辑里的TEST移到ACTION里边实例化直接在ACTION里获取信息也没用。。
    但是我action里打印出来的username,password,address和truename全是能获取的!就是boolean   flag   =   usi.registUsers(username,   pwd,   address,   truename); 
    出的错可能SPRING没配置好吧,谢谢各位了!
      

  12.   

    顺便说下我没把struts2集成到SPRING里
      

  13.   

    “刚才我又把ACTION文件改了下把业务逻辑里的TEST移到ACTION里边实例化直接在ACTION里获取信息也没用。。 ”
    我不太明白这句话是什么意思?LZ说一下啊
    建议:既然你已经用了Spring,我建议你把Action也用Spring管理好了,这样就可以比较方便的取到注入一些bean,否则话你要用Spring的基本方式,比如
    ApplicationContext ctx = new FileSystemXmlApplicationContext("WEB-INF/beans.xml");
    TestBean t = (TestBean) ctx.getBean("testBean");
    System.out.println(t.sayHello());
    来取到一些bean,当然你也可以写个父类,然后继承一下,反正你自己斟酌一下看
      

  14.   

    哦,我知道了,谢谢楼上的朋友,我把STRUTS2集成到SPRING里去吧,呵呵,比较麻烦,2个配置文件全要写~