Voce ta usando algum framework tipo o Seam ou ta usando JSF2,CDI?
O escopo de Request realmente ira acontecer isso vc tera que usar ou Page, ViewScoped,Session,Conversation
vai depender do q vc ta usando
Request cada requisição independente se é ajax ou nao ele gera uma nova instancia
B
barbon
O ideal seria utilizar o ViewScoped, caso esteja utilizando JSF2.0.
Caso esteja utlizando JSF 1.2, você pode utilizar o pacote MyFaces Tomahawk com o seu KeepAlive.
Dessa forma quando você fizer uma requisição Ajax, o estado da MB será mantido.
L
leonardobhbr
barbon:
O ideal seria utilizar o ViewScoped, caso esteja utilizando JSF2.0.
Caso esteja utlizando JSF 1.0, você pode utilizar o pacote MyFaces Tomahawk com o seu KeepAlive.
Dessa forma quando você fizer uma requisição Ajax, o estado da MB será mantido.
Considero que se voce estiver utilizando JSF1.2 e melhor dar uma olhada no Seam do que utilizar Tomahawk só por causa do KeepAlive.
C
cris_rufino
Então,
Estou usando JSF 2.0 e PrimeFaces, nenhum framework.
Mas da próxima vez dou uma olhada no Seam, agora preciso resolver assim porque já estou no final.
Sobre o escopo do mbean, tentei usar o ViewScope, mas no meu caso não foi possível, possivelmente por limitação na estruturação dos meus mbeans. Vejam:
O Ajax seria necessário na tela de entrada em estoque (estoque.xhtml, contendo o mbean EntradaEstoqueMB).
Para gravar uma entrada é necessário selecionar um fornecedor (FornecedorMB, também usado no cadastro de fornecedores, com RequestScope).
Além disso é necessário selecionar vários produtos para essa mesma entrada (ProdutoMB, também usado no cadastro de produtos, portanto com RequestScope).
Neste caso, o mbean EntradaEstoqueMB possui um mbean FornecedorMB e um List, pois é assim que deve ser gravado na base.
Sendo assim, não posso usar nenhum escopo maior que RequestScope em EntradaEstoqueMB, por causa dos outros mbeans.
Então mais uma vez tenho uma dúvida conceitual:
Deveria eu usar os mbeans desta forma? Ou teria outra forma melhor?
Agradeço desde já pelas respostas.
L
leonardobhbr
No seu caso ao meu ver seria melhor EntradaEstoqueMB ser ViewScope
e ele ter um atributo FornecedorMB e um List ProdutoMB
como esses objetos estaria dentro do EntradaEstoqueMB e seriam instanciado pelo objeto EntradaEstoqueMB não teria pq SessionScope
ate pq se voce colocar todo mundo com SessionScope se usuario selecionar um fornecedor na estoque.xhtml e acessar a pagina do cadastro do fornecedor antes de gravar essa entrada esse fornecedor estara selecionado
C
cris_rufino
Então leonardobhbr,
É isso que eu penso também.
Mas colocar EntradaEstoqueMB como ViewScope não dá, porque FornecedorMB e ProdutoMB são RequestScope, isso dá erro.
Então por enquanto ainda não tenho uma solução conceitual do que deveria se feito neste caso.
No blog do Rafael Pontes fala sobre “Um ou Vários MBeans?” (http://www.rponte.com.br/tag/boaspraticas/), onde a princípio ele defende que deve ter um único mbean para cada página. Mas o que fazer neste meu exemplo, duplicar as informações contidas em FornecedorMB e ProdutoMB? Acho que não.
L
leonardobhbr
Significa o que esta dando erro de compilação? em tempo de execução ? tem como postar o codigo das classes e o stackTrace ?
C
cris_rufino
Segue o erro ocorrido ao colocar EntradaEstoqueMB como ViewScope…
… por isso não consigo aumentar o escopo de EntradaEstoqueMB, já que FornecedorMB deve ficar como RequestScope.
Alguma idéia?
C
cris_rufino
Consegui resolver!!
Coloquei o EntradaEstoqueMB como ViewScope.
Mas para isso tive que retirar FornecedorMB e List do mbean EntradaEstoqueMB.
No lugar de FornecedorMB, coloquei só o idFornecedor.
E no lugar de List, coloquei List.
Aí o Ajax funcionou blz!!
Obrigado a todos pela atenção.
G
giorgialberto
Pessoal estou construindo uma aplicação onde tenho um template full page e no top desse layout tenho um menubar. Quero quando acionar o menuitem (ajax) o meu contener central atualize (apenas ele). Teria como alguém me ajudar? Exemplos? Grato pela atenção de todos.