objetos injetados pelo Spring estão nulos

30 views
Skip to first unread message

rogerioag

unread,
Feb 16, 2011, 11:04:56 AM2/16/11
to javasf: JavaServer Faces Group
Boa tarde,

ao executar um método no managed bean que usa um facade que deveria
ser injetado pelo Spring, percebi que o mesmo está nulo, e gera um
NullPointerException. Pelo debug, percebi que todos os objetos que
deveriam ser injetados também estão nulos.

Fiquei um tempo sem criar aplicações JSF e acho que estou esquecendo
de fazer alguma configuração. Peço ajuda aos colegas para me ajudar a
descobrir o que está faltando.

Seguem os trechos de código e de configuração:

* web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<!-- arquivo do log -->
<context-param>
<param-name>fileLog</param-name>
<param-value>C:/Temp/registrosLocalidade.log</param-value>
</context-param>

<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
<description>
State saving method: "client" or "server" (= default)
See JSF Specification 2.5.2
</description>
</context-param>

<context-param>
<param-name>org.ajax4jsf.SKIN</param-name>
<param-value>classic</param-value>
</context-param>

<!-- Facelets -->
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
<description>Special Debug Output for Development</description>
</context-param>

<!-- para evitar mensagens de erro em comentarios colocados em
paginas XHTML -->
<context-param>
<param-name>facelets.SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>

<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
<description>Por usar o Facelets, este parametro informa para a
implementacao do JSF que os arquivos agora terao a extensao
xhtml, e nao mais jsp</description>
</context-param>

<context-param>
<param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
<param-value>com.sun.facelets.FaceletViewHandler</param-value>
</context-param>

<!-- Extensions Filter -->
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>

<!-- mapeamento de filtros -->
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>

<!-- listeners -->
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</listener-
class>
</listener>

<!-- Servlets -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- mapeamento de servlets -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>

<!-- outros -->
<welcome-file-list>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>

<application>
<message-bundle>messages</message-bundle>
</application>

<!-- seguranca -->
<security-constraint>
<display-name>Restrict XHTML Documents</display-name>
<web-resource-collection>
<web-resource-name>XHTML</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Somente desenvolvedores terao acesso aos arquivos
XHTML</description>
<role-name>developer</role-name>
</auth-constraint>
</security-constraint>
</web-app>

======================================
* faces-config
<faces-config>
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>

<managed-bean>
<managed-bean-name>localidadeMB</managed-bean-name>
<managed-bean-
class>br.gov.ibge.localidade.managedBean.LocalidadeMB</managed-bean-
class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>iniciar</from-outcome>
<to-view-id>/inicio.xhtml</to-view-id>
</navigation-case>
</navigation-rule>

<navigation-rule>
<from-view-id>/inicio.xhtml</from-view-id>
<navigation-case>
<from-outcome>inserirLocalidade</from-outcome>
<to-view-id>/inserirLocalidade.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>

=========================================
* 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-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>sun.jdbc.odbc.JdbcOdbcDriver</value>
</property>
<property name="url">
<value>jdbc:firebirdsql://localhost:3050/C:/tabelas/
sddiLocalidade.fdb</value>
</property>
<property name="username">
<value>SDDILOCALIDADE</value>
</property>
<property name="password">
<value>sddilocalidade</value>
</property>
</bean>

<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>

<bean id="estadoFacade"
class="br.gov.ibge.localidade.facade.EstadoFacadeImpl">
<property name="estadoDao" ref="estadoDao" />
</bean>

<bean id="localidadeFacade"
class="br.gov.ibge.localidade.facade.LocalidadeFacadeImpl">
<property name="localidadeDao" ref="localidadeDao" />
</bean>

<bean id="municipioFacade"
class="br.gov.ibge.localidade.facade.MunicipioFacadeImpl">
<property name="municipioDao" ref="municipioDao" />
</bean>

<bean id="estadoDao"
class="br.gov.ibge.localidade.dao.EstadoDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>

<bean id="localidadeDao"
class="br.gov.ibge.localidade.dao.LocalidadeDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>

<bean id="municipioDao"
class="br.gov.ibge.localidade.dao.MunicipioDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
</beans>

===================================
* inserirLocalidade.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">

<f:view>
<ui:composition template="/WEB-INF/templates/default.xhtml">
<ui:define name="tituloPag">Intranet UE-GO - Controle de
Localidades</ui:define>

<ui:define name="camadaCentral">
<a4j:form id="formMenu" focus="uf">
<ui:include src="menu.xhtml" />
<f:verbatim><br/></f:verbatim>
<h:panelGrid columns="3">
<f:facet name="header">
<h:outputText value="Informe os dados da nova localidade:"
styleClass="tituloFormulario"/>
</f:facet>

<h:outputText value="UF:" styleClass="labelFormulario"/>
<h:selectOneMenu id="estado"
valueChangeListener="#{localidadeMB.selecionarEstado}"
styleClass="listbox"
validator="#{localidadeMB.validarEstado}">
<f:selectItems value="#{localidadeMB.estados}"/>
<a4j:support event="onchange" reRender="municipio"
focus="municipio"/>
</h:selectOneMenu>
<h:message for="estado" styleClass="mensagemErro"/>

(...)
</h:panelGrid>
</a4j:form>
</ui:define>
</ui:composition>
</f:view>
</html>

====================================
* localidadeMB

private EstadoFacade estadoFacade;

(...)
public List<SelectItem> getEstados(){
List<SelectItem> itens = new ArrayList<SelectItem>();
try{
itens.add(new SelectItem("-- selecione a UF --"));

****** ONDE OCORRE O ERRO, pois estadoFacade == null ******
for(Estado e : estadoFacade.getEstados()){
itens.add(new SelectItem(e.getNome()));
}

return itens;

} catch (PropertiesFileException e) {

}
}
(...)

public void setEstadoFacade(EstadoFacade facade){
this.estadoFacade = facade;
}

public void selecionarEstado(ValueChangeEvent evento){
List<SelectItem> municipiosPorEstado = new ArrayList<SelectItem()>;

***** municipioFacade também está nulo ******
for(String texto :
municipioFacade.getNomesMunicipios(evento.getNewValue().toString())){
if(evento.getNewValue().toString().equals(texto)){
municipiosPorEstado.add(new SelectItem(texto));
}
}
}

rogerioag

unread,
Feb 16, 2011, 11:25:31 AM2/16/11
to javasf: JavaServer Faces Group
Faltou inserir o código do facade:

public class EstadoFacadeImpl implements EstadoFacade {

private static final long serialVersionUID = 1L;
private EstadoDAO estadoDao;

@Override
public List<Estado> getEstados() throws PropertiesFileException {
return estadoDao.getEstados();
}

public void setEstadoDao(EstadoDAO dao){
this.estadoDao = dao;
}
}



On 16 fev, 13:04, rogerioag <roggai...@gmail.com> wrote:
> Boa tarde,
>
> ao executar um método no managed bean que usa um facade que deveria
> ser injetado pelo Spring, percebi que o mesmo está nulo, e gera um
> NullPointerException. Pelo debug, percebi que todos os objetos que
> deveriam ser injetados também estão nulos.
>
> Fiquei um tempo sem criar aplicações JSF e acho que estou esquecendo
> de fazer alguma configuração. Peço ajuda aos colegas para me ajudar a
> descobrir o que está faltando.
>
> Seguem os trechos de código e de configuração:
>
> * web.xml
> <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
>          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>          xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>        http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

Rafael Roque

unread,
Feb 16, 2011, 2:45:04 PM2/16/11
to javasf: JavaServer Faces Group
Faça as seguintes mudanças:
@Component
public class EstadoFacadeImpl implements EstadoFacade

@Resource
private EstadoFacade estadoFacade;

On 16 fev, 13:25, rogerioag <roggai...@gmail.com> wrote:
> Faltou inserir o código do facade:
>
> public class EstadoFacadeImpl implements EstadoFacade {
>
>         private static final long serialVersionUID = 1L;
>         private EstadoDAO estadoDao;
>
>         @Override
>         public List<Estado> getEstados() throws PropertiesFileException {
>                 return estadoDao.getEstados();
>         }
>
>         public void setEstadoDao(EstadoDAO dao){
>                 this.estadoDao = dao;
>         }
>
> }
>
> On 16 fev, 13:04, rogerioag <roggai...@gmail.com> wrote:
>
> > Boa tarde,
>
> > ao executar um método no managed bean que usa um facade que deveria
> > ser injetado pelo Spring, percebi que o mesmo está nulo, e gera um
> > NullPointerException. Pelo debug, percebi que todos os objetos que
> > deveriam ser injetados também estão nulos.
>
> > Fiquei um tempo sem criar aplicações JSF e acho que estou esquecendo
> > de fazer alguma configuração. Peço ajuda aos colegas para me ajudar a
> > descobrir o que está faltando.
>
> > Seguem os trechos de código e de configuração:
>
> > * web.xml
> > <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
> >          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >          xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-ap..."
> >        http://www.springframework.org/schema/beanshttp://www.springframework...
> >        http://www.springframework.org/schema/txhttp://www.springframework.or...
> >        http://www.springframework.org/schema/aophttp://www.springframework.o...">
> ...
>
> mais »

rogerioag

unread,
Feb 17, 2011, 7:10:48 AM2/17/11
to javasf: JavaServer Faces Group
Obrigado pelo seu retorno, Rafael.
Sinceramente, sempre utilizei a configuração via XML, para centralizá-
la ao invés de espalhar pelo código. Além de considerar as vantagens e
desvantagens citadas no artigo "Boas práticas com Spring" (Ed. 84 da
Java Magazine), também levei em conta a linha de aprendizado para
finalizar a aplicação que estou fazendo.

Você saberia me dizer que configurações estão incorretas e/ou
faltantes como citei acima, ao invés de usar as anotações sugeridas
por você? Se puder, lhe agradeço. Como eu não usava anotações antes,
tenho certeza que só falta algum pequeno detalhe.

Independente disso, inseri sua sugestão no meu código, e retornou o
seguinte erro (como se ainda faltasse alguma coisa):

javax.faces.FacesException: Exception while calling encodeEnd on
component : {Component-Path : [Class:
org.ajax4jsf.component.AjaxViewRoot,ViewId: /inserirLocalidade.xhtml]
[Class: org.ajax4jsf.component.html.AjaxForm,Id: formMenu][Class:
javax.faces.component.html.HtmlPanelGrid,Id: j_id23]}
at
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:
627)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:261)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:257)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:257)
at
com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:
592)
at
org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:
108)
at
org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:
196)
at
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:
41)
at
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:
140)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:155)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:
177)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
at
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:
380)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
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:
175)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:
433)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
128)
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:
286)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
844)
at org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
447)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.FacesException: Exception while calling
encodeEnd on component : {Component-Path : [Class:
org.ajax4jsf.component.AjaxViewRoot,ViewId: /inserirLocalidade.xhtml]
[Class: org.ajax4jsf.component.html.AjaxForm,Id: formMenu][Class:
javax.faces.component.html.HtmlPanelGrid,Id: j_id23][Class:
javax.faces.component.html.HtmlSelectOneMenu,Id: estado]}
at
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:
627)
at
org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:
522)
at
org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:
231)
at
org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:
102)
at
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:
624)
... 28 more
Caused by: javax.faces.FacesException:
javax.naming.NameNotFoundException: Name
br.gov.ibge.localidade.managedBean.LocalidadeMB is not bound in this
Context
at
org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:
147)
at
org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManagedBean(ManagedBeanResolver.java:
198)
at
org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:
164)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
at
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:
140)
at
org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:
64)
at
org.springframework.web.jsf.DelegatingVariableResolver.resolveOriginal(DelegatingVariableResolver.java:
123)
at
org.springframework.web.jsf.DelegatingVariableResolver.resolveVariable(DelegatingVariableResolver.java:
105)
at
org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(VariableResolverToELResolver.java:
95)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
at
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:
140)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
at org.apache.el.parser.AstValue.getValue(AstValue.java:103)
at
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:
186)
at
com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:
71)
at javax.faces.component.UISelectItems.getValue(UISelectItems.java:
78)
at
org.apache.myfaces.shared_impl.util.SelectItemsIterator.hasNext(SelectItemsIterator.java:
128)
at
org.apache.myfaces.shared_impl.renderkit.RendererUtils.internalGetSelectItemList(RendererUtils.java:
557)
at
org.apache.myfaces.shared_impl.renderkit.RendererUtils.getSelectItemList(RendererUtils.java:
533)
at
org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:
314)
at
org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:
288)
at
org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:
57)
at
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:
624)
... 32 more
Caused by: javax.naming.NameNotFoundException: Name
br.gov.ibge.localidade.managedBean.LocalidadeMB is not bound in this
Context
at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at
org.apache.catalina.util.DefaultAnnotationProcessor.lookupFieldResource(DefaultAnnotationProcessor.java:
203)
at
org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:
135)
at
org.apache.myfaces.config.annotation.TomcatAnnotationLifecycleProvider.newInstance(TomcatAnnotationLifecycleProvider.java:
48)
at
org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:
84)
> ...
>
> mais »

rogerioag

unread,
Feb 17, 2011, 8:25:24 AM2/17/11
to javasf: JavaServer Faces Group
Como disse, preferi utilizar a configuração XML, retirando as
anotações sugeridas pelo colega Rafael.
Meu problema foi que esqueci de inserir o trecho abaixo no faces-
config.xml:

(...)
<managed-bean>
<managed-bean-name>localidadeMB</managed-bean-name>
<managed-bean-
class>br.gov.ibge.localidade.managedBean.LocalidadeMB</managed-bean-
class>
<managed-bean-scope>session</managed-bean-scope>
<managed-
property>
<<<<<<<<<<
<property-name>estadoFacade</property-
name> <<<<<<<<<<
<value>#{estadoFacade}</
value>
<<<<<<<<<<
</managed-
property>
<<<<<<<<<<
</managed-bean>
(...)
> ...
>
> mais »

Rafael Ponte

unread,
Feb 17, 2011, 10:39:42 AM2/17/11
to jav...@googlegroups.com
Ola,

Acredite, nao existe integracao melhor entre Jsf e Spring se nao
atraves do uso de anotacoes e deixar o gerenciamento dos managed beans
com o Spring.

Deixa o applicationContext.xml apenas para configuracoes globais, como
datasource, Aspectos, servidores embarcados etc.

Sua vida será muito mais facil assim :-)

> --
> Você recebeu esta mensagem por que é membro do  Javasf
> http://groups.google.com/group/javasf
>
> Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
>

--
Rafael Ponte
http://www.rponte.com.br

Rafael Roque

unread,
Feb 17, 2011, 2:01:25 PM2/17/11
to javasf: JavaServer Faces Group
Complementando o que o Ponte citou,vc pode retirar do
applicationContext.xml as declarações dos seus managed beans e anotar
cada classe com @Component,da forma como eu mostrei.

@Component
public class MeuController

essa classe estaria disponivel na view para fazer algo do tipo:
#{meuController.algumaCoisa}

Para habilitar isso basta fazer as seguintes mudanças:
////faces-config.xml///
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
<el-
resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-
resolver>
</application>

//applicationContext.xml//
<context:component-scan base-package="*"/>

Espero ter ajudado.


On Feb 17, 12:39 pm, Rafael Ponte <rpo...@gmail.com> wrote:
> Ola,
>
> Acredite, nao existe integracao melhor entre Jsf e Spring se nao
> atraves do uso de anotacoes e deixar o gerenciamento dos managed beans
> com o Spring.
>
> Deixa o applicationContext.xml apenas para configuracoes globais, como
> datasource, Aspectos, servidores embarcados etc.
>
> Sua vida será muito mais facil assim :-)
>
> ...
>
> read more »
Reply all
Reply to author
Forward
0 new messages