Criando um Converter para um tipo específico em Grails

Neste artigo mostro como criar um converter para um tipo de dado específico através do mecanismo binding do spring que converte os parâmetros html para objeto e vice-versa.

1. Introdução

Já aconteceu alguma vez de você precisar converter automaticamente um tipo de dado específico da camada de visualização para uma determinada propriedade na camada de modelo e pra isso você sempre precisar converter essa informação do objeto para a página e vice-versa?

Então, você não precisa se preocupar com isso se a sua aplicação possuir um editor de propriedade (PropertyEditor) específico para esse tipo de dado.

É isso que pretendo compartilhar com vocês nesse artigo, espero que esse tipo de problema não aconteça mais com você desde então.

2. Como o Grails realiza o “binding”de dados.

Quando sua aplicação submete um formulário, o controlador da ação executa o método dataBind para converter os valores dos parâmetros para as propriedades específicas do modelo. Nesse momento o Grails instancia a classe GrailsDataBind para fazer essa mágica, e ela por sua vez, instancia algumas classes PropertyEditor responsável pela conversão dos tipos de dados padrão do groovy como Integer, Double, etc. O que precisamos fazer é simplesmente implementar um PropertyEditor específico para o nosso tipo de dado e em seguida, registrá-lo no GrailsDataBind para que o Grails reconheça-o quando o método dataBind for invocado no controlador.

3. Construindo um PropertyEditor para Data.

Nosso exemplo será de um Converter para o tipo Data. Veja a seguir um diagrama de classe de como deverá ser implementado nosso conversor.


Primeiramente vamos criar a classe DatePropertyEditor responsável pela conversão de objeto para string através do método getAsText() e da conversão de string para object através do método setAsText(String text).

public class DatePropertyEditor extends PropertyEditorSupport { private SimpleDateFormat df; public CustomDateBinder() { df = new SimpleDateFormat("dd/MM/yyyy"); } public void setAsText(String text) throws IllegalArgumentException { if (text != null && !text.equals("")) { try { super.setValue(df.parse(text)); } catch (ParseException ex) { throw new IllegalArgumentException("Data inválida"); } } else { super.setValue(null); } } public String getAsText() { if (super.getValue() != null) { return df.format(super.getValue()); } else { return null; } } }

Agora precisamos implementar a interface PropertyEditorRegistrar, que será responsável pelo registro do nosso conversor DatePropertyEditor. Veja a seguir a codificação.

package binders; public class MyPropertyEditorRegistrar implements PropertyEditorRegistrar { public MyPropertyEditorRegistrar() { } public void registerCustomEditors(PropertyEditorRegistry reg) { reg.registerCustomEditor(Date.class, new DatePropertyEditor()); } }

E finalmente, configuramos nossa classe MyPropertyEditorRegistrar no arquivo resources.groovy que fica localizado no diretório “grails-app/config/spring”.

beans = { myPropertyEditorRegistrar(binders.MyPropertyEditorRegistrar) }

4. Conclusão.

Os converters são itens importantíssimos em uma aplicação web, e já que Grails veio para simplificar a vida do desenvolvedor, porque não utilizá-los em nossos projetos, uma vez que depois de implementados não precisamos mais converter as informações transferidas entre a camada de visualização e a camada de modelo ou vice-versa, tudo isso fica transparente para o desenvolvedor que ganhará minutos preciosos para se dedicar a regra de negócio.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados