Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida sobre a ConversationScoped

Boa noite pessoal, tudo bem?

Estou com um projeto onde utilizo jsf + primefaces + cdi e utilizo o mesmo controller para controlar mais de uma página (geralmente são 2, uma de pesquisa e outra de cadastro/alteração). Utilizo o SessionScoped mas já descobri que é uma má prática e me acarreta problemas. Comecei a estudar o ConversationScoped do cdi e acredito que ele possa resolver meu problema. Ele me dá o controle de iniciar a conversa e terminar em algum momento. Mas isso pode me trazer outro problema enorme com conversas iniciadas e não finalizadas (usuário não chegando no passo que finaliza a conversa mudando de tela por exemplo). Minha dúvida é se existe alguma maneira de levantar as conversas em aberto e poder finalizá-las em algum ponto. Imaginei de implementar essa opção junto ao menu, ou até no construtor dos controllers. Assim eu sempre que for entrar em algum controller novo eu verifico se existem conversas em aberto e finalizo todas.

2 respostas

Acho que o melhor jeito é vc definir um bom tempo de expirar a sessão, já que os objetos do conversation scoped ficam na sessão.

Não conheço um jeito de verificar todas as conversas, mas vc pode olhar todos objetos da sessão, se quiser. Apesar que eu não recomendo :).

solução!

Antes de usar cdi eu conseguia remover objetos da sessão de maneira bem simples. Achei que com as conversas seria algo parecido mas pelo jeito não. Então só me restam 3 opções. Ou eu crio um controller pra cada view, ou fico pendurando objetos na session e recuperando (o que acredito ser uma péssima idéia) ou paro de usar cdi. Tentei agilizar o trabalho e a carga no servidor usando um controller para a tela de pesquisas e cadastros mas acho que vou partir pra maneira padrão mesmo. um controller pra cada view. Só pra finalizar é uma má prática utilizar um controller para mais de uma view?