Como criar meu proprio Bean Faces EL Resolver?  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
lindberg713
JavaChild
[Avatar]

Membro desde: 21/03/2009 12:53:35
Mensagens: 127
Offline

Criei um mecanismo de injeção de dependencia para fazer uns testes aqui e queria integra-lo ao jsf de modo que funcione parecido como o SpringBeanFacesELResolver onde eu não precise declarar meus ManagedBeans no faces-config de modo que eu chame um managedBean na minha pagina pelo ID do bean. Como por exmeplo : #{meuMB.incluir} onde meuMB é o ID meu bean no meu container de injeção de dependencias. Resumindo quero dizer ao jsf como quero que ele encontre o managedBean.

Alguem pode me ajudar?

Obrigado

Abraço,
Victor Lindberg

- Seu projeto usa JDBC? Veja uma solução fácil, http://www.lindbergframework.org , que prover recursos para aplicações que usam JDBC, de modo a limpar o sql dos DAOs, libertando você de se preocupar com ResultSets e te livrando de ter que percorrer sempre os ResultSets para popular seus objetos como resultado de uma consulta, criando um repositório separado só para seus comandos SQL, limpando seus DAOs, gerenciamento de transações de forma fácil e transparente, via annotation, injeção simples de dependências, e muito mais. Confira em http://www.lindbergframework.org

- Você é mais um se perguntando como fazer para manter o estado de um managedbean entre páginas diferentes ou na mesma página sem usar escopo de session nem de request usando spring + jsf? Então leia esse post e conheça o 'myview' http://lindbergframework.blogspot.com/2012/02/como-manter-o-estado-de-um-managedbean.html
lindberg713
JavaChild
[Avatar]

Membro desde: 21/03/2009 12:53:35
Mensagens: 127
Offline

Já resolvi. Tava faltando chamar elContext.setPropertyResolved(true); na implementação do meu ElResolver.

Abraço,
Victor Lindberg

- Seu projeto usa JDBC? Veja uma solução fácil, http://www.lindbergframework.org , que prover recursos para aplicações que usam JDBC, de modo a limpar o sql dos DAOs, libertando você de se preocupar com ResultSets e te livrando de ter que percorrer sempre os ResultSets para popular seus objetos como resultado de uma consulta, criando um repositório separado só para seus comandos SQL, limpando seus DAOs, gerenciamento de transações de forma fácil e transparente, via annotation, injeção simples de dependências, e muito mais. Confira em http://www.lindbergframework.org

- Você é mais um se perguntando como fazer para manter o estado de um managedbean entre páginas diferentes ou na mesma página sem usar escopo de session nem de request usando spring + jsf? Então leia esse post e conheça o 'myview' http://lindbergframework.blogspot.com/2012/02/como-manter-o-estado-de-um-managedbean.html
elugo
JavaChild
[Avatar]

Membro desde: 08/02/2008 15:30:54
Mensagens: 139
Localização: Campo grande ms
Offline

Poderia postar o código?
estou precisando fazer exatamente isso!
vlw
[Email] [MSN]
lindberg713
JavaChild
[Avatar]

Membro desde: 21/03/2009 12:53:35
Mensagens: 127
Offline

Cara meu ElResolver ta funcionando blz no componente que desenvolvi. Nao sei se vai dá pra vc entender mas abaixo vai o fonte, qualquer dúvida me reporta ai.

This message was edited 1 time. Last update was at 18/03/2011 14:27:07


Abraço,
Victor Lindberg

- Seu projeto usa JDBC? Veja uma solução fácil, http://www.lindbergframework.org , que prover recursos para aplicações que usam JDBC, de modo a limpar o sql dos DAOs, libertando você de se preocupar com ResultSets e te livrando de ter que percorrer sempre os ResultSets para popular seus objetos como resultado de uma consulta, criando um repositório separado só para seus comandos SQL, limpando seus DAOs, gerenciamento de transações de forma fácil e transparente, via annotation, injeção simples de dependências, e muito mais. Confira em http://www.lindbergframework.org

- Você é mais um se perguntando como fazer para manter o estado de um managedbean entre páginas diferentes ou na mesma página sem usar escopo de session nem de request usando spring + jsf? Então leia esse post e conheça o 'myview' http://lindbergframework.blogspot.com/2012/02/como-manter-o-estado-de-um-managedbean.html
AdemirPinto
Thread.start()
[Avatar]

Membro desde: 19/01/2011 13:47:06
Mensagens: 43
Offline

Fala pessoal,

alguem poderia me responder o que é ELResolver? Estou começando no JSF, o que está acontecendo é que quando preciso dos dados de MB retorna NULL se eu uso assim:



Mas funciona se eu usar assim:


Alguem sabe pq o segundo código funciona e me retorna o MB nao nulo?

Grato
Ademir

This message was edited 1 time. Last update was at 13/07/2011 13:36:01

[Email]
lindberg713
JavaChild
[Avatar]

Membro desde: 21/03/2009 12:53:35
Mensagens: 127
Offline

Cara um ELResolver é um resolvedor de valores dentro de um contexto a partir de uma Expressão, ao qual chamamos de Expression Language (EL). Entao digamos que temos a expressão #{clientesMB.cliente.nome} então o ELResolver do JSF é responsável por interpretar essa expressão e devolver o valor da propriedade 'nome', dentro do objeto 'cliente', que é uma propriedade que está dento do ManagedBean clientesMB. Esse clientesMB, neste caso, é um bean do contexto do JSF, então o ELResolver vai baseado na exprssao encontrar a instancia adequada e obter o valor solicitado na expressão.

Respondendo sua outra pergunta, o seu primeiro trecho de código não funciona por que o método getSessionMap() retorna um Map imutável com os atributos adicionados a sessão do usuário, apenas isso e esse map não terá os ManagedBeans do JSF que vc criou pois estes estão dentro do contexto do JSF e não como atributos da sessão do usuário.
Então quando vc faz:

O map retornado nao tem o bean que vc procura pois este esta dentro do contexto jsf e nao na sessão do usuário explicitamente.
Ressalto que esses beans poderão sim estar como atributos na sessão do usuário, mas apenas se vc definir no seu faces-config eles como sendo de escopo de session ou se vc simplesmente em algum momento adicionar algum destes a sessão do usuário explicitamente.

O seu segundo trecho funciona pq vc obtem o ELResolver do contexto do JSF, agora sim, a partir desse resolver vc pode obter qualquer valor de qualquer ManagedBean do JSF.

Quando vc faz


Observe que vc obtem o ELResolver do contexto do JSF, o FacesContext. Por isso funciona.

Espero ter ajudado.

This message was edited 1 time. Last update was at 13/07/2011 14:15:25


Abraço,
Victor Lindberg

- Seu projeto usa JDBC? Veja uma solução fácil, http://www.lindbergframework.org , que prover recursos para aplicações que usam JDBC, de modo a limpar o sql dos DAOs, libertando você de se preocupar com ResultSets e te livrando de ter que percorrer sempre os ResultSets para popular seus objetos como resultado de uma consulta, criando um repositório separado só para seus comandos SQL, limpando seus DAOs, gerenciamento de transações de forma fácil e transparente, via annotation, injeção simples de dependências, e muito mais. Confira em http://www.lindbergframework.org

- Você é mais um se perguntando como fazer para manter o estado de um managedbean entre páginas diferentes ou na mesma página sem usar escopo de session nem de request usando spring + jsf? Então leia esse post e conheça o 'myview' http://lindbergframework.blogspot.com/2012/02/como-manter-o-estado-de-um-managedbean.html
AdemirPinto
Thread.start()
[Avatar]

Membro desde: 19/01/2011 13:47:06
Mensagens: 43
Offline

lindberg713 wrote:Cara um ELResolver é um resolvedor de valores dentro de um contexto a partir de uma Expressão, ao qual chamamos de Expression Language (EL). Entao digamos que temos a expressão #{clientesMB.cliente.nome} então o ELResolver do JSF é responsável por interpretar essa expressão e devolver o valor da propriedade 'nome', dentro do objeto 'cliente', que é uma propriedade que está dento do ManagedBean clientesMB. Esse clientesMB, neste caso, é um bean do contexto do JSF, então o ELResolver vai baseado na exprssao encontrar a instancia adequada e obter o valor solicitado na expressão.

Respondendo sua outra pergunta, o seu primeiro trecho de código não funciona por que o método getSessionMap() retorna um Map imutável com os atributos adicionados a sessão do usuário, apenas isso e esse map não terá os ManagedBeans do JSF que vc criou pois estes estão dentro do contexto do JSF e não como atributos da sessão do usuário.
Então quando vc faz:

O map retornado nao tem o bean que vc procura pois este esta dentro do contexto jsf e nao na sessão do usuário explicitamente.
Ressalto que esses beans poderão sim estar como atributos na sessão do usuário, mas apenas se vc definir no seu faces-config eles como sendo de escopo de session ou se vc simplesmente em algum momento adicionar algum destes a sessão do usuário explicitamente.

O seu segundo trecho funciona pq vc obtem o ELResolver do contexto do JSF, agora sim, a partir desse resolver vc pode obter qualquer valor de qualquer ManagedBean do JSF.

Quando vc faz


Observe que vc obtem o ELResolver do contexto do JSF, o FacesContext. Por isso funciona.

Espero ter ajudado.


Valeu lindberg713,

Tendi o que vc disse...muito bem explicado.

Interessante que para setar o MB eu nao preciso do ELResolver, eu uso conforme abaixo:



Abraços e muito obrigado.
Ademir

[Email]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team