action里执行到这句
List reptAgilityConfigList = reptAgilityConfigDAO.findByProperty"localNetId", "351");
就报
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
错误。
就好象spring的配置文件没写一样。
我的action:
private ReptAgilityConfigDAO reptAgilityConfigDAO; public ReptAgilityConfigDAO getReptAgilityConfigDAO() {
return reptAgilityConfigDAO;
} public void setReptAgilityConfigDAO(
ReptAgilityConfigDAO reptAgilityConfigDAO) {
this.reptAgilityConfigDAO = reptAgilityConfigDAO;
} public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserSelectForm userSelectForm = (UserSelectForm) form;// TODO
// Auto-generated
// method stub
log.debug("select");
if (userSelectForm.getUserName().equals("abc")
&& userSelectForm.getPassword().equals("123")) {
// reptAgilityConfigDAO = new ReptAgilityConfigDAO();
List reptAgilityConfigList = reptAgilityConfigDAO.findByProperty(
"localNetId", "351");
request
.setAttribute("reptAgilityConfigList",
reptAgilityConfigList);
return mapping.findForward("initIframe");
}
return mapping.findForward("input");
}
}
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@133.128.9.23:1521:test</value>
</property>
<property name="username">
<value>test</value>
</property>
<property name="password">
<value>test*</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>com/hibernate.cfg.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<bean id="ReptAgilityConfigDAO"
class="com.yourcompany.ReptAgilityConfigDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean name="/userSelect"
class="com.yourcompany.struts.action.UserSelectAction"
singleton="false">
<property name="reptAgilityConfigDAO">
<ref bean="ReptAgilityConfigDAO" />
</property>
</bean>
</beans>
这个问题郁闷我2周了,都快疯了,各位高手当初在学习的时候也一定有过这样的体会吧,所以请大家厚道一些,都进来帮帮我啊。
我只有这么些分,不够的话再开个帖字啊,大家一定要帮我。

解决方案 »

  1.   

    在struts-config.xml文件有这样的配置吗?
    <action path="/userSelect"
              type="org.springframework.web.struts.DelegatingActionProxy"
              scope="request">
     <forward name="success" path="/*.jsp"/>
    </action><plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
      <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
    </plug-in>
      

  2.   

    <bean id="ReptAgilityConfigDAO"
    class="com.yourcompany.ReptAgilityConfigDAO">这个和你aciton里头的不一样吧
    把id首字母改成小写试试看
      

  3.   

    List reptAgilityConfigList = reptAgilityConfigDAO.findByProperty"localNetId", "351");朋友,你能确定你这句就一定能返回个查询List吗?我的意思是,会不会在查询的过程中遇到了空指针异常,比如数据的为空,reptAgilityConfigDAO这个类中用没用到什么空对象。
      

  4.   

    <bean id="ReptAgilityConfigDAO"
    class="com.yourcompany.ReptAgilityConfigDAO">
    改成
    <bean id="reptAgilityConfigDAO"
    class="com.yourcompany.ReptAgilityConfigDAO">
    还是同样的错误。List reptAgilityConfigList = reptAgilityConfigDAO.findByProperty"localNetId", "351");
    我在调试的过程中看到参数都传递给了dao,所以参数不可能为空。至于返回的结果为空,我想也不太可能,因为返回类型是list,list完全可以为空。而且调试的时候还没进dao就出错了,问题就在这句话上,再他上面加句‘reptAgilityConfigDAO = new ReptAgilityConfigDAO();’就不是这个错误了说明根本就没有注入成功。也许我说的不对,衷心谢谢你们2位,继续帮助我啊。
      

  5.   

    回复zjf405
    没有啊,没有应该也可以吧?
      

  6.   

    没有应该不行,你spring、hibernate、struts都是什么版本的
      

  7.   

    我提供一个思路你看看吧第一,把你的bean id 以及配置相关引用的首字母改成小写
    spring的注入首字母大写似乎是会出问题第二,判断空指针的来源
    你在进入action时候打个断点看variable,debug状态下应该能看到是否注入
    不能注入多半是你的大小写问题我觉得看调试下的reptAgilityConfigDAO变量的值可以帮你找到错误在哪里
    这个变量应该在this下头
      

  8.   

    <property name="reptAgilityConfigDAO">
    <ref bean="ReptAgilityConfigDAO" />这部分你也改了吗?
      

  9.   

    <property name="reptAgilityConfigDAO">
    <ref bean="ReptAgilityConfigDAO" />
    这部分也改了,都改成首字母是小写的了,还是同样的错误。我的版本:
    struts 1.2,spring.jar 1.2.8(自己后加的),hibernate 3.0
    我下的例子里就没有在struts-config.xml加plug-in,好象仅仅是用spring做struts的代理的时候才这样,我就没有加,不知道我说的对不对。谢谢cynthia2kame提供的思路,我现在已经都改成小写的了。
    在打开断点的时候怎么看是否成功注入了啊,反正我只要一执行到List reptAgilityConfigList = reptAgilityConfigDAO.findByProperty"localNetId", "351");
    就出错,连ReptAgilityConfigDAO都进不去。
      

  10.   

    <bean id="ReptAgilityConfigDAO"
    class="com.yourcompany.ReptAgilityConfigDAO">
    这个DAO有impl文件吗,有的话用impl试试看呢
      

  11.   

    Action中是不能直接这么依赖注入的,必须利用框架,楼主可以看看这篇文章:(Struts调用Spring服务类的三种方法)
    http://stamen.javaeye.com/blog/24476
      

  12.   

    谢谢sureyor提供的帮助,我又重做了一下,也不知道是不是这个原因,反正问题解决了。现在节帖散分,进来的都有分。