SSH集成时action里的service接口总是为null,最后执行到操作数据库时出现空指针异常。而自己写测试类能成�

放肆的青春-_- 发布于 2012/06/18 11:08
阅读 5K+
收藏 0
<bean id="StaffDAO" class="com.jyx.dao.StaffDAO">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<!-- <property name="istaffService" ref="istaffService"/> -->
	<bean id="istaffService" class="com.jyx.service.impl.StaffService">
	 		<property name="staffDAO" ref="StaffDAO"/>
	 </bean>
	 
	<bean id="loginAction" class="com.jyx.struts.action.LoginAction" scope="prototype">
	 		<property name="istaffService">
	 			<ref bean="istaffService"/>
	 		</property>
	</bean>
最后控制台出现空指针异常:

严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
    at com.jyx.service.impl.StaffService.findByExample(StaffService.java:27)
    at com.jyx.struts.action.LoginAction.execute(LoginAction.java:48)
    at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

    at java.lang.Thread.run(Thread.java:619)

//action的loginForm中是可以得到值的,只是其service接口一直为null。

加载中
0
被风遗忘
被风遗忘
那就是Service接口没有注入进去.spring没有管到.再查查看.
放肆的青春-_-
放肆的青春-_-
对应的东西我都发上来了,似乎没看出什么问题来,我自己写的测试类可以成功返回数据: http://hiphotos.baidu.com/zhidao/pic/item/d8f9d72a5f303fb6d52af160.jpg
0
lwei
lwei

从你贴出来的代码看,问题应该在这一行,

<bean id="StaffDAO" class="com.jyx.dao.StaffDAO">

id字段首字母不应该大写,我猜你的autowire应该是byName

改成小写吧

<bean id="staffDAO" class="com.jyx.dao.StaffDAO">

0
菜蚜
菜蚜
dao没注入进去,注意下大小写。
0
情天大圣
情天大圣

楼主,您这是在干嘛,都依赖注入了,还要new么?还有,依赖注入只需要实现set方法:

而且不要乱贴代码,现在是你业务层报空指针异常,你贴action代码有何用?

我猜是你dao的注入有问题!

还有,OSC有贴代码的功能,你干嘛不用?

0
xwz
xwz

很显然是没有注入进去, 出现这种情况可能有两种原因:

1 大小写(根据代码, 不太可能)

2 在加载spring的时候,istaffService并没有实例化成功. 看看初始化后台的报错(加载spring)吧!

0
zhousanity
zhousanity
action内service的实例会自动new方法,不需要实例化,而且

<bean id="StaffDAO" class="com.jyx.dao.StaffDAO">

id名和service中第一的StaffDAO的对象一样!

最好方法是自己写一个,不要默认执行execute的方法!
0
王二铁
王二铁
我也觉得是 istaffService没实例化成功,就看下初始化时后来是不是报错。你测试的时候既然没有问题,那就应该是注入时出的问题。
0
小杨阿哥哥
小杨阿哥哥
 <bean id="loginAction" class="com.jyx.struts.action.LoginAction"scope="prototype">
13             <property name="istaffService">
14                 <ref bean="istaffService"/>
15             </property>
16

    </bean>


这有问题

0
小杨阿哥哥
小杨阿哥哥

引用来自“未命名”的答案

 <bean id="loginAction" class="com.jyx.struts.action.LoginAction"scope="prototype">
13             <property name="istaffService">
14                 <ref bean="istaffService"/>
15             </property>
16

    </bean>


这有问题

我记得struts1 spring 整合的时候给action里面注入东西是将sturts配置里面的action type 写成 spring里面配置的bean的name.

这里应该使用name吧?

0
点击此处
点击此处
命名不规范是注入不进去的楼主!看楼上又哥们已经提出来了!
返回顶部
顶部