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.