Problema com conversor JSF e spring

7 respostas
laiszanfolim

Olá,

Estou utilizando JSF e Spring em um projeto e estou tendo problemas para injetar um DAO num conversor.
Queria saber o que precisa configurar para o spring "saber" injetar este DAO no conversor.
Eu utilizo o spring para injetar o dao no controller e funciona.. mas não consigo fazer funcionar no conversor.

No Controller eu injeto com @Resource

@Controller("pessoaController")
@Scope("session")
public class PessoaController {

		@Resource
		private PessoaDAO pessoaDAO;

...
}

no conversor isto não funciona.. mas eu sou um pouco nova no Spring e não sei se estou fazendo besteira.
Meu conversor é o seguinte:

public class PessoaConverter implements Converter{
	@Resource
	private PessoaDAO pessoaDao;

	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
		Integer id = Integer.parseInt(value);
		Pessoa pessoa = (Pessoa)pessoaDao.pesquisarPorId(id);
		return pessoa;
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
		Pessoa pessoa = (Pessoa)value;
		return String.valueOf(pessoa.getId());
	}

}

O Dao está funcionando certo... o problema é que não injeta o DAO no conversor mesmo.
Alguém sabe qual o problema? Eu acredito que seja alguma configuração no arquivo do spring... mas não encontro nada na internet.

Segue o applicationContext caso seja necessário

<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="persistenceUnitName" value="FinanceiroPU" /> 
  </bean>

  <context:component-scan base-package="br.com.financeiro.controller" /> 

  <context:annotation-config /> 

  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="entityManagerFactory" /> 
  </bean>

  <tx:annotation-driven /> 

  <bean id="PessoaDAO" class="br.com.financeiro.DAO.imp.PessoaDAOImp" /> 
  <bean id="PessoaConverter" class="br.com.financeiro.converter.PessoaConverter" /> 
 
  </beans>

7 Respostas

alves.Felipe

a classe PessoaConverter esta no mesmo pacote que a classe PessoaController ?
tenta colocar a classe PessoaConverter no mesmo pacote… ou adiciona uma linha no arquivo de configuração do spring
indicando o caminho da classe;… como essa:

<context:component-scan base-package="br.com.financeiro.controller" />

X

Passei pelo mesmo problema com Validator.

Segue o link: http://www.guj.com.br/posts/list/207219.java

Tem umas respostas que me ajudaram… funcionou, porém não ficou legal não… ainda estou procurando a maneira correta.

ricardo13

Alguém descobriu uma solução ??

Também deparei com esse problema.
Tentei o @Autowired, o @Resource e não instancia a classe DAO.

Ricardo

ricardo13

Eu achei algo interessante, mas quem tá usando o applicationContext com IoC.

Essa solução para mim não serve, mas vou deixar registrado porque pode ajudar alguém.

Este é o link.

Ricardo

R
laiszanfolim:
Olá,

Estou utilizando JSF e Spring em um projeto e estou tendo problemas para injetar um DAO num conversor.
Queria saber o que precisa configurar para o spring "saber" injetar este DAO no conversor.
Eu utilizo o spring para injetar o dao no controller e funciona.. mas não consigo fazer funcionar no conversor.

Resolvi usando essas duas classes:
package context; 
import org.springframework.context.ApplicationContext; 

/**
 * This class provides application-wide access to the Spring ApplicationContext.
 * The ApplicationContext is injected by the class "ApplicationContextProvider".
 *
 * @author Siegfried Bolz
 */ 

public class AppContext { 
	private static ApplicationContext ctx; 

	/** 
	 * Injected from the class "ApplicationContextProvider" which is automatically
	 * loaded during Spring-Initialization.
	 */ 
	public static void setApplicationContext(ApplicationContext applicationContext) { 
		ctx = applicationContext; 
	} 

	/**
	 * Get access to the Spring ApplicationContext from everywhere in your Application.
	 *
	 * @return
	 */ 
	public static ApplicationContext getApplicationContext() { 
		return ctx; 
	} 

}
package context; 
   
       
   
    import org.springframework.beans.BeansException; 
   
      import org.springframework.context.ApplicationContext; 
   
      import org.springframework.context.ApplicationContextAware; 
   
       
   
      /**
   
       * This class provides an application-wide access to the
   
       * Spring ApplicationContext! The ApplicationContext is
  
       * injected in a static method of the class "AppContext".
  
       *
  
       * Use AppContext.getApplicationContext() to get access
  
    * to all Spring Beans.
  
       *
  
       * @author Siegfried Bolz
  
       */ 
  
      public class ApplicationContextProvider implements ApplicationContextAware { 
    
          public void setApplicationContext(ApplicationContext ctx) throws BeansException { 
  
              // Wiring the ApplicationContext into a static method 
  
              AppContext.setApplicationContext(ctx); 
  
          } 
  
      } // .EOF
No applicationContext.xml
<bean id="contextApplicationContextProvider" class="context.ApplicationContextProvider" />
Para usar no converter:
ApplicationContext app = AppContext.getApplicationContext();
MeuDAO dao = (MeuDAO) app.getBean("nomeDoDao");
ricardo13
raf4ever:
laiszanfolim:
Olá,

Estou utilizando JSF e Spring em um projeto e estou tendo problemas para injetar um DAO num conversor.
Queria saber o que precisa configurar para o spring "saber" injetar este DAO no conversor.
Eu utilizo o spring para injetar o dao no controller e funciona.. mas não consigo fazer funcionar no conversor.

Resolvi usando essas duas classes:
package context; 
import org.springframework.context.ApplicationContext; 

/**
 * This class provides application-wide access to the Spring ApplicationContext.
 * The ApplicationContext is injected by the class "ApplicationContextProvider".
 *
 * @author Siegfried Bolz
 */ 

public class AppContext { 
	private static ApplicationContext ctx; 

	/** 
	 * Injected from the class "ApplicationContextProvider" which is automatically
	 * loaded during Spring-Initialization.
	 */ 
	public static void setApplicationContext(ApplicationContext applicationContext) { 
		ctx = applicationContext; 
	} 

	/**
	 * Get access to the Spring ApplicationContext from everywhere in your Application.
	 *
	 * @return
	 */ 
	public static ApplicationContext getApplicationContext() { 
		return ctx; 
	} 

}
package context; 
   
       
   
    import org.springframework.beans.BeansException; 
   
      import org.springframework.context.ApplicationContext; 
   
      import org.springframework.context.ApplicationContextAware; 
   
       
   
      /**
   
       * This class provides an application-wide access to the
   
       * Spring ApplicationContext! The ApplicationContext is
  
       * injected in a static method of the class "AppContext".
  
       *
  
       * Use AppContext.getApplicationContext() to get access
  
    * to all Spring Beans.
  
       *
  
       * @author Siegfried Bolz
  
       */ 
  
      public class ApplicationContextProvider implements ApplicationContextAware { 
    
          public void setApplicationContext(ApplicationContext ctx) throws BeansException { 
  
              // Wiring the ApplicationContext into a static method 
  
              AppContext.setApplicationContext(ctx); 
  
          } 
  
      } // .EOF
No applicationContext.xml
<bean id="contextApplicationContextProvider" class="context.ApplicationContextProvider" />
Para usar no converter:
ApplicationContext app = AppContext.getApplicationContext();
MeuDAO dao = (MeuDAO) app.getBean("nomeDoDao");

Mas ainda vou ter que especificar a classe "nomeDoDAO" no applicationContext.xml ??
<bean id="nomeDoDao" class="classeDoDao" />

Ricardo

R

Sim.
Aliás,ja é feito dessa forma.

Criado 30 de junho de 2010
Ultima resposta 10 de nov. de 2010
Respostas 7
Participantes 5