2017-03-01 5 views
0

Ich habe eine Spring @Autowired Annotation in einem ManagerBean. Aber meine Anmerkung ist null, wo ist der Fehler? MeinSpring @autowired nullpointer

Dies ist Bohne

package es.juntadeandalucia.capder.plja.controlador; 

import..... 

@ManagedBean(name = "kk") 
@RequestScoped 
public class PruebaBean implements Serializable { 

    private static final long serialVersionUID = 654564654L; 

    String     a; 

    String     b; 

    @Autowired // This var is null, Why? 
    private PersonaServicio personaServicio; 

    @PostConstruct 
    public void init() { 
    } 

    public PruebaBean() { 
     this.a = "1"; 
     this.b = "Raúl"; 
    } 

    public List<Persona> getPersonas() { 
     // this.personaServicio is null, Why? 
     return this.personaServicio.obtenerPersonas(); 
    }   
} 

Diese meine Schnittstelle ist

package es.juntadeandalucia.capder.plja.negocio.servicio; 

import.....  

public interface PersonaServicio { 

    public List<Persona> obtenerPersonas(); 

} 

und seine Umsetzung

package es.juntadeandalucia.capder.plja.negocio.servicio.impl; 

import.....  

@Service 
public class PersonaServicioImpl implements PersonaServicio, Serializable { 

    private static final long serialVersionUID = 8035927808046807526L; 

    private PersonaDAO  personaDAO; 

    public PersonaServicioImpl() { 

    } 

    public PersonaDAO getPersonaDAO() { 
     return this.personaDAO; 
    } 

    public void setPersonaDAO(PersonaDAO personaDAO) { 
     this.personaDAO = personaDAO; 
    } 

    @Override 
    public List<Persona> obtenerPersonas() { 
     // Is not important for this example 
     return null; 
    } 

} 

Nun ist die Index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui"> 

<f:loadBundle basename="resources.application" var="msg" /> 

<h:head> 
    <title><h:outputText value="hi" /></title> 
</h:head> 
<h:body> 
     <p:dataTable value="#{kk.personas}" var="persona" emptyMessage="Sin personas"> 
      <p:column headerText="Id"> 
       <h:outputText value="#{persona.id}" /> 
      </p:column> 
      <p:column headerText="Nombre"> 
       <h:outputText value="#{persona.nombre}" /> 
      </p:column> 
      <p:column headerText="Apellido"> 
       <h:outputText value="#{persona.apellidos}" /> 
      </p:column> 

     </p:dataTable> 

    </h:form> 
</h:body> 
</html> 

und die applicationContext.xml

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="es.juntadeandalucia.capder.plja"/> 

    <context:annotation-config />  

</beans> 

Der Fehler ist zu beenden (von Tomcat v7):

GRAVE: Error Rendering View[/index.xhtml] 
javax.el.ELException: /index.xhtml @34,81 value="#{kk.personas}": Error reading 'personas' en el tipo es.juntadeandalucia.capder.plja.controlador.PruebaBean 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    at javax.faces.component.UIData.getValue(UIData.java:732) 
    at org.primefaces.component.api.UIData.getDataModel(UIData.java:764) 
    at javax.faces.component.UIData.getRowCount(UIData.java:356) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:832) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:814) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:290) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:252) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:87) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) 
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:651) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.el.ELException: Error reading 'personas' en el tipo es.juntadeandalucia.capder.plja.controlador.PruebaBean 
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:110) 
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:184) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    ... 43 more 
Caused by: java.lang.NullPointerException 
    at es.juntadeandalucia.capder.plja.controlador.PruebaBean.getPersonas(PruebaBean.java:41) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:99) 
    ... 48 more 

Ihnen allen für Ihre Zeit danken

+0

Versuchen, diese Zeile in Ihrer applicationContext.xml zu ändern: base-pakage muss auf Ihr Paket mit Service-Schnittstellen verweisen. –

+2

Subpackages werden automatisch gescannt, daher ist die Konfiguration in Ordnung. – dunni

Antwort

0

Haben Sie Frühjahr gesagt, dies zu scannen Paket? Der Code scheint gut zu sein, also sollte es sein, dass Sie dem Frühling nicht sagen, dass er die Klassen scannen soll. Dies geschieht, weil nur die Annotation hinzugefügt wird, die Abhängigkeitsinjektion nicht repariert oder erleichtert wird, Spring muss wissen, wo gesucht werden muss.

Sie können @ComponentScan("yourPackage") in der Konfigurationsklasse Ihrer Federanwendung verwenden, um die Feder zum Scannen anzuleiten.

usw. Anmerkungen hinzufügen Meta-Beschreibung. Spring fügt nur Instanzen dieser Klassen ein, die entweder als Bean erstellt oder mit Annotation markiert sind.

EDIT Erstellen Sie eine Klasse wie die Für die meisten direkt beantworten

@EnableWebMvc 
@ComponentScan(basePackages = {"your package"}) 
@Configuration 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 
//your code here 
} 
+0

Ich verstehe Niku Hysa nicht. Sag mir was ich tun soll. –

+0

Ich denke, das ist eigentlich das gleiche wie das, was er in der applicationContext.xml tut. ' – Tristan

+0

Ja, aber so ist es auch schwer zu debuggen.Durch Java können Sie besser –

0

follwoing Sie Frage Ich denke, Sie @Controller zum PruebaBean Klasse hinzufügen müssen.

Ich bin mir nicht sicher, wie das funktioniert, wenn Sie auch so etwas wie ein JEE-Server verwenden, die die @ManagedBean implizieren, aber das kann auch ein separates Thema

+0

OK debuggen, jetzt meine Bohne es ist: '@ ManagedBean (name = "kk")'
'@-Controller
@ RequestScoped
public class PruebaBean Serializable implementiert {

Aber, Ich habe den gleichen Fehler ' –

+0

Sie können versuchen, die oben von @NikuHysa aufgeführten Java-Konfiguration zu versuchen. Vielleicht möchten Sie auch ein Debug in den PostConstruct und/oder den Konstruktor von 'PersonaServicioImpl' setzen. Diese [link] (http://www.journaldev.com/4096/primefaces-spring-hibernate-integration-example-tutorial) beschreibt eine ähnliche Konfiguration und kann hilfreich sein. – Tristan