Hi to all! I'm new to spring and i find the same problem always i try to do something. The problem is as follows: in my @Controller bean, spring doesn't inject the @Resorce referencing to the @Service, so when i try to load data from service to an UIData component which is in the controller, the ide shows me a NullPointerException.
I use anotations as you see, and the application is a JSF 2 over Spring 3 and Hibernate 3 too.
Here's the Stack trace of the error:
Code:org.apache.jasper.el.JspELException: /WEB-INF/jsp/index.jsp(17,12) '#{listarBean.tabla}' Error reading 'tabla' en el tipo paquete.ListarBean at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178) at javax.faces.component.UIData.getValue(UIData.java:554) at javax.faces.component.UIData.getDataModel(UIData.java:1248) at javax.faces.component.UIData.setRowIndex(UIData.java:447) at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81) at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:823) at javax.faces.component.UIData.encodeBegin(UIData.java:937) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1611) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616) at com.sun.faces.application.view.JspViewHandlingStrategy.doRenderView(JspViewHandlingStrategy.java:420) at com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:209) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NullPointerException at paquete.ListarBean.getTabla(ListarBean.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.el.BeanELResolver.getValue(BeanELResolver.java:62) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) at org.apache.el.parser.AstValue.getValue(AstValue.java:123) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101) ... 32 more
And now i'll let you the configuration and the code:
Here's the applicationContext.xml :
Code:<?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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" 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.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="paquete" /> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="/WEB-INF/jdbc.properties" /> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> <property name="configLocation" value="classpath:${hibernate.cfg.file}" /> </bean> </beans>
This is the DAO class:
Code:package paquete; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; @Repository("hibDao") public class HibDao extends HibernateDaoSupport implements HibernateDaoInt { @Autowired public HibDao(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); } public void añadirRegistro(Object obj) { getHibernateTemplate().saveOrUpdate(obj); } public <T> List<T> obtenerRegistros(Class<T> cls) { return getHibernateTemplate().loadAll(cls); } }
Here's my Service class that use the DAO class defined before:
Code:package paquete; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("servicioDao") public class ServicioDao implements ServicioDaoInt { private HibernateDaoInt accesoDatos; @Autowired public void setAccesoDatos(HibernateDaoInt accesoDatos){this.accesoDatos=accesoDatos;} public HibernateDaoInt getAccesoDatos(){return this.accesoDatos;} public Cursos nuevoCurso(){return new Cursos();} public void escribirCurso(Cursos curso) { accesoDatos.añadirRegistro(curso); } public List<Cursos> leerCursos() { return accesoDatos.obtenerRegistros(Cursos.class); } }
The controller one which uses the service defined before:
Code:package paquete; import java.io.Serializable; import javax.faces.component.UIData; import javax.faces.model.ListDataModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; @Controller("listarBean") @Scope("session") public class ListarBean implements Serializable { private ServicioDaoInt servicio; private UIData tabla; @Autowired public void setServicio(ServicioDaoInt sd){this.servicio=sd;} public ServicioDaoInt getServicio(){return this.servicio;} public String getMensaje(){return this.mensaje;} public void setMensaje(String msg){this.mensaje=msg;} public UIData getTabla() { this.tabla.setValue(new ListDataModel(this.servicio.leerCursos())); return this.tabla; } public void setTabla(UIData tabla) { this.tabla=tabla; } }
Thanks for any help you could offer ^^


Reply With Quote
