JSF2 – Clico de Vida do JSF

JSF2 – Clico de Vida do JSF

 

 

 

 

 

 

 

 

 

 

 

Fase 1. Restaurar visão (Restore View).
Fase 2. Aplicar valores da requisição (Apply Request Values).
Fase 3. Processar Validações (Process Validations).
Fase 4. Atualizar os valores do modelo (Update Model Values).
Fase 5. Invocar a aplicação (Invoke Application).
Fase 6. Renderizar a resposta (Render Response).

Primeira Requisição

A primeira requisição, é quando entramos na página pela primeira vez.

A particularidade no ciclo de vida nesse caso é que vamos da 1ª fase (restaurar visão) direto para a 6ª fase (renderizar a resposta).

Na 1ª fase vai ser criado a hierarquia de componentes da página JSF, esses componentes são representados por objetos de classes do JSF que devem ser instanciados nesse momento. Ex.Um form que dentro tem um panel que dentro tem um input, um label e um botão, e assim organizando e formando a arvore de componentes.

Após criada a árvore de componentes, ele salta diretamente para a 6ª fase, que é responsável por gerar a saída para todos os componentes em seus estados atuais, onde cada componente vai gerando sua própria saída (suas tags HTML), e depois renderiza a resposta (HTML) no browser.

Postback

Não é mais a primeira requisição da página, você está submetendo a página a uma nova requisição (ex. preenchendo um formulário e submetendo através de um botão), e agora sim vai passar pelo ciclo de vida completo.

Na fase 01: Como a arvore de componentes já existe em memoria, aqui vai somente recuperar/restaurar a arvore.

Na fase 02: Passa a responsabilidade para cada componente que vai recuperar seus valores respectivos, ainda como texto/String, sem converter para objeto nesse momento.

Na fase 03: Aqui acontece a conversão e validação dos valores que foram anexados a cada componente.
Conversão: é a transformação da informação como texto para um tipo especifico de objeto java, primitivo ou um objeto Java qualquer.
Validação: Verifica se o valor que existe é de acordo com o que esperavamos, por exemplo CPF.
Caso aconteça algum erro nessa fase, na conversão ou na validação, ele armazena as mensagens de erro no contexto do JSF e pula direto para a ultima fase.
Deu tudo certo, vai para a próxima fase.

Na fase 04: pega o valor que já foi validado e convertido, e atribui ao modelo, que seriam os java beans, managed bens, ou seja as classes de modelo.
Ex. ClienteMB.cliente.nome

Na fase 05: é onde acontece a execução dos eventos e ações (actions e actionsListener por exemplo).

Na fase 06: Chama a hierarquia de componentes, com seus valores atualizados, e gera o html atualizado e envia para o browser.

Comportamento com Immediate = true

Alguns componentes do tipo input e botão tem a propriedade immediate, caso esteja true vai afetar e mudar um pouco o comportamento do ciclo de vida, vejamos:

No UIInput:

Quando é um componente do tipo UIInput ao invés da validação e/ou conversão desse componente ser feito na fase 3 (Processar Validação), essa validação/conversão vai ser antecipada para a fase 2 (Aplicar valores do Request), apenas desse componente ou dos componentes que estiverem com o immediate = true.

Caso aconteça algum erro na validação desse(s) componente(s) com o immediate=true, ele nem processa os componentes immediate=true posteriores a ele (ainda na fase 2), e nem os componentes que estão com o immediate=false (que seriam validados na fase 3 normalmente), após o erro ele já pula para a fase 6 (Renderizar resposta) e mostra a mensagem de erro. As mensagens de erro são armazenadas no FacesContext.

No UICommand:

Nos botões (CommandButton ou “CommandLink”) ele vai até a fase 2 e pula direto para a fase 6 (ignorando as validações). É útil para um botão limpar ou voltar.

 

 

 

 

Sobre Haylson Martins

Me chamo Haylson Martins, formado em Sistemas de Informação, trabalho com T.I de forma geral desde 2002 com suporte depois na área de negócio e treinamentos, e com Desenvolvimento para Sistemas Web desde 2010 com linguagem principal o Java. Amo tecnologia, amo aprender coisas novas, gosto de ensinar embora não seja essa a minha pretensão. Por meio desse blog pretendo reforçar o que ando aprendendo e estudando de outras linguagens e tecnologias, e principalmente como uma espécie de bloco de notas para consultas posteriores e quem sabe também ajude outras pessoas que estudam e têm as mesmas dúvidas que já tive ou que ainda tenho. Vamos começar?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *