Transformando para maiúsculo o value de input com PhaseListener

A regra que diz: “Todo input tipo texto deve ter seus caracteres maiúsculos.” é adicionada ao sistema. Porém, o sistema já está construído com mais de 50 páginas. E agora? Vou ter que abrir página por página e tratar input por input? NÃO.

Passei por isso recentemente, em um sistema que utiliza JSF, e “bolei” uma solução; longe de ser a melhor, mas atendeu perfeitamente.

Primeiro utilizei a propriedade CSS text-transform: uppercase. Porém, a “coisa”, obviamente, só funcionou do lado cliente. Isto é: enquanto o usuário digitava, tudo era mostrado maiúsculo. Porém, quando os valores eram atualizados no Bean, chegavam minúsculos.

Conhecendo um pouco do ciclo de vida JSF (você pode saber um pouco aqui ou aqui), vi que poderia resolver o problema utilizando a interface PhaseListener. Essa interface atua antes ou depois às chamadas das fases do ciclo. A Figura 1 mostra os métodos da interface. Os métodos afterPhase e beforePhase recebem uma referência para PhaseEvent e este, por sua vez, tem a referência para FacesContext. Pronto. Com esse “cara” tudo fica mais fácil no JSF.

Figura 1 – Interface PhaseListener

Abaixo tem o código completo do listener. Não vou comentá-lo, pois é código é bem simples. Talvez a única observação que valha a pena, é a recursividade para buscar todos os componentes da tela submetida.

Figura 2 – Implementação de PhaseListener

Para o listener funcionar é preciso “registrá-lo” no faces-config.xml. A Figura 3 mostra como fazer.

Figura 3 – Registro faces-config

Conclusão:

Poderia ter utilizado JavaScript combinado com um fragmento de página mais uma diretiva no web.xml, para resolver esse problema. Acho que daria certo, sinceramente, não testei. (se alguém assim fez favor comentar)

O legal da solução apresentada aqui é que o impacto sobre as funcionalidades da aplicação é muito pequeno. Pode adicionar ou remover a regra na aplicação sem problema algum sobre seu funcionamento. E a apresentação da interface PhaseListener: uma “ferramenta” muito poderosa para quem utiliza JSF.

P.S.: Outro exemplo da utilização do PhaseListener pode ser visto aqui.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: