alguem já passou por isso?
[RESOLVIDO]ManangedBean em @ViewScope executa o constructor em toda requisicao
16 Respostas
Bom dia.
Eu utilizo @ViewScope e funciona normalmente, carrega uma vez para exibir a pagina e dura enquanto ela esta sendo usada.
Ricardo, tem que posta o código ou erro que esta aparecendo.
Ele executa toda vez que você navega até a página ou a cada chamada ajax feita?
Sim a cada requisição feita no MB ele passa no construtor…
Estou respondendo para o autor do tópico…
Mas em um ManagedBean @ViewScoped o construtor não é executado sempre que há uma requisição, pelo menos não é uma regra.
Normal … a cada requisição que você faz fora do seu escopo visão , realmente ele ira “construir” o bean novamente, ou seja se você estiver na mesma “pagina” na mesma visão significa que você está dentro do mesmo escopo, caso contrario consequentemente estará em scopo diferente, geralmente é assim que funciona.
Mas em um ManagedBean @ViewScoped o construtor não é executado sempre que há uma requisição, pelo menos não é uma regra.
Sim vc esta certo, eu entrei na minha tela de pessoa e ao entrar na tela ele passa no construtor 2 vezes, e a cada requisição ele passa uma vez,
Por outro lado entrei na minha tela de estabelecimentos e ele passa as mesmas 2 vezes no construtor, e a cada requisição ele não passa no construtor, pq será?
Ambos contrutores estão vazios…
Normal … a cada requisição que você faz fora do seu escopo visão , realmente ele ira “construir” o bean novamente, ou seja se você estiver na mesma “pagina” na mesma visão significa que você está dentro do mesmo escopo, caso contrario consequentemente estará em scopo diferente, geralmente é assim que funciona.Por isso que eu perguntei se “Ele executa toda vez que você navega até a página ou a cada chamada ajax feita?”.
Se for a cada vez que navega até lá não tem erro. Se for a cada chamada ajax feita quando se está na página aí é o apocalipse! Mahuaha
Mas em um ManagedBean @ViewScoped o construtor não é executado sempre que há uma requisição, pelo menos não é uma regra.
Sim vc esta certo, eu entrei na minha tela de pessoa e ao entrar na tela ele passa no construtor 2 vezes, e a cada requisição ele passa uma vez,
Por outro lado entrei na minha tela de estabelecimentos e ele passa as mesmas 2 vezes no construtor, e a cada requisição ele não passa no construtor, pq será?
Ambos contrutores estão vazios…
Ele passa 2 vezes no construtor somente quando eu subo o servidor e entro na app pela primeira vez, apos isso ele só passa uma…
Em uma tela minha aqui ele passa a cada requisição ajax, já na outra não…
Isso só pode ser apocalipse mesmo…kk
Uhum.
O servidor pode criar um pool de MB, então quando você levanta a aplicação ele pode chamar até 30 se ele quiser.
Se você estiver parado na tela e a chamada ajax chamar o construtor tem coisa errada aí. Muito errada mesmo.
Uhum.O servidor pode criar um pool de MB, então quando você levanta a aplicação ele pode chamar até 30 se ele quiser.
Se você estiver parado na tela e a chamada ajax chamar o construtor tem coisa errada aí. Muito errada mesmo.
Não é esse o caso não, só faz a requisição se eu solicitar, mas isso na minha tela de pessoa…
Estou estudando aqui pra ver esse gargalo,
Abrcs
Bem meu chefe descobriu aqui, na tela de pessoa temos no form um biding com HtmlForm onde limpamos os valores submetidos quando necessário em nosso Mb
<h:form id="formEdicao" binding="#{pessoaMb.form}">
Que no nosso Mb esta assim
private HtmlForm form;
Agora a solução seria limpar a arvore de componentes, pois esse HtmlForm não ta com nada naum…pensa que vc pode ter um @PostContruct, onde vc pode carregar objetos, popular listas e etc…seria péssimo para uma aplicação…
Bem o meu problema consegui resolver agora o autor do tópico tem que testar começando a tirar algumas coisas da tela pra ver…
Abrcs
Tarde!
rafael_jesus nao entendi como voce resolveu ?
Meu MB esta em ViewScope e executa o constructor a cada requisicao ajax! jakefrog
Porem se eu mudar para SessionScope, funciona maravilha… claro que nao posso deixar em sessao
nao posto o codigo agora pois e muito extenso(mas posso postar), sao varios componentes usados na mesma view. e nessa mesma view acesso outros MB
todos em viewScoped, e todos sao reconstruidos a cada requisicao ajax.
Antes da JSF 2.2 existia um bug onde o @ViewScope não trabalhava como se esperava com o jstl e binding de componentes,mas parece que a partir de agora isso já foi resolvido
rjpereira1000000 muito obrigado mesmo, a solucao estava aqui.
bastou adicionar no web:
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>