Struts2 + Spring 3.2 + Hibernate 3 java.lang.NullPointerException in action(execute) [英] Struts2 + Spring 3.2 + Hibernate 3 java.lang.NullPointerException in action (execute)

查看:125
本文介绍了Struts2 + Spring 3.2 + Hibernate 3 java.lang.NullPointerException in action(execute)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



当我在列表中列出元素时出现此错误,但我不知道为什么。

>

我认为这个bean没有被创建,因为当 execute()
动作被调用时发生错误

Struts问题报告:

  Struts检测到一个未处理的异常:
消息:
文件:actions / ListingAction.java
行号:26

Stacktraces:

  java.lang.NullPointerException 
actions.ListingAction.execute(ListingAction.java:26)
sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymp hony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:446)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:285)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation。 java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
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:242)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
org.apache.struts2.interceptor.validation.Annotation ValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com。 opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation。 invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
com.opensymphony.xwork2.interceptor.MethodFilterIntercept or.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
com。 opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
com.opensymphony.xwork2.DefaultActionInvocation.invoke( DefaultActionInvocation.java:242)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.in terrier.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor。 java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor。 MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor。 java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544)
org。 apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java: 77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
com。 opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
org.apache.catalina.core。 ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:233)
org.springframework.web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:107)
org.apache.catalina.core.Applicati onFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve。 java:222)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache。 catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
org.apache.catalina.connector.CoyoteAdapter。服务(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
org.apache.co yote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent。 ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:895)
java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:918)
java.lang.Thread.run(Thread.java: 680)

web.xml

 <?xml version =1.0encoding =UTF-8?> 
< web-app 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
version =3.0>

< display-name> PFC< / display-name>

< welcome-file-list>
< welcome-file> index.html< / welcome-file>
< welcome-file> index.jsp< / welcome-file>
< / welcome-file-list>

<! - Spring - >>

< context-param>
< param-name> contextConfigLocation< / param-name>
< param-value>
/WEB-INF/applicationContext*.xml
< / param-value>
< / context-param>
< listener> <! - struts2弹簧插件必须工作 - >
< listener-class> org.springframework.web.context.ContextLoaderListener< / listener-class>
< / listener>
< listener>
< listener-class> org.springframework.web.util.IntrospectorCleanupListener< / listener-class>
< / listener>
< listener>
< listener-class> org.springframework.web.context.request.RequestContextListener< / listener-class>
< / listener>

< filter> <! - 获取spring以保持整个请求的会话打开,以便hibernate的延迟加载工作 - >
< filter-name> openSessionInViewFilter< / filter-name>
< filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter< / filter-class>
< / filter>

< filter-mapping>
< filter-name> openSessionInViewFilter< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

<! - Sitemesh(需要在struts之前) - >
< filter>
< filter-name> sitemesh< / filter-name>
< filter-class> com.opensymphony.sitemesh.webapp.SiteMeshFilter< / filter-class>
< / filter>

< filter-mapping>
< filter-name> sitemesh< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

<! - Struts2配置(需要在sitemesh之后) - >


< 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> / *< / url-pattern>
< / filter-mapping>

< session-config>
< session-timeout>
30
< / session-timeout>
< / session-config>

<! - Laconfiguraciónde los struts .. el nombre se se pone registro el fichero de confi-spring en registro-struts.xml - >


< / web-app>

applicationContext.xml

 <?xml version =1.0encoding =UTF-8?> 
< beans xmlns =http://www.springframework.org/schema/beans
xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
xmlns:aop =http://www.springframework.org/schema/aop
xmlns:tx =http://www.springframework.org/schema/tx
xsi :schemaLocation =http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http:// www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/ aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd\">


<! - 单例休眠会话工厂 - >
< bean id =sessionFactory
class =org.springframework.orm.hibernate3.LocalSessionFactoryBean>
< property name =configLocationvalue =classpath:hibernate.cfg.xml/>
< / bean>

<! - Spring的hibernate事务管理器,负责制作休眠会话/ txns - >
< bean id =transactionManager
class =org.springframework.orm.hibernate3.HibernateTransactionManager>
< property name =sessionFactoryref =sessionFactory/>
< / bean>

< bean id =sessionLocaleResolver
class =org.springframework.web.servlet.i18n.SessionLocaleResolver/>

< bean id =eventoServiceclass =services.EventoServicescope =singleton>
< property name =sessionFactoryref =sessionFactory/>
<! - 属性名称=sessionFactoryref =sessionFactory/ - >
< / bean>

< bean id =listingActionclass =actions.ListingAction>
< property name =serviceEventoref =eventoService/>
< / bean>


< / beans>



> struts.xml

 <?xml version =1.0encoding =UTF-8?> 
<!DOCTYPE struts PUBLIC
- // Apache Software Foundation // DTD Struts Configuration 2.3 // EN
http://struts.apache.org/dtds/struts- 2.3.dtd>

< struts>
< constant name =struts.devModevalue =true/> <! - 为prod设置为false - >

< constant name =struts.configuration.xml.reloadvalue =true/>

< package name =eventosextends =struts-default>
< action name =ListingActionclass =actions.ListingAction>
< result name =success> /vistas/eventos/Listing.jsp< / result>
< / action>
< / package>

< constant name =struts.objectFactoryvalue =org.apache.struts2.spring.StrutsSpringObjectFactory/>


< / struts>

hibernate.cfg.xml

 <?xml version ='1.0'encoding ='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC
- // Hibernate / Hibernate配置DTD // EN
http://hibernate.sourceforge.net/hibernate-configuration-3.0。 DTD>

< hibernate-configuration>
< session-factory>
< property name =hibernate.connection.driver_class> com.mysql.jdbc.Driver< / property>
< property name =hibernate.connection.url> JDBC:MySQL的://本地主机:3306 /事件< /性>
< property name =hibernate.connection.username> eventuser< / property>
< property name =connection.password> eventuser< / property>
< property name =connection.pool_size> 1< / property>
< property name =hibernate.dialect> org.hibernate.dialect.MySQLDialect< /性>
< property name =show_sql> true< / property>
< property name =hbm2ddl.auto>建立< / property>
< mapping resource =model / Evento.hbm.xml/>
< / session-factory>
< / hibernate-configuration>

ListingAction.java

 包操作; 

import com.opensymphony.xwork2.ActionSupport;
导入services.EventoService;
import java.util.List;
导入model.Evento;
/ **
*
* @author
* /
public class ListingAction extends ActionSupport {


// So那个春天可以注入商业单例
protected EventoService serviceEvento;

public void setServiceEvento(EventoService value){
serviceEvento = value;
}

public String execute(){
events = serviceEvento.getEvents();
返回成功;
}

List< Evento>事件;
public List< Evento> getEvents(){return events; }

//用于重定向结果
protected String redirectUrl;

public String getRedirectUrl(){
return redirectUrl;
}
public String redirect(String to){
redirectUrl = to;
返回重定向;


code
$ b EventoService。 java

  package services; 

import java.util.List;
导入model.Evento;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
$ b $ **
*
* @author
* /
公共类EventoService {

SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory value){
sessionFactory = value;
}

// sessionFactory.getCurrentSession()的快捷方式
public Session sess(){
return sessionFactory.getCurrentSession();
}

public Evento getEventById(long id){
return(Evento)sess()。load(Evento.class,id);


$ b $ public void deleteEventById(long id){
sess()。delete(getEventById(id));


$ b public void createEvent(String name){
Evento theEvent = new Evento();
theEvent.setName(name);
sess()。save(theEvent);

}

@SuppressWarnings(unchecked)
public List< Evento> getEvents(){
System.out.println(\\\
\\\
GET EVENTS SERVICE);
return sess()。createQuery(from Event)。list();
}


}


解决方案

  //这样Spring可以注入商业单例
protected EventoService serviceEvento;

public void setServiceEvento(EventoService value){
serviceEvento = value;

oops,替换为

  //这样Spring可以注入商业单例
protected EventoService eventoService;

public void setEventoService(EventoService value){
eventoService = value;

$ / code>

这些更改需要连线配置了 id =eventoService在spring配置中添加到action属性中。该动作由struts容器管理,默认情况下它使用自动装配策略名称

 
###指定使用SpringObjectFactory。
###有效值是:名称,类型,自动和构造函数(名称是默认值)
struts.objectFactory.spring.autoWire =名称

没有正确连线对象,struts无法从弹簧容器注入依赖项。因此,操作属性 serviceEvento 未初始化并引发NPE。您可以通过 type auto 来尝试其他自动装配策略。



另一种方法是让spring来管理动作对象:


I have a problem with an example.

I get this error when I am listing Elements in an action, but I don't know why.

I think that the bean wasn't created, because the error occurs when execute() action is called.

Struts Problem Report:

Struts has detected an unhandled exception:
Messages:   
File:   actions/ListingAction.java
Line number:    26

Stacktraces:

java.lang.NullPointerException    
    actions.ListingAction.execute(ListingAction.java:26)
    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:446)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:285)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    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:242)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
    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:242)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:233)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    java.lang.Thread.run(Thread.java:680)

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
     version="3.0">

    <display-name>PFC</display-name>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

            <!-- Spring -->

    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>  
            /WEB-INF/applicationContext*.xml  
        </param-value>  
    </context-param>
    <listener> <!-- Required for the struts2 spring plugin to work -->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>  
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
    </listener>  
    <listener>  
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
    </listener>  

    <filter> <!-- Get spring to keep the session open for the whole request, so hibernate's lazy loads work -->
        <filter-name>openSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>openSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

<!-- Sitemesh (needs to be before struts) -->
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

<!-- Struts2 config (needs to be after sitemesh) -->


    <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>/*</url-pattern>
    </filter-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>

<!-- La configuración de los struts..  el nombre se pone registro el fichero de confi-spring en registro-struts.xml-->


</web-app>

applicationContext.xml:

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


    <!-- The singleton hibernate session factory -->
    <bean id="sessionFactory" 
          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    </bean> 

    <!-- Spring's hibernate transaction manager, in charge of making hibernate sessions/txns -->
    <bean id="transactionManager"
          class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean> 

    <bean id="sessionLocaleResolver"
          class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>

    <bean id="eventoService" class="services.EventoService" scope="singleton">
        <property name="sessionFactory" ref="sessionFactory"/>
        <!--property name="sessionFactory" ref="sessionFactory"/-->
    </bean>

    <bean id="listingAction" class="actions.ListingAction">
        <property name="serviceEvento" ref="eventoService"/>   
    </bean>


</beans>

struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.devMode" value="true" /> <!-- set to false for prod -->

    <constant name="struts.configuration.xml.reload" value="true" />

    <package name="eventos" extends="struts-default">
        <action name="ListingAction" class="actions.ListingAction">
            <result name="success">/vistas/eventos/Listing.jsp</result>
        </action>
    </package>

    <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />


</struts>

hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  
"-//Hibernate/Hibernate Configuration DTD//EN"  
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  

<hibernate-configuration>   
<session-factory>   
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>   
<property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/events</property>   
<property name="hibernate.connection.username">eventuser</property>   
<property name="connection.password">eventuser</property>   
<property name="connection.pool_size">1</property>   
<property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</property>   
<property name="show_sql">true</property>   
<property name="hbm2ddl.auto">create</property>   
<mapping resource="model/Evento.hbm.xml"/>
</session-factory>   
</hibernate-configuration> 

ListingAction.java:

package actions;

import com.opensymphony.xwork2.ActionSupport;
import services.EventoService;
import java.util.List;
import model.Evento;
/**
 *
 * @author 
 */
public class ListingAction extends ActionSupport{


// So that spring can inject the business singleton
    protected EventoService serviceEvento;

    public void setServiceEvento(EventoService value) {
        serviceEvento=value;
    }

    public String execute() {
        events = serviceEvento.getEvents();
        return "success";
    }

    List<Evento> events;
    public List<Evento> getEvents() { return events; }

    // For redirect results
    protected String redirectUrl;

    public String getRedirectUrl() {
        return redirectUrl;
    }
    public String redirect(String to) {
        redirectUrl = to;
        return "redirect";
    }
}

EventoService.java:

package services;

import java.util.List;
import model.Evento;
import org.hibernate.SessionFactory;
import org.hibernate.Session;

/**
 *
 * @author 
 */
public class EventoService {

    SessionFactory sessionFactory;
    public void setSessionFactory(SessionFactory value) {
        sessionFactory = value;
    }

    // Shortcut for sessionFactory.getCurrentSession()
    public Session sess() {
        return sessionFactory.getCurrentSession();
    }

    public Evento getEventById(long id) {
        return (Evento) sess().load(Evento.class, id);
    }


    public void deleteEventById(long id) {
        sess().delete(getEventById(id));
    }


    public void createEvent(String name) {
        Evento theEvent = new Evento();
        theEvent.setName(name);
        sess().save(theEvent);

    }

    @SuppressWarnings("unchecked")
    public List<Evento> getEvents() {
            System.out.println("\n\nGET EVENTS SERVICE");
        return sess().createQuery("from Event").list();
    }


}

解决方案

// So that spring can inject the business singleton
protected EventoService serviceEvento;

public void setServiceEvento(EventoService value) {
    serviceEvento=value;
}

oops, replace to

// So that spring can inject the business singleton
protected EventoService eventoService;

public void setEventoService(EventoService value) {
    eventoService=value;
}

These changes is required to wire the object that configured with id="eventoService" in the spring configuration to the action property. The action is managed by the struts container and by default it uses the autowiring strategy by name

 ### specifies the autoWiring logic when using the SpringObjectFactory.
 ### valid values are: name, type, auto, and constructor (name is the default) 
 struts.objectFactory.spring.autoWire = name

Without wiring objects properly struts is unable to inject the dependency from the spring container. As a result the action property serviceEvento is not initialized and throws NPE. You may try other strategies for autowiring by type, or auto.

Another approach is to let the spring to manage action objects:

这篇关于Struts2 + Spring 3.2 + Hibernate 3 java.lang.NullPointerException in action(execute)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆