1
resposta

Por que todas as fases são executadas independente do escopo do bean?

Estou com um bean que preciso que certas varáveis sejam inicializadas apenas no momento em que ela é instanciada. Para isso, coloquei no @posconstruct essa inicialização.

Porém monitorar a classe com o PhaseListener, percebi que mesmo o bean sendo sessionScope (ou ViewScope), ele passar por todas as fases (de 1 a 6) a cada interação com o formulário da pagina, inclusive executando o postcontruct e o predestroy novamente.

No meu caso, estou com um formulário de cadastro que recebe dados do login da rede social e se não vier alguma informação importante (como e-mail) ele renderiza o form para o complemento dessas informações.

O problema é que ao digitar o e-mail (que tem validação de formato) ele já passa por todas as fases do Bean e com isso, a informação de que o e-mail estava vazio se perde e o sistema passa a achar que o e-mail digitado veio da rede social e isso gera inconsistência.

Como fazer para evitar que a classe seja instanciada o tempo todo? Se não for possível, como fazer para que algumas variáveis só sejam alteradas uma única vez?

1 resposta

Fala João, tudo bem?

Toda vez que um request é feito ele passa pelo ciclo de vida do JSF, independente do escopo utilizado.

O que vc pode fazer é utilizar um bean auxiliar que pega as informações da rede social e guarda elas. O bean do seu formulário deve pegar as informações do bean auxiliar, assim você não terá mais esse problema de inconsistência.