[RESOLVIDO]ManangedBean em @ViewScope executa o constructor em toda requisicao

16 respostas
R

alguem já passou por isso?

16 Respostas

E

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.

H

Ele executa toda vez que você navega até a página ou a cada chamada ajax feita?

R

Sim a cada requisição feita no MB ele passa no construtor…

H
R

Estou respondendo para o autor do tópico…

R

Mas em um ManagedBean @ViewScoped o construtor não é executado sempre que há uma requisição, pelo menos não é uma regra.

E

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.

R

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…

H

ErickMacedo:
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

R

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

H

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.

R

jakefrog:
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

R

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

R

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.

R

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

R

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>
Criado 21 de agosto de 2012
Ultima resposta 31 de ago. de 2012
Respostas 16
Participantes 7