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?
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
É 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.
Segue o erro ocorrido ao colocar EntradaEstoqueMB como ViewScope…
GRAVE: O JSF estará indisponível para criar o bean gerenciado mbEntradaEstoque quando ele for solicitado. Os seguintes problemas foram encontrados:
- O escopo do objeto referido pela expressão #{mbFornecedor}, request, é menor do que o escopo do bean gerenciado referido (mbEntradaEstoque) de view
… por isso não consigo aumentar o escopo de EntradaEstoqueMB, já que FornecedorMB deve ficar como RequestScope.
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.