Dúvida JSF - Spring responsável pelos managed-beans
13 respostas
fabio.massa
Amigos,
Criei um novo projeto do tipo Dynamic Web Project, estava utilizando JSF e o hibernate, agora quero integrar com o Spring, a parte do banco de dados está ok, tudo funcionando perfeitamente, porém gostaria de deixar o spring responsável pelos meus managed-beans do JSF, utilizei a annotation @Qualifier(“meuBean”) e funcionou corretamente, porém veio uma dúvida em relação as propriedades:
A declaração do nome do meu bean que depois utilizo nas views e o tipo do meu scopo eu consegui com as annotations @Qualifier e @Scope, agora só não sei o que fazer quando preciso passar alguma propriedade como parametro.
<application><!-- Configura o Facelets --><view-handler>com.sun.facelets.FaceletViewHandler</view-handler><!-- Configura o Spring 2.5 para trabalhar com JSF 1.2 --><el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver></application>
Já tenho configurado tudo que me falou, mais a dúvida ainda persiste quanto o que fazer com as propriedades do bean, como alguns params etc.
Procurei a java magazine agora mas ainda não chegou na banca, vou ficar atrás dela, parece muito interessante.
Valew pela ajuda cara, qualquer novidade eu lhe falo.
Abraços,
D
djemacao
Se quiser entender na prática, compra o livro que citei, lá você aprende a lidar com parâmetros e etc. Acho que, se procura um bom exemplo prático, será uma bom começo.
Bons códigos!
rponte
Como você está utilizando anotações eu aconselho partir para o método tradicional,
String id = FacesContext.getCurrentInstance().getExternalContext().getParameterMap().get("contractId"); // deve ser algo assim, fiz de cabeça.
Ou se não for problema, você poderia se utilizar do Restfaces.
Abraços e boa sorte.
fabio.massa
Fala rponte!
Temporariamente eu estava fazendo do jeito que me falou, mas como não achei nenhuma solução decidi deixar configurado no faces-config mesmo, pelo menos até que encontre uma solução para isso.
Agradeço muito pela ajuda, abraços!
D
danielssribeiro
Fabio,
Vc conseguiu resolver esta questão?
Obrigado
fabio.massa
Falae danielssribeiro blz?
Então para as propriedades que eu passava como parametro por algum link eu resolvi sim:
Aí consegui retirar a configuração do meu managed-bean do xml, deixando o spring responsável por ele.
Qualquer dúvida pode me perguntar!
Abraços,
D
danielssribeiro
Blz Fábio,
Agora que entendi o que precisava realmente.
Me diz uma coisa, vc consegue controlar todos os seus MBeans pelo Spring sem problemas? Sabe me dizer qual a diferença do gerenciamento do JSF para o Spring? Estou estudando um refactory em um projeto que temos alguns spring beans, mas todos os MBeans são gerenciados pelo faces. Queria mudar o gerenciamento dos MBeans para o spring, com o intuito de possibilitar a criação de pointCuts nos seus métodos através do Spring AOP.
Um problema incial que estou tendo é a impossiblidade de levantar os meus MBeans junto com a app. Neste momento, ainda não tenho o contexto do faces que utilizo na construção destes =|
Queria saber a possibilidade destes beans serem instanciados sob demanda, e não todos na subida da app. Ou, caso possível, controlar a ordem do carregamento das classes, fazendo com que o faces suba antes do Spring. Neste caso, nem sei se terei outros problemas =/ terei q analisar…
valeu.
abraço
fabio.massa
Falae danielssribeiro blz?
Ainda não controlamos todos os managed-beans via spring não, mas os novos e a maioria deles já passou por essa refatoração, é que antes tinhamos o managed-beans -> helper -> DAO, vimos que o helper era desnecessário e com o spring injetamos o DAO direto no managed-beans via @AutoWired.
Uma vantagem é que só preciso acessar algum xml para declarar as navigation-rules, só pra isso. Não sei dizer se há uma vantagem de performance deixar o spring cuidando dos managed-beans.
Essa alteração fizemos a pouco tempo, qualquer novidade eu deixo aqui.
Abraços,
D
danielssribeiro
Fábio,
Sabe se consigo instanciar estes beans por demanda?
fabio.massa
Fala danielssribeiro!
Não sei se entendi bem sua pergunta, você deseja instanciar o bean gerenciado pelo spring em um outro managed-bean por exemplo?, se for só isso eu sei que dá sim.
Abraços,
D
danielssribeiro
Fábio,
não é bem isso, cara. Na verdade, o meu problema é que os springs beans configurados por anotação (Component) são instanciados quando levanto a minha aplicação. No entanto, fazendo com que os meus MBeans sejam Spring Beans, queria fazer com que eles não sejam instanciados dessa forma, mas sim sob demanda. Qnd na crição da servlet do meu jsp, instanciar o MBean. Não é assim que o jsf faz no seu gerenciamento de beans?
rponte
danielssribeiro:
Fábio,
não é bem isso, cara. Na verdade, o meu problema é que os springs beans configurados por anotação (Component) são instanciados quando levanto a minha aplicação. No entanto, fazendo com que os meus MBeans sejam Spring Beans, queria fazer com que eles não sejam instanciados dessa forma, mas sim sob demanda. Qnd na crição da servlet do meu jsp, instanciar o MBean. Não é assim que o jsf faz no seu gerenciamento de beans?
Simplesmente coloque o escopo como request ou session.
Esse post é muito bom sobre a integração do Jsf+Spring+Jpa, vale a pena dar uma lida com atenção.