Limpando a árvore de componentes no JSF 2.2

Um dos posts no meu blog que mais ajudou desenvolvedores foi o post sobre Limpando a árvore de componentes, pois nele discutimos como os componentes são trabalhados durante o ciclo de vida, o que evita vários problemas no dia a dia.

As técnicas para limpar a árvore que ensinei funcionam até hoje, no entanto, para nossa sorte, o expert group resolveu adicionar a funcionalidade na API e componentes no JSF 2.2. A partir de agora, a limpeza da árvore ficou mais simples e até mais performática na última versão do faces! Então o melhor a se fazer é tirar proveito desse novo recursos em nossas aplicações!

Para conhecer as mudanças na tag f:ajax e os novos métodos na API do JSF, você pode ler o post no blog dos instrutores da TriadWorks, limpando formulários e componentes no JSF 2.2, onde apresentamos todos os detalhes que você precisa saber para usar este novo recursos!

Upload via AJAX com o componente h:inputFile do JSF 2.2

Demorou quase 10 anos para que implementassem um componente de upload no JSF. O componente h:inputFile só foi criado na versão 2.2 da especificação. Apesar da longa espera, o componente já trouxe suporte nativo a AJAX e integração com a API do Servlet 3.

Utilizá-lo é tão simples quanto qualquer outro componente de entrada de dados, tanto é que podemos registrar conversores e validadores no componente de maneira semelhante. Além disso, basta usarmos a tag f:ajax para submetermos o formulário via AJAX, ou seja, nada de JavaScript! Por exemplo, o código abaixo irá disparar uma requisição AJAX após selecionarmos o arquivo:


    

Vale a pena conhecer o componente h:inputFile e ficar por dentro das suas atuais limitações que serão resolvidas em versões futuras do JSF.

O componente de upload de arquivos e muitas outras novidades do JSF 2.2 são exploradas no nosso curso de JSF 2 com Spring.

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!