Atualizando programaticamente componentes JSF em requisições AJAX

É muito comum utilizarmos o componente p:outputPanel do Primefaces com o atributo autoUpdate=true quando queremos atualizar componentes automaticamente sempre que uma requisição AJAX é disparada por algum componente. Isso é mais comum ainda quando temos um template Facelets na qual as mensagens de sucesso e erro estão no topo da página.


    

O interessante é que podemos simular este mesmo comportamento de forma programática e sem a necessidade de um conjunto de componentes. Basta a nova API do JSF 2 responsável pela atualização parcial de páginas e requisições AJAX: PartialViewContext. Podemos ver como API funciona no código abaixo:

FacesContext.getCurrentInstance().getPartialViewContext()
            .getRenderIds().add(":mensagens");

Na verdade, a API do JSF 2 só nos permite atualizar o componente h:messages programaticamente. Para que o componente seja sempre atualizado a cada evento AJAX, nós podemos usar um PhaseListener, como discutido no novo post do blog da TriadWorks: Renderizando automaticamente componentes JSF em requisições AJAX.

Além da API PartialViewContext, a solução usa basicamente conceitos de PhaseListener e do ciclo de vida! Estes conceitos são estudados e praticados no curso de JSF 2 com Spring da TriadWorks.

Vale a pena a leitura!

3 thoughts on “Atualizando programaticamente componentes JSF em requisições AJAX

  1. Olá Rafael;

    Tenho uma aplicação JSF usando Primefaces 6.2 e gostaria de usar a renderização por estado.
    Como faço para usar com primefaces?
    Tenho tentado sem sucesso, atualizar um conteudo no LayoutUnit, apos clicar em um DefaulMenuItem.

    Cara, me da uma força!

    Atts;

    André

    • Oi André,

      A lógica é a mesma independentemente da biblioteca de componentes que você usa. Na verdade, com JSF 2.x, você nem precisa de uma biblioteca, embora seja incomum não adotar alguma.

      Acho que não cheguei a trabalhar com LayoutUnit nem DefaulMenuItem, dessa forma recomendo você pedir ajuda no grupo de discussão de JSF: https://groups.google.com/forum/#!forum/javasf

      Com certeza muitos membros conhecem este componente e poderão te ajudar!

      Um abraço,

Leave a Reply to Vanessa Cancel reply

Your email address will not be published. Required fields are marked *