我在我的应用程序中使用struts2和hibernate。我已将ContextLoaderListener添加到web.xml
。
在ApplicationContext.xml
中,我有2个像这样的bean:
<bean id="TestImpl"
class="Service.Impl.TestImpl">
</bean>
<bean id="testaction"
class="Action.TestAction">
<property name="TestIml" ref="TestImpl"/>
</bean>
在TestAction类中,我有一个对象和这个对象的方法,如下所示:
private TestImpl test1;
String m = test1.testService();
它也得到并设定。 当我运行这个项目时,谈到
String m = test1.testService()
出现nullPointerException。 我不确定所有配置是否正确完成或错过了什么。 请帮忙。
答案 0 :(得分:1)
由于您已经在使用Struts2 + Spring,为什么不使用他们的插件?可以找到here
通过使用该插件,您可以更紧密地集成到Struts 2.这使您能够将bean注入内部框架对象,而不仅仅是自己的bean。
例如,使用插件Struts 2将检查您的所有操作,当它创建它们以服务请求时,并注入它们。默认情况下,Struts2-spring插件按名称使用autowire。例如,在您的操作类中,您有此代码。
public class LoginAction extends UserAction{
public String execute() {
return "success";
}
public AuthenticateLoginService getAuthenticateLoginService() {
return authenticateLoginService;
}
public void setAuthenticateLoginService(
AuthenticateLoginService authenticateLoginService) {
this.authenticateLoginService = authenticateLoginService;
}
private AuthenticateLoginService authenticateLoginService;
}
在您的applicationContext.xml中,您可以进行此配置。
<bean id="authenticateLoginService" class="services.AuthenticateLoginService"
scope="singleton">
<... some properties here
</bean>
所有具有名为“authenticateLoginService”的实例变量的Action Classes然后将authenticateLoginService
bean注入到具有名为authenticateLoginService
的实例变量的所有类中,前提是它具有setter和吸气剂
答案 1 :(得分:0)
test1
null
是null pointer exception
在String m = test1.testService()
行投放property name="test1"
的原因。
我不确定,但你可以尝试一下。
property name="TestIml"
代替{{1}}