rock:
alias:
Olá amigos do forum.
Estou iniciando com o uso do Seam e aos trancos e barrancos a coisa está indo :lol: , mas venho aos colegas pedir ajuda sobre um caso.
Tenho um managed-bean com escopo PAGE para utilizar em um xhtml. A pagina, por sua vez, usa alguns componentes da biblioteca A4J, como por exemplo o a4j:commandLink
Ocorre que, no action deste link, o meu managed-bean está sendo recriado pelo Seam, e eu preciso usar a instancia original que renderizou a pagina. Pelo que eu entendi da documentação o estado do escopo PAGE deveria ser “persistido”, mas nao é isso que está ocorrendo.
A unica forma que consegui fazer isso foi criar uma conversação longa (com o bean com escopo CONVERSATION), e passar com o a4j:commandLink o parametro “conversationId”. Aí funcionou, mas na verdade o requisito nao tem necessidade de criar uma conversação.
Não é possivel mesmo acessar o bean de escopo PAGE, após a pagina ser renderizada?
Obrigado.
‘alias’, se compreendi corretamente, o que você está tentando fazer é possível sim. Para isso, mantenha na mesma página (e conversação temporária, gerenciada automaticamente pelo seam).
Se você tiver um componente com scope PAGE na página ‘home.xhtml’ e acessar a mesma página com abas diferentes, serão instâncias diferentes do componente. Isto porque serão conversações temporárias diferentes criadas automaticamente pelo seam (’…with respect to multi-window operation …’).
Alguns problemas relacionados com o seu:
tentar fazer alguma operação como inicializar um componente com scope PAGE em uma página anterior onde o componente realmente será utilizado. Explicando melhor esse problema/erro: se na página ‘A’ vc criar um link para uma action que inicializará o componente de scope PAGE e redirecionar para a página ‘B’, não vai funcionar. Na página ‘B’ será outra instância do componente.
Utilizo muito componentes com scope PAGE para listagens. Às vezes, quando preciso inicializar o componente, utilizo page actions.
Bem, para tentar ajudar melhor:
1- Como descobrisse que a instância utilizada ao clicar no botão é diferente da que deseja?
2- Como está o seu a4j:commandLink? é um link para uma action do componente apenas?
Se conseguiu resolver o problema posta pra gente ficar sabendo!
-
Prezado rock, valeu pela ajuda.
Entao, o funcionamento desse meu componente com escopo PAGE ai é todo na mesma pagina mesmo. As unicas requests que ocorrem sao requisições ajax mesmo. A principio estaria de acordo com o cenario que voce descreveu, de manipular o componente PAGE na mesma pagina. Mas nao funciona! :lol: . É provável que eu esteja fazendo algo errado, hehe, mas ainda nao determinei o que.
No meu a4j:commandLink, sim, só tenho mesmo a action nele. Pra saber que o Seam criou outra instancia, eu tenho um metodo anotado com @Create, o qual é executado novamente no momento que eu clico no link (e antes de ir para o metodo do action, é claro).
Para “resolver” o problema nesse metodo do @Create eu coloquei um @Begin, entao é criada uma conversação e posso fazer as requisições ajax usando essa instancia. Mas nao queria usar uma conversação longa pra essa pagina, entende, pois do ponto de vista do requisito nao é uma “conversação”. Só vou manter assim se nao tiver outro jeito mesmo :lol:
Valeu pessoal, obrigado.