执行时网页报错:
java.lang.NullPointerException
com.action.LoginAction.login(LoginAction.java:39)
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:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

解决方案 »

  1.   

    public String login(){
            System.out.println("login");
            System.out.println("username:" + username);
            System.out.println("password:" + password);
            boolean flag = this.loginservice.login(username, password);//调用数据库查询方法,验证用户名、密码
            if(flag){
                return "Success";
            }else{
                return "input";
            }
        }
    在这个方法加个断点,跟进去看看哪个对象是空的。
      

  2.   

    boolean flag = this.loginservice.login(username, password);这里出错上面的可以输出
    login
    username:123
    password:123
      

  3.   

    让你断点跟到
    boolean flag = this.loginservice.login(username, password);//调用数据库查询方法,验证用户名、密码
    句,看看有对象是空的不。
    如果不是空的,步入这个方法,继续看有哪些对象是空了。
      

  4.   

    是不是这个意思?
    <!-- Action注入 service  id="" 注入 class="action路径" name="loginservice"与LoginAction中声明的要保持一致 -->请问具体要怎么处理??
      

  5.   

    好像你这个注入法有问题呀!  <!--  DAO注入sessionFactory -->
        <bean id="logind" class="com.persistence.LoginDAOImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
         <bean id="logins" class="com.service.LoginServiceImpl" >
           <property name="logindao" ref="logind"/>
       </bean>
       <bean id="com.action.LoginAction" class="com.action.LoginAction" scope="prototype">
           <property name="loginservice" ref="logins"/>
       </bean>
      

  6.   

    好像你这个注入法有问题呀!  <!--  DAO注入sessionFactory -->
        <bean id="logind" class="com.persistence.LoginDAOImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
         <bean id="logins" class="com.service.LoginServiceImpl" >
           <property name="logindao" ref="logind"/>
       </bean>
       <bean id="com.action.LoginAction" class="com.action.LoginAction" scope="prototype">
           <property name="loginservice" ref="logins"/>
       </bean>
    根本就是乱写的,没有搞清楚注入的用法。
      

  7.   

    com.action.LoginAction  因为名字与类名一样,有可能struts 的factory没有启用spring  factory,而是用的自己的factory,所以没注入
      

  8.   

    <!-- 指定由spring负责action对象的创建 -->
    <constant name="struts.objectFactory" value="spring" />
      

  9.   

    就是这个。
    提示的很明显了,service 实例为 null 值。
      

  10.   


    请问怎么解决这个问题呀。这明显就是个注入问题。  <!--  DAO注入sessionFactory -->
        <bean  class="com.persistence.LoginDAOImpl">
            <property name="logind" ref="sessionFactory"/>
        </bean>
         <bean  class="com.service.LoginServiceImpl" >
           <property name="loginservice" ref="logind"/>
       </bean>
       <bean  class="com.action.LoginAction" scope="prototype">
           <property name="loginAction" ref="loginservice"/>
       </bean>
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
        <package name="default" extends="struts-default" namespace="/">
            <action name="Login" class="loginAction" method="login">
                <result name="input">/login.jsp</result>
                <result name="Success">/index.jsp</result>
            </action>
        </package>   
    </struts>   
      

  11.   


    请问怎么解决这个问题呀。这明显就是个注入问题。  <!--  DAO注入sessionFactory -->
        <bean  class="com.persistence.LoginDAOImpl">
            <property name="logind" ref="sessionFactory"/>
        </bean>
         <bean  class="com.service.LoginServiceImpl" >
           <property name="loginservice" ref="logind"/>
       </bean>
       <bean  class="com.action.LoginAction" scope="prototype">
           <property name="loginAction" ref="loginservice"/>
       </bean>
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
        <package name="default" extends="struts-default" namespace="/">
            <action name="Login" class="loginAction" method="login">
                <result name="input">/login.jsp</result>
                <result name="Success">/index.jsp</result>
            </action>
        </package>   
    </struts>   <!--  DAO注入sessionFactory -->
    <bean id="logind" class="com.persistence.LoginDAOImpl">
    <!-- 注入持久化操作所需的SessionFactory -->
    <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
     <!--service注入dao id为下面的ref  class为 service实现类 name="service实现类中声明的dao"-->
     <bean id="logins" class="com.service.LoginServiceImpl" >
           <property name="logindao" ref="logind"/>
       </bean>
       <!-- Action注入 service  id="" 注入 class="action路径" name="loginservice"与LoginAction中声明的要保持一致 ref随便取-->
       <bean id="com.action.LoginAction" class="com.action.LoginAction" scope="prototype">
           <property name="loginservice" ref="logins"/>
       </bean>
    换成
     <!--  DAO注入sessionFactory -->
        <bean  class="com.persistence.LoginDAOImpl">
            <property name="logind" ref="sessionFactory"/>
        </bean>
         <bean  class="com.service.LoginServiceImpl" >
           <property name="loginservice" ref="logind"/>
       </bean>
       <bean  class="com.action.LoginAction" scope="prototype">
           <property name="loginAction" ref="loginservice"/>
       </bean>
    出错呀,还是别的什么意思?
      

  12.   

    <!-- 指定由spring负责action对象的创建 -->
    <constant name="struts.objectFactory" value="spring" />
    这个struts都不加上,spring等于没用一样,。。
      

  13.   

    我没有用过id注入,但是看你的代码:
    LoginServiceImpl :中
      private LoginDAO logindao;
        public void setLogindao(LoginDAOImpl login) {
            this.logindao = login;
        }

    LoginAction :中
    public void setLoginservice(LoginService loginservice) {
            this.loginservice = loginservice;
        }
    明显不同!
      

  14.   

    竟然是ssh项目,那么action实例应该也是用spring容器创建,你容器那里的bean一团糟。你现在解决没,如果还没解决,我起来发我做的给你看下,我也是初学者。可以交流交流
      

  15.   

    看了下,貌似没什么问题。
    把这里面的   <bean id="com.action.LoginAction" class="com.action.LoginAction" scope="prototype">
           <property name="loginservice" ref="logins"/>
       </bean> com.action.LoginAction这个换成loginA,<package name="default" extends="struts-default" namespace="/">
            <action name="Login" class="com.action.LoginAction" method="login">
                <result name="input">/login.jsp</result>
                <result name="Success">/index.jsp</result>
            </action>
        </package>   这里面的com.action.LoginAction 换成对应的loginA