FacesUtils: sua classe de utilidades

Um boa prática quando trabalhamos com JSF é tentar manter nossos managed beans o mais simples possível, de tal forma que ele expresse apenas os dados e eventos das nossas páginas. Uma das maneiras de obter isso é isolando a API do próprio JSF através de uma classe de utilidades, também conhecida como FacesUtils.

No blog dos desenvolvedores e instrutores da TriadWorks nós abordamos o assunto e levantamos bons motivos do porquê você precisa ter uma classe desse tipo no seu projeto! Na FacesUtils normalmente encontramos métodos para lidar com a árvore de componentes, busca e renderização de componentes, navegação entre páginas e muito mais.

Vale muito a pena a leitura!

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!