Como integrar o JSF 2.0 com o Spring?  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
bland
JavaEvangelist

Membro desde: 10/12/2004 09:36:35
Mensagens: 330
Offline

Olá a todos!

Estou tendo alguns problemas para fazer essa integração. Eu tenho um ManagedBean e dentro dele eu tenho um serviço, que deveria ser populado pelo Spring. Só que sempre que chega no meu ManagedBean, o serviço está nulo. Assim como o EntityManager do serviço também. Vou postar alguns fontes.

O meu MangedBean :


Eu não tenho declarado esse serviço no applicationContext, mas tem essa linha lá: <context:component-scan base-package="com.monteirosti" />

O applicationContext.xml :


O serviço:


Bem, de antemão, obrigado pela ajuda, mas o que eu posso estar fazendo de errado para que o preenchimento dos objetos não esteja sendo feito?

Um abraço.

http://www.twitter.com/almeidafabiano

Fabiano Almeida.
[MSN]
maiconramones
JavaGuru
[Avatar]

Membro desde: 04/12/2007 11:09:19
Mensagens: 210
Localização: Sapucaia do Sul
Offline

bland sei que o tópico é antigo, mas você conseguiu corrigir esse problema? Se sim, como?

Estou tendo o mesmo problema.

Abraço
[MSN]
bland
JavaEvangelist

Membro desde: 10/12/2004 09:36:35
Mensagens: 330
Offline

Olá Maicon, tudo bem?

Foi muito bom você "reativar" este tópico, pois eu nem lembrava mais que esse tópico existia.

Bem, respondendo a sua pergunta, sim, consegui resolver sim. Para contextualizar, o Spring tem o seu gerenciamento dos beans, e, pelo que entendi após pesquisar bastante, o JSF 2.0 também. Ou seja, quando anotamos uma classe como @ManagedBean, até o momento, o JSF 2 não consegue enxergar os beans do Spring implicitamente. Sendo assim, é necessário que você faça uma injeção utilizando uma outra anotação, a @ManagedProperty (do pacote javax.faces.bean.ManagedProperty).

Pronto, essa foi a explicação da teoria. Na prática, eu criei um arquivo xml para os meus serviços (que serão gerenciados pelo Spring) e coloquei apenas isso:

Ou seja, o pacote base para a busca dos serviços é a implementação desses serviços. E não as interfaces.
Já no meu ManagedBean ficou dessa forma:

Com essa anotação, o JSF 2 enxerga que será feita uma "injeção explícita" ao bean no qual você está anotando. Essa anotação (@ManagedProperty) utiliza do padrão JavaBeans, sendo assim, será necessário ter o método set do seu serviço na sua classe ManagedBean. Observe que o parâmetro utiliza Expression Language, pois ele busca essa informação dentro da própria aplicação, algo como um repositório de beans, por exemplo (não sei o nome exatamente, mas a ideia é essa). E para que essa integração funcione corretamente é necessário colocar no faces-config.xml a seguinte linha:

E, claro, configurar corretamente o seu web.xml. Acho que seja isso. Não me lembro de mais nenhum detalhe. Caso tenha mais dúvidas, posta aqui que tentarei te ajudar quando for possível.

Um grande abraço.

http://www.twitter.com/almeidafabiano

Fabiano Almeida.
[MSN]
maiconramones
JavaGuru
[Avatar]

Membro desde: 04/12/2007 11:09:19
Mensagens: 210
Localização: Sapucaia do Sul
Offline

Opa, bland.

Fiz como você falou e funcionou.

Uma outra sacanagem que tinha utilizado para injetar as dependências era anotar o meu @ManagedBean também com @Controller mas ficava estranho ter duas anotações com o mesmo objetivo, ficava assim:


E depois @Inject em cima da propriedade do ManagedBean para injetar os serviços...

Uma observação: <aop:aspectj-autoproxy /> não foi preciso colocar isso no xml, o que esse atributo faz?
[MSN]
bland
JavaEvangelist

Membro desde: 10/12/2004 09:36:35
Mensagens: 330
Offline

Maicon,

Abstraia essa linha. Foi um copy / paste que fiz. Irei até remover dos meus xml's.

Quanto a solução, existem diversas. Essa que mostrei achei a mais simples.

E pelo que você falou, também, né?

Um grande abraço e bons códigos.

http://www.twitter.com/almeidafabiano

Fabiano Almeida.
[MSN]
maiconramones
JavaGuru
[Avatar]

Membro desde: 04/12/2007 11:09:19
Mensagens: 210
Localização: Sapucaia do Sul
Offline

Valeu pela força Brother.

Abraço
[MSN]
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team