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!

Conversores e validadores acessando beans do Spring

Não é incomum ter conversores ou validadores do JSF que precisem acessar o banco de dados ou mesmo outros recursos do sistema, como um webservice, por exemplo. A verdade que esta prática é muito utilizada quando implementamos nossos entity converters. Quando trabalhamos com Spring ou CDI nós temos todo o poder de um container de IoC/DI, o que nos possibilita injetar beans gerenciados em nossas classes ou mesmo managed beans. Contudo a especificação do JSF 2.x ainda não tem um suporte decente de DI para conversores, validadores e alguns outros componentes internos do framework.

Para contornar essa limitação, podemos gerenciar os conversores do JSF com o container do Spring ou CDI. Dessa forma ganhamos a possibilidade de injetar qualquer bean dentro dos conversores e aplicar qualquer recurso extra do container, segurança, caching, controle transacional etc. Para saber mais detalhes sobre como injetar beans em seus validadores ou conversores, não deixe de ler o último post de 2014 no blog dos desenvolvedores da TriadWorks.

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!