今天刚学了spring,就快速使用Myeclipse搭建了一个spring框架的简单例子。(包是MyEclipse提供的)然后出现以下错误:
java.lang.NullPointerException
action.UserAction.findAll(UserAction.java:22)
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)
我使用单元测试后台代码都没问题。贴上代码让大家看看:
package action;import java.util.List;import service.Inface.UserServiceDao;import com.opensymphony.xwork2.Action;import entity.User;
public class UserAction implements Action{ private UserServiceDao service;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
} public String findAll(){
List<User> lists=service.findAll();
for (User user : lists) {
System.out.println(user.getName());
}
return SUCCESS;
} /**
 * @return the service
 */
public UserServiceDao getService() {
return service;
} /**
 * @param service the service to set
 */
public void setService(UserServiceDao service) {
this.service = service;
}
}还有个web.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- spring context -->
  <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
   classpath:applicationContext.xml
   </param-value>
  </context-param>
  
  <filter>
   <filter-name>struts2</filter-name>
   <filter-class>
   org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
   </filter-class>
  </filter>
  <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>*.action</url-pattern>
  </filter-mapping></web-app>
我的applicationContext.xml就放在src下。求大家解决一下,在下感激万分!

解决方案 »

  1.   

    空指针异常/
    List<User> lists=service.findAll();
            for (User user : lists) {
                System.out.println(user.getName());
            }
    lists有值吗?
      

  2.   

    说错了,是这个service对象为空,所以lists也为空
      

  3.   

    action里
    private UserServiceDao service;这里换成new的方式、
      

  4.   

    换成new后,只是解决了service对象不为空,但是spring替换对象的功能去哪了,不知道我的spring欠缺了什么,我觉得我是加载不了spring的配置文件
      

  5.   

    把你spring文件发出来看看。加载肯定是加载了。看看注入的正确否
      

  6.   

    <?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="userDao" class="dao.Imle.UserDaoImle"></bean>
    <bean id="userImpl" class="service.Impl.UserServiceImpl" >
    <property name="userDao" ref="userDao"></property>
    </bean>
    </beans>
      

  7.   

    package service.Impl;import java.util.List;import dao.Inface.UserDao;import entity.User;
    import service.Inface.UserServiceDao;public class UserServiceImpl implements UserServiceDao {

    private UserDao userDao;
    @Override
    public List<User> findAll() {

    return userDao.findAll();
    }
    /**
     * @return the userDao
     */
    public UserDao getUserDao() {
    return userDao;
    }
    /**
     * @param userDao the userDao to set
     */
    public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
    }}
      

  8.   

    你好像没有把action注入Spring、
    <bean id="UserAction " class="com.xxxxx.action.UserAction ">
    <property name="service" ref="userImpl"></property>
    </bean>
    这样再   private UserServiceDao service;
    service应该不会为空了、把action交给spring管理还要修改struts配置文件
    添加<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
    还有class="UserAction "这个class的值就是action的bean的id
      

  9.   

    http://download.csdn.net/detail/java_devil/3619727这是我原来刚学习的时候整理的SSH的笔记。都附带源码。有兴趣可以瞧瞧、。
      

  10.   

    好感谢你,情况基本上就如你所说的,最后我在struts.xml加上了<constant name="struts.objectFactory.spring.autoWire" value="type"/>,还有struts交给spring管理,我加了个struts2-spring-plugin-2.0.11包就不用再spring配置文件注入userImpl。