Amigos,
Estou tentando fazer um teste simples com Injeção de Dependência. Estou utilizando em meu projeto: MyFaces e Spring 3.0
Criei uma página básica chamada inicio.xhtml onde tento exibir a data e a hora recuperada de um ManagedBean que sofreu injeção de dependência do Spring 3.0
O problema é que o Spring não está efetuando a injeção de dependência gerando o erro abaixo.
Desde já agradeço qualquer ajuda.
javax.naming.NameNotFoundException: Name br.com.tassio.baseweb.basico.mb.InicioMB is not bound in this Context
org.apache.naming.NamingContext.lookup(NamingContext.java:774)
org.apache.naming.NamingContext.lookup(NamingContext.java:157)
org.apache.myfaces.config.annotation.Tomcat7AnnotationLifecycleProvider.newInstance(Tomcat7AnnotationLifecycleProvider.java:68)
org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:162)
org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManagedBean(ManagedBeanResolver.java:303)
org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:266)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:55)
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142)
org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:65)
org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(VariableResolverToELResolver.java:96)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:55)
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142)
org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:70)
org.apache.el.parser.AstValue.getValue(AstValue.java:146)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192)
org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:85)
javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:243)
javax.faces.component.UIOutput.getValue(UIOutput.java:71)
org.apache.myfaces.shared_impl.renderkit.RendererUtils.getValue(RendererUtils.java:343)
org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue(RendererUtils.java:295)
org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.renderOutput(HtmlTextRendererBase.java:92)
org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:79)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:618)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1159)
org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:263)
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:85)
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
[size=22]Abaixo estão os arquivos envolvidos[/size]
[size=18]inicio.xhtml[/size]
<ui:composition template="/template/basico/template.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">
<ui:define name="conteudo">
Data e Hora: <h:outputText value="#{mbInicio.dataHora}" />
</ui:define>
</ui:composition>
[size=18]applicationContext.xml[/size]
<?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:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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">
<!--
Localizar os beans anotados com @Service, @Repository e @Controller
-->
<context:component-scan base-package="br.com.tassio" />
<tx:annotation-driven />
<!-- Habilitar a configuração dos Beans por Annotations -->
<context:annotation-config />
</beans>
[size=18]web.xml[/size]
<?xml version='1.0' encoding='UTF-8'?>
<web-app>
<display-name>BaseWeb</display-name>
<description>BaseWeb.</description>
<welcome-file-list>
<welcome-file>/inicio.html</welcome-file>
</welcome-file-list>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
[size=18]InicioMB.class[/size]
package br.com.tassio.baseweb.basico.mb;
import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import br.com.tassio.baseweb.basico.recurso.DataHoraRecurso;
@Controller("cInicio")
@Scope("request")
@ManagedBean(name="mbInicio")
public class InicioMB {
@Resource
private DataHoraRecurso recursoDataHora;
public void setRecursoDataHora(DataHoraRecurso recursoDataHora) {
this.recursoDataHora = recursoDataHora;
}
public String getDataHora() {
return recursoDataHora.getDataHora();
}
}
[size=18]DataHoraRecurso.class[/size]
package br.com.tassio.baseweb.basico.recurso;
import java.util.Calendar;
import org.springframework.stereotype.Service;
import br.com.tassio.baseweb.util.formato.FormatoData;
@Service(value="recursoDataHora")
public class DataHoraRecurso {
private String dataHora;
public DataHoraRecurso() {
Calendar dateTime = Calendar.getInstance();
dataHora = FormatoData.dateToStringDdmmaaaaHhmmss(dateTime.getTime());
}
public String getDataHora() {
return dataHora;
}
}