Joe Walker anunciou que saiu a RC1 do DWR3 com pequeno atraso com novidades interessantes como suporte a Varargs, Method Overloading, entre outras coisas. Mas destaco algo que deveria ter há tempos e sentÃamos falta para construções repetitivas como CRUD (principalmente) que é o que chamou de “Lightweight typed parameters“.
Até a versão 2 temos que construir métodos no Creator com implementação nos argumentos devido ao DWR não ter como fazer o binding entre o Javascript e o Java sem saber quem é o objeto. Algo assim:
public class AjaxFacade { public User teste(User param) { param.setDescription("Teste funcionou"); return param; } }
No javascript:
AjaxFacade.teste( { id:42 //JSON que representa o objeto User }, { callback:function(retorno) { alert(retorno.toSource()); }, errorHandler:function(error, message) { alert(message); }, timeout:5000 });
Agora foi adicionado a propriedade $dwrClassName no Converter onde você pode trabalhar com a interface ao invés da implementação. Vejamos com o Object como argumento no mesmo método:
public class AjaxFacade { public Object teste(Object param) { //puramente ilustrativo não peça fundamentação lógica :) if(param instanceof User) { ((User) param).setDescription("Teste funcionou"); } return param; } }
No javascript:
AjaxFacade.teste( { id:42 //JSON que representa o objeto User, $dwrClassName:"User" }, { callback:function(retorno) { alert(retorno.toSource()); }, errorHandler:function(error, message) { alert(message); }, timeout:5000 });
Agora aquelas centenas de classes que fazem a mesma coisa [CRUDzão velho de guerra] podem ser resumidas em uma única Facade que faz suas validações e aciona um Repository ou sua estrutura de persistência.
public class AjaxFacade { @Autowired Repository repository; public Object persistir(Object param) { if(param == null) ... repository.persist(param); return param; } }
Agora não tem como não termos um Feliz Natal!
Posted in Ajax, DWR, Frameworks, Java, JavaScript, JSON, Web Development ~ 5 Comments

