Problema ao usar Autowired no ManagedBean [NullPointerException]
6 respostas
B
brenoccosta7
Estou criando uma aplicação de exemplo que está fazendo login. Estou fazendo tudo com annotations. Mas ao usar o @AutoWired no ManagedBean, a aplicação
Já usuário é uma entidade mapeada do bd. Finalmente, o meu application context está configurado da seguinte maneira:
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"default-autowire="byName"><context:component-scanbase-package="br.com.pditec.templatespringjpajsfprime"/><context:annotation-config/><!-- Scans within the base package of the application for @Components to configure as beans --><beanid="placeholderConfig"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><propertyname="location"value="classpath:db.properties"/></bean><beanid="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="packagesToScan"value="br.com.pditec.templatespringjpajsfprime.persistence.model"/><propertyname="hibernateProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop><propkey="hibernate.show_sql">true</prop><propkey="hibernate.hbm2ddl.auto">update</prop><propkey="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop><propkey="hibernate.c3p0.acquire_increment">5</prop><propkey="hibernate.c3p0.idle_test_period">100</prop><propkey="hibernate.c3p0.max_size">100</prop><propkey="hibernate.c3p0.max_statements">0</prop><propkey="hibernate.c3p0.min_size">10</prop><propkey="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop></props></property></bean><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value="${db.driver}"/><propertyname="url"value="${db.url}"/><propertyname="username"value="${db.username}"/><propertyname="password"value="${db.password}"/></bean><tx:annotation-driven/></beans>
O servidor inicia normalmente (sem gerar nenhum erro), mas quando eu abro a tela e clico no login, ele gera a seguinte excecao:
RESUMINDO: o usuarioBO que está sendo injetado dentro de LoginBean está NULL, por isso ele gera o erro. Sendo assim, constato que meus beans não estão sendo inicializados.
Alguém poderia me dar uma luz?
Estou usando Java 7, Spring 3.0.5, JSF 2, Hibernate.
Porque os managed beans também não estão com @Autowired e sim com @ManagedBean ?
Talvez o nullpointer aconteça, pois o jsf injeta o managedBean e você está tentando lá que o spring injete o campo.
Acho que o spring só injeta campos que venham de component. Não tenho certeza.
Consegui encontrar o erro. A anotação @ManagedBean não pode ser da classe “javax.faces.bean.ManagedBean”, mas deve ser “javax.annotation.ManagedBean”. Como eu havia feito essa confusão na anotação, gerou o erro. O problema é encontrar esse tipo de erro.
Mas eu me deparei com outro erro:
Este erro é causado quando eu chamo o home.xhtml (home.jsf). Veja os arquivos que o programa chama abaixo:
<ui:compositionxmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"xmlns:c="http://java.sun.com/jstl/core"xmlns:p="http://primefaces.org/ui"template="WEB-INF/templates/templateGeral.xhtml"><ui:definename="info_login"><h:formid="formLogin"><h:outputTextvalue="Você está logado como "/><h:outputTextvalue="[#{LoginBean.usuarioLogado()}] "style="font-weight:bold;"/><br/><p:commandLinkid="logout"action="#{LoginBean.sair}"><h:outputTextvalue="Sair"/></p:commandLink></h:form></ui:define><ui:definename="menu_conteudo"><h:form><p:menubarautoDisplay="true"><p:submenulabel="Usuários"><p:menuitemvalue="Cadastro"action="#{manterUsuarioBean.Iniciar}"/></p:submenu><p:submenulabel="Unidades Consumidoras"><p:menuitemvalue="Listar"action="#{manterUnidadeConsumidoraBean.iniciar}"></p:menuitem></p:submenu></p:menubar></h:form></ui:define></ui:composition>