SEAM - Escopo Conversation

Pessoal, gostaria da ajuda de vocês num problema que estou passando utilizando esse escopo. A situação é a seguinte:

Tenho três beans diferentes, cada um com sua tela, e os três tem relação. Do primeiro posso ir para o segundo, do segundo para o terceiro, e também voltar do terceiro para o segundo, e do segundo para o primeiro.

O que estou tentando fazer é acessar o meu primeiro bean no segundo, por exemplo. Preenchi tudo bonitinho na minha primeira tela, e agora quero passar para a segunda, existe alguma maneira de eu acessar bean1.nome na 2° tela? Estava utilizando o setPropertyActionListener para fazer essa ponte, mas gostaria de saber se posso fazer de outra maneira.

A dúvida é mais em como posso utilizar esse escopo pra resolver eu problema, se for possível hehe!

Obrigado!

Boa tarde,

Se você está utilizando o Seam e colocou os 3 beans em escopo de conversação, sim você poderá acessar todos eles até o momento que você encerre a conversação.

Ex: Em uma action ou em uma navigation rule você inicia a conversação.
Após isso você fica navegando entre as telas e acessando os 3 beans que manteram seu estado até que la na terceira tela você clique em um CommandButton que fará com que a conversação seja encerrada.

Aconcelho você dar uma lida na documentação do sim para obter uma resposta mais clara de como fazer.

Abraços,

Fábio Barboza de Oliveira

Tudo bem, mas posso fazer isso apenas colocando @Scope( ScopeType.CONVERSATION ) ? Não preciso fazer mais nada? Onde defino que apenas aqueles três beans vão estar em conversação?

Já coloquei o escopo nos dois beans, já tirei e coloquei pelo pages usando e nada funfa =(

Eu posso mesmo usar #{bean1.nome} em outra tela, gerenciada pelo bean2, se estiver usando esse escopo?

Bom dia,

Quando você utiliza o @Scope( ScopeType.CONVERSATION ) você está informando que um Managed Bean terá escopo de conversação, colocando nos seus 3 Managed Beans os 3 terão o comportamento de conversação.
A partir do momento que você iniciar uma Conversation e for invocando esses MB eles estarão participando da Conversation e somente perderão seu “estado” quando você encerrar a Conversation.

Abraços,

Fábio

Cara, não consegui usar corretamente de jeito nenhum o escopo Conversation =(

Vou tentar detalhar pra vocês para ver se alguém consegue me ajudar e eu melhorar esse meu código.

Primeiramente, tenho 3 beans, cada um com sua tela, e eles funcionam numa sequencia. Do primeiro vou para o segundo, do segundo para o terceiro e posso voltar também.

Entendi que o Escopo Conversation “salva” a tela do jeito que você a deixou quando saiu dela, até você terminar a conversação. Isso até estava acontecendo, mas eis os problemas:

1°) O @Begin só funcionava quando eu colocava no meu método @Create, equivalente ao @PostConstruct. Quando eu colocava por exemplo em um método que chamaria quando clicasse num link para ir para a segunda tela ( atributo action dele ), não funcionava. Não entendi o porque :confused:

2°) Fazendo essa gambiarra de cima, estava funcionando passar de uma tela para a outra, e quando voltava estava lá tudo bonitinho, mas quando eu ia salvar nessa segunda tela, dava o seguinte erro:

E só dava isso na primeira vez que eu tentava salvar, nas outras vezes funcionava direito. Não consegui descobrir o porque disso. Falta setar alguma anotação para que funcione perfeitamente? Qualquer ajuda será bem vinda, só quero aperfeiçoar meu código.

Do jeito que estou fazendo agora é utilizando o escopo SESSION, funcionou perfeitamente, só vou ter que fazer uma validação manual para a pessoa não conseguir chegar na 3° tela sem antes ter que passar pela 1° e 2°, coisa que já estava conseguindo utilizando o escopo CONVERSATION.

Enfim, qualquer dúvida sobre meu problema podem falar, tento explicar de uma maneira diferente, ou sei lá!

Obrigado!