2017-03-01 14 views
0

私は、Spring @AutowiredアノテーションをManagerBeanに持っています。しかし、私の注釈はnullです、エラーはどこですか?spring @autowired nullpointer

これは、これが今の私のインターフェイス

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

import.....  

public interface PersonaServicio { 

    public List<Persona> obtenerPersonas(); 

} 

とその実装

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; 
    } 

} 

ある

<!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> 
Index.htmlと

マイ豆

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(); 
    }   
} 

です

と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> 

エラーが(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 

はあなたの時間

+0

可能性がある場合それが動作するかどうかはわかりません。 base-pakageは、サービスインタフェースを使用してパッケージを指している必要があります。 –

+2

サブパッケージは自動的にスキャンされるので、設定は問題ありません。 – dunni

答えて

0

ありがとうございましたあなたはこれをスキャンするために、スプリングを言いましたパッケージ?コードは上手く見えるので、あなたはクラスをスキャンするために春を話していないはずです。これは、アノテーションのみを追加したり、依存性注入を修正したり、容易にすることができないため、Springはどこを探すかを知る必要があるためです。

スプリングアプリケーションの構成クラスで@ComponentScan("yourPackage")を使用すると、スプリングスキャンを指示できます。

@Service, @Componentなどの注釈は、メタ記述を追加します。 Springは、Beanとして作成されるか注釈でマークされたクラスのインスタンスのみを挿入します。

EDIT 最も直接的あなたは私はあなたがPruebaBeanクラスに@Controllerを追加する必要があると思う疑問に答えるためにfollwoing

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

ニクヒサは分かりません。私は何をすべきか教えてください。 –

+0

これはapplicationContext.xmlで行っていることと事実上同じだと思います。 Tristan

+0

はい、デバッグするのが難しい。Javaのスルーあなたがより良い –

0

のようなクラスを作成します。

私はあなたのapplicationContext.xmlをして、この行を変更してみてくださいあなたも@ManagedBeanが暗示され、JEEサーバのようなものを使用しているが、それは別のトピック

+0

OKをデバッグすることができ、私のBeanは、今では次のとおりです。 'ManagedBean @(名前= "KK")'
'@コントローラーRequestScoped
@
PruebaBeanはSerializableを{

実装 パブリッククラスしかし、私は同じエラーがあります ' –

+0

上記のJavaの設定を@NikuHysaで試してみてください。また、PostConstructにデバッグを入れ、 'PersonaServicioImpl'のコンストラクタを使うこともできます。この[リンク](http://www.journaldev.com/4096/primefaces-spring-hibernate-integration-example-tutorial)では同様の設定が記述されており、参考になるかもしれません。 – Tristan