[RESOLVIDO] Como manter o estado de um managedBean entre duas páginas com JSF 2?

muito interessante isso ai… eu precisei no meu projeto esses dias e tive que fazer uma verdadeira “gambiarra”…

será que tem algum tutorial ou alguma explicação mais detalhada de como implementar em um projeto?

é que eu não uso maven, e não entendi muito bem os códigos acima.

Obrigado.

A dica abaixo esta no site da apache.org na parte que fala sobre @ViewAccessScoped. Mas eu não faço idéia de como fazer isso funcionar, se alguém souber por favor informe.

https://cwiki.apache.org/confluence/display/EXTCDI/JSF+Usage#JSFUsage-ViewAccessScope

Hint
@ViewAccessScoped beans are best used in conjunction with the CODI ClientSideWindowHandler, which ensures a clean browser-tab separation without touching the old windowId. Otherwise a ‘open in new tab’ on a page with a @ViewAccessScoped bean might cause the termination (and re-initialization) of that bean.

Pessoal, desculpa a demora em responder. É que por algum motivo eu não to recebendo email dos posts do guj. Por acaso foi que eu vi agora.

IMPORTANTE: Enifm, antes de mais nada, quero dizer que o myfaces CODI é uma extensão do CDI. Então para que seu projeto funcione e tenha esse recurso do ViewAccessScoped seu projeto deve ser baseado no CDI. A implementação de referencia do CDI é o JBoss Weld. Vejam na descrição do projeto CODI ,“MyFaces CODI is your best friend for CDI based projects”, que ele diz que é o seu melhor amigo para projetos baseados em CDI. Ou seja, para funcionar seu projeto tem que usar o CDI.

IMPORTANTE: Um outro detalhe importante é que o managedbean tem que ser Serializable. Tanto o managedbean quanto o que beans que vc usa dentro do managedbean. Por exemplo, uma fachada ou bc que vc injeta no seu MB devem ser Serializable.

Vi que muitos perguntaram se eu adicionei alguma coisa no meu web.xml, seu eu fiz alguma configuração e tal. Nao precisei fazer nada. Só adicionei as dependencias no pom do maven, para quem nao usa maven é equivalente a adicionar as libs no meu WEB-INF/lib, e prontsó subi a aplicação e ta funcionando. Mas repito. O meu projeto, mesmo contra minha vontade pois é la do meu trabalho e prefiro usar o spring, é baseado no CDI.

De qualquer forma, vejo que esse é um problema universal. Todo mundo passa por isso, todo mundo quer esse escopo e todo mundo fica se perguntando como fazer. Neste exato momento estou precisando disso em um projeto que comecei aqui em casa e nao estou usando o CDI, pois como falei, prefiro muito mais o spring 3.

Então, vou desenvolver esse novo scopo de conversação entre paginas para o JSF 2, como uma extensão, vou tentar fazer algo simples e plugavel, de modo que seja facil que nem fazer miojo colocar e usar. Esses dias ainda volto aqui pra dizer como resolvi esse problema sem usar o CDI. Seja usando spring atraves da criação de um novo scopo ou direto no JSF 2. Enfim, aguardem que esses dias eu retorno.

Quem tiver usando CDI basta colocar as libs que compartilhei e subir a aplicação que funciona.

Qualquer duvida posta ae.

Pessoal, consegui.

Passei essa noite trabalhando em como fazer para implantar o escopo de conversação e view no JSF baseado em beans do spring e depois de muito estudar e pesquisar consegui colocar o escopo de conversação (enquanto uma página estiver usando o managedbean) e o escopo de view (o estado permanece ativo para a página atual).

Ficou, show de bola, funcionando beleza. Tive um bom trabalho pesquisando, estudando e colocando em pratica.

O único detalhe é que tem que usar o spring. Pois os dois novos escopos serão gerenciados pelo spring e o managedbean tem que ser um bean do spring.

Como o mais normal é usarmos um container de inversão de controle para injeção de dependencias, creio que todos aqui usam, seja spring ou seja uma implementação do CDI, então creio que o problema ta resolvido. Pois se o projeto usar CDI, o que to usando la no meu trabalho, basta adicionar o apache myfaces CODI como eu disse aqui neste topico nos posts anteriores. Se usar o spring, que é minha preferencia e o que to usando no meu projeto particar, basta usar a solução que apliquei trabalhando esta noite.

Mas vcs devem ta se pergutando e cade a solução, cade o diabo da solução.

Calma, calma… Eu vou fazer o acabamento, até amanha e gerar uma lib de modo que pra vc seja o mais simples e transparente de modo que para usar e configurar seja simples.

Então até amanha faço isso e posto aqui um mini tutorial com as instruções para colocar esses dois escopos.

Pessoal, prometi postar a solução aqui mas como estou viajando daqui a pouco ja pro carnaval e hoje foi muita coisa pra organizar acabei não tendo tempo pra postar aqui. Assim que voltar do carnaval eu posto tudo direitinho aqui.

Abraço.

Encontrei este mesmo problema e criei uma solução:

https://bitbucket.org/filipenevola/filipe-nevola-helper/wiki/BeingUsedScope

Enquanto você estiver usando este Bean em requests consecutivos ele continuará vivo.

att,

Pessoal, demorei mas ka estou pra dar o feedback da solução. Tava viajando e só agora puder postar.

Para simplificar toda a configuração, implementei uma lib que já prover os escopos de view e de conversação de forma integrada entre o spring3 e jsf 2. Essa lib se chama myview e ta como submodulo do framework que mantenho chamado lindbdegframework. Nada complicado não. Só coloquei como submodulo do framework de modo a aproveitar todo a infraestrutura que ja tenho configurada do maven, blog, etc… do meu framework. A ideia é a medida que eu for criando soluções para estes tipos de problemas que todo mundo aqui fica atrás, fica postando e fica se arrancando os cabelos atrás, ai eu vou colocando no myview e lançando releases.

Para usar é muito simples. Basta seguir o tutorial do link abaixo. Tem explicando como usar a partir do maven e tb sem usar o maven. Uma vez seguidos os passos do tutorial abaixo, basta anotar seus managedBeans do JSF (gerenciados pelo spring, tem que ser gerenciados pelo spring e no tutorial tem mostrando, caso não saiba, como fazer) com as annotations @AccessScoped para definir um escopo de conversação e manutenção de estado enquanto alguma página estiver acessando o managedbean ou @SameViewScoped para definir um escopo de mesma página, ou seja, que a instancia do managedbean ficará viva enquanto a mesma página estiver ativa.

Sem mais delongas, vamos ao que interessa. Veja o tutorial do myview no link abaixo.

Tutorial do lindbergframework-myview: http://lindbergframework.blogspot.com/2012/02/como-manter-o-estado-de-um-managedbean.html

Abraço, espero ter ajudado.

Sempre a disposição,

Victor Lindberg

Obrigado @lsjunior seu projeto resolveu minhas duvidas sobre ConversationScoped.

Obrigado pelo feedback.

Boa noite pessoal!

Lendo o post e me interessei pelo Apache myFaces CODI e tive os mesmo problemas que vcs para usa-lo… mas depois de ler muito a documentação consegui fazer funciona em um projeto de teste.

segue mini tutorial sobre as dependências do CODI


para usar a extenção do CDI myFaces CODI com o jsf é necessario ter:

  • implementação do JSF

  • implementação do CDI

  • implementação do Bean Validator

e deve se adicionar ao projeto os seguinte modulos do CODI

  • CODI core

  • CODI-JSF module

  • CODI-Message

  • BV-Module

o modulo CODI core possui os seguintes jars:
- myfaces-extcdi-core-api-1.x.x.jar
- myfaces-extcdi-core-impl-1.x.x.jar

o mudulo CODI-JSF possui os seguintes jars:
- myfaces-extcdi-jsf20-module-api-1.x.x.jar
- myfaces-extcdi-jsf20-module-impl-1.x.x.jar

o modulo CODI-Message possui os seguintes jars:
- myfaces-extcdi-message-module-api-1.x.x.jar
- myfaces-extcdi-message-module-impl-1.x.x.jar

o modulo BV possui os seguintes jars:
- myfaces-extcdi-bv1-module-api-1.x.x.jar
- myfaces-extcdi-bv1-module-impl-1.x.x.jar

no projeto teste, utilizei como implementação do JSF o Mojarra 2.1.16, para o CDI utilizei o Weld 1.1.10, e para o Bean Validator o Hibernate Validator 4.3.1

nos seu ManagedBean deveram ser anotados com as annotations do CDI e implementar Serializable

não vou entrar em detalhas sobre a criação do projeto e configuração do JSF e CDI por que ja tem muitos tutoriais aqui e artigos falando sobre o assunto