Combinando os recursos de reflexão do Java com a criação de componentes JSF, podemos economizar mais de 60% do código, além de aumentar automaticamente as capacidades de vinculação de valores de cada propriedade, sem perda de performance.
Esta é uma boa notícia não?
Esta idéia é baseada na forma de desenvolvimento de componentes JSF que apresentei aqui neste blog em Outubro do ano passado. Segundo ela, o componente é composto por pelo menos 3 classes, uma que representa a tag exposta na tld da biblioteca onde está presente nosso componente, a outra representa o componente em sí e por fim uma classe de renderização, responsável por exibí-lo.
Como já demonstrei em outro artigo (de Dezembro do ano passado) algumas capacidades da API de reflexão do Java e como utilizá-las, além da criação de componentes, desta vez não haverá aqui uma linha de código sequer. Espero que aqueles que gostem da idéia ou que queiram ver se realmente pode ser poupado tanto código (e trabalho) quanto eu afirmo aqui, implementem a idéia.
Trata-se de utilizar os recursos de reflexão para ler os valores dos atributos presentes na instância da classe que estende UIComponentTagBase e realizar as ações que estariam presentes no método protected void setProperties(UIComponent component), que são formadas por um código repetitivo, mas de repetição necessária a não ser que se faça uso desta “metodologia”, pois são códigos aonde as variáveis mudam, mas as condições não.
O mesmo pode ser feito na classe que estende UIComponentBase, nos métodos aonde valores de vinculação são possíveis.
Já a classe que estende Renderer, não tem motivos para a aplicação este tipo de recurso. O que pode ser feito é criar uma classe que realiza um papel de “escritor de documentos” que oferece funções para criar elementos assim como o ResponseWriter fornece, só que possibilite o uso de menos código para criar os mesmos componentes.
Já implementei esta idéia na empresa aonde trabalho e o resultado foi muito bom. Fica aí a dica caso alguém resolva aproveitar.