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.

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.