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

<beanid="StaffDAO"class="com.jyx.dao.StaffDAO"><propertyname="sessionFactory"><refbea... <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。
展开
 我来答
1vs1_IceFish
推荐于2018-05-09 · TA获得超过966个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:116万
展开全部

1.service为null的情况一般有几种情况:spring的配置文件没有配置;依赖注入由于写的不仔细而没有实现注入等原因。首先检查是否在spring的配置文件中注入了你想要的service如果有,检查是否因为大小写的小错误而不能实现注入。

2.可以在action的这样处理:

让action继承一个自己编写的BaseAction 在让BaseAction去继承DispatchAction 在BaseAction中实现service的获取

public class BaseAction extends DispatchAction{

protected Object getBean(String id){

WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(this.servlet.getServletContext());

return context.getBean(id);

}

}

然后在你的action中就可以直接通过方法得到你想要的service。

IService service = (IService) getBean("你想要的service");

你就可以用service调用你的CRUD方法执行了!

这里主要用到的是spring的DI(依赖注入)spring的核心之一!

死亡幽谷
2012-06-18 · TA获得超过248个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:135万
展开全部
使用ssh的时候,service实例是不需要自己new 的.而是交由spring管理,并注入.你只要写istaffService和istaffService的setter方法,到时候spring 会帮你注入实例.
更多追问追答
追问
我去掉了new 但还是出现同样的异常并且调试的时候也进不了DAO就报错了。
追答
你把你的实现类StaffService拿出来看看,是不是你没有用实现类实现接口?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
示申言舌2019
2012-08-09
知道答主
回答量:18
采纳率:0%
帮助的人:1.8万
展开全部
缺少一个 jar 包 ,缺少 struts-spring-plugin 的插件包。如果Action 类要依赖spring注入,就必须加入这个 jar 包
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幸福只是种传说
2012-06-18 · 超过14用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:40万
展开全部
这不是报service是null

StaffService.findByExample(StaffService.java:27)

说的是StaffService的第27行抛了NullPointerException, 你看看那行的代码
更多追问追答
追问
不是这个原因,因为我调其他的方法也会出现同样的异常。
追答
你看看是不是getHibernateTemplate()返回的是null
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
温存永久的故事
2012-06-18
知道答主
回答量:15
采纳率:0%
帮助的人:11.8万
展开全部
那就是Service接口没有注入进去.spring没有管到.再查查看.
追问
对应的东西我都发上来了,似乎没看出什么问题来,我自己写的测试类可以成功返回数据:
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式