1
resposta

Como funciona a fase Render Response do JSF?

Olá pessoal,

Estou com uma dúvida sobre o ciclo de vida do JSF.

Quando ele executa a fase 6 (Render Response), de onde vem os dados para renderizar a página de resposta?

Fiz um teste onde criei um commandButton, associei ele a um método e coloquei a tag immediate=true. Ou seja, o botão faz o JSF executar a primeira e segunda fase e após isso pula direto para a última (sem modificar o modelo). Deixei o bean com a anotação @RequestScope. Além disso criei um input de texto qualquer. Quando clico no botão, o form envia os dados para o servidor, porém, mesmo não havendo atualização do modelo, o input continua a exibir o valor anteriormente digitado.

Enfim... minha dúvida é: O JSF usa o modelo ou a view para renderizar a página de resposta?

Já li alguns materiais (inclusiva na própria Oracle), porém não consegui entender este ponto. Vou colocar o código dos meus testes logo abaixo:

<h:body>
    <h1>Gravando dados</h1>
    <h:form id="form">
        <fieldset>
            <legend>Formulario</legend>
            <h:messages />
            <h:panelGrid columns="2" id="panelgrid">
                <h:outputLabel value="Nome" for="nome"/>
                <h:inputText  value="#{testeBean.nome}" id="nome" />
            </h:panelGrid>
            <h:commandButton  value="Grava" action="#{testeBean.grava}" immediate="true"/>
        </fieldset>
    </h:form>
</h:body>
@ManagedBean
@RequestScoped
public class TesteBean {
    private String nome = "";
    public TesteBean() {
        System.out.println("Instanciando TesteBean...");
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String grava() {
        System.out.println("Gravando..." + nome);
        return null;
    }
}
1 resposta

Fala Jader, tudo certo?

Basicamente, existe uma árvore de elementos controlados pelo JSF. Essess componentes se renderizarão conforme o contêiner JSP percorre as tags da página na árvore.

Depois do "Render response" vem a etapa de render, nesta fase, a view solicitada é renderizada como uma resposta ao browser. A renderização da view é um processo no qual a saída é gerada como HTML ou XHTML.

As etapas a seguir são realizadas durante o processo de renderização:

  • O aplicativo é executado após a compilação e uma nova árvore de componentes é construída para o aplicativo e colocada em um FacesContext.
  • A árvore de componentes é preenchida com o componente e a propriedade do bean gerenciado associado a ela, representada pela expressão EL.
  • Baseado na árvore de componentes, uma nova view é construída.
  • A view é renderizada para o cliente como uma nova response html
  • A árvore de componentes é destruída automaticamente.
  • Em solicitações subseqüentes, a árvore de componentes é reconstruída e o estado salvo é aplicado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software