
Mas o último exemplo que eu quis fazer não funcionou, era um exemplo de como fazer Paginação via AJAX no grails utilizando Javascript não com o lowpro, parecido com o que eu comentei no post sobre lowpro para o rails.
Cheguei em casa e fui tentar descobrir por que a coisa não funcionou, e foi mais fácil do que eu esperava.
Não funcionou por que eu esqueci que os templates padrão do Grails não utilizam IDs nas DIVs, por tanto o AjaxUpdater criado não funcionava …
Para fazer o exemplo funcionar é só fazer o seguinte:
copiar o lowpro.js para a pasta web-app/js
editar o template padrão (grails-app/views/layouts/main.gsp) e fazer ele ficar parecido com o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <html>
<head>
<title><g:layoutTitle default="Grails" /></title>
<link rel="stylesheet" href="${createLinkTo(dir:'css',file:'main.css')}" />
<link rel="shortcut icon" href="${createLinkTo(dir:'images',file:'favicon.ico')}" type="image/x-icon" />
<g:layoutHead />
<g:javascript library="prototype/prototype" />
<g:javascript library="lowpro" />
<g:javascript library="application" />
</head>
<body>
<div id="spinner" class="spinner" style="display:none;">
<img src="${createLinkTo(dir:'images',file:'spinner.gif')}" alt="Spinner" />
</div>
<div class="logo"><img src="${createLinkTo(dir:'images',file:'grails_logo.jpg')}" alt="Grails" /></div>
<div id="content">
<g:layoutBody />
<div>
</body>
</html> |
Basicamente as alterações são:
Nas linhas 7 e 8 onde adicionei as bibliotecas lowpro e prototype
e mais importante, nas linhas 16 e 18 onde coloquei uma DIV com ID “content” em volta do conteúdo da página (isto vocês podem ajustar para envolver apenas o conteúdo que vocês quiserem).
Depois editando o application.js (web-app/js/application.js)
1 2 3 4 | Event.addBehavior.reassignAfterAjax = true; Event.addBehavior({ 'a.step':Remote.Link({update:'content'}) }) |
Apenas adicionei estas linhas no final do arquivo, a primeira configura o lowpro para reaplicar os comportamentos no final das chamadas AJAX, e as outras adicionam o comportamento de link AJAX em todas as tags “A” com a classe “step” que é o que o grails utiliza na paginaçao.
Agora a parte chata, no rails ele ja entende isto automaticamente, mas no grails eu tive que fazer na unha mesmo (nem é tanto trabalho assim
)
Vamos editar o metodo “list” do controller de clientes (ou qualquer controller do grails que vocês quiserem
)
1 2 3 4 5 6 | if(!params.max) params.max = 10 if(request.getHeader("X-Requested-With")=="XMLHttpRequest"){ render template:'listcontent', model:[clienteList: Cliente.list( params )] }else{ return [ clienteList: Cliente.list( params ) ] } |
A diferença básica é que se o cabeçalho X-Requested-With disser que é uma requisição AJAX eu vou retornar apenas a parte da página que me interessa (OK, isto eu teria que fazer no rails também, mas o rails iria me retornar toda a página se eu não fizesse isto, o grails não retorna nada ) ![]()
e para isto funcionar precisamos editar a view também …
eu copiei todo o conteúdo da tag body da view “list.gsp” para o arquivo “_listcontent.gsp” (precisei criar o arquivo), e na list.gsp eu coloquei no body apenas a linha: ${render(template:’listcontent’)}
Ou seja, substitui todo o conteúdo do body por esta linha, assim posso renderizar tudo em um request padrão, e apenas o conteúdo da página em um request AJAX.
Pronto, agora a paginação do Grails esta funcionando via AJAX
esta semana eu atualizo este post com o link para o zip do exemplo completo, mas apenas com isto vocês ja devem conseguir fazer a paginação via AJAX
PS.: não esqueçam para utilizar todos os recursos do Grails é interessante saber bem groovy (a linguagem utilizada), spring
, GORM (hibernate
) e sitemesh que são os frameworks utilizados por traz dos panos.
Tags: ajax, grails, groovy, javascript, lowpro, unobstrusive
Trabalhando com Flex com um backend em Java, cheguei a conclusão que a melhor alternativa para o projeto seria simplesmente fazer posts de dados do flex para o java e receber XML de volta (o Flex trabalha muito bem com XML).
Mas tem um problema nisto, passar um ou dois valores desta forma é bastante fácil, mas quando eu precisava passar objetos complexos era muito chato passar milhares de parâmetros para uma URL, então tive a idéia de mandar também XML de volta para o Java …
desta forma, o único problema que continuou foi eu precisar escrever manualmente o XML para cada post, sendo que na maioria das vezes eu ja tinha um objeto Flex …
Solucionei isto com uma pequena função utilitária que transforma qualquer objeto em XML, tentei procurar alguma coisa na API padrão, mas não encontrei nada, então escrevi isto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package teste { import mx.utils.ObjectUtil; public class Utils { public static function objectToXml(obj : Object, name : String) : XML{ var result : XML; var info:Object = ObjectUtil.getClassInfo(obj); if(name==null) name = info.name; result = new XML("<" + name + "></"+ name + ">"); for each (var qn : QName in info.properties){ var val : Object = obj[qn.toString()]; if(ObjectUtil.isSimple(val)) result[qn.toString()] = val; else result.appendChild(objectToXml(val,qn.toString())); } return result; } } } |
Para usar também é bem fácil:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="appInit()"> <mx:Script> <![CDATA[ import teste.Utils; import mx.utils.ObjectUtil; import mx.controls.Alert; public function appInit() : void { var obj : Object = {name:'teste',address:{street:'rua',number:20}}; Alert.show(Utils.objectToXml(obj,'teste').toXMLString()); } ]]> </mx:Script> </mx:Application> |
e o XML gerado no exemplo é este:
1 2 3 4 5 6 7 | <teste> <address> <number>20</number> <street>rua</street> </address> <name>teste</name> </teste> |
Bom, não sei se esta é a melhor forma de se trabalhar, mas até que gostei da solução
Tags: actionscript, dica, flex, howto
A página inicial do blog esta bem mais rápida agora
Foi só tirar aquele javascript murrinha dos feedflares do feedburner que tudo ficou mais rápido …
Tags: Uncategorized
Bom, mais algumas alterações …
Removi a página curriculum, pelo menos por enquanto, ja que não era atualizada a muito tempo mesmo
De que adianta um curriculo desatualizado
E alterei a página Sobre/Contato, agora no final da página tem um formulário de contato para me enviar e-mails …
O php estava com alguma configuração errada também, que não conseguia enviar e-mails, ele estava apontando para o binário errado do sendmail, agora o subscribe to comments vai voltar a funcionar
Ahh, e por último, removi os blocos de propagandas do UOL, eles não davam retorno nenhum mesmo, não vou substituir eles por adsense, só removi mesmo, ja tem propaganda o suficiente no blog, a idéia não é ganhar dinheiro, é só não pagar para escrever, e como o blog para a própria hospedagem, pra mim ja esta mais do que perfeito
E só pra não perder o costume, uma pergunta:
Fica melhor uma página “sobre” e uma de “contato”, ou uma só para as duas coisas ja resolve?
PS.: sim, eu sei que ficou extranho o formulário en ingles, em algum momento eu traduzo o plugin
Tags: Uncategorized
Bom, eu não sou um usuário do GNOME, pessoalmente prefiro o KDE, mas vale a noticia
O projeto GNOME, completa exatamente hoje, 10 anos, desde o e-mail inicial do Miguel De Icaza como segue abaixo:
“We want to develop a free and complete set of user friendly applications and desktop tools, similar to CDE and KDE but based entirely on free software.”
Ou em Português:
“Nós queremos desenvolver um conjunto amigável ao usuário, completo e gratuito aplicações e ferramentas desktop, similares ao CDE e ao KDE, mas baseados totalmente em software gratuito.”
Estas foram as linhas iniciais do e-mail enviado por Miguel de Icaza anunciando o GNU Network Object Model Environment, mais conhecido como GNOME há exatamente 10 anos, 15 e agosto de 1997.
Mesmo eu não sendo um usuário do GNOME, tenho que reconhecer que eles tem feito um ótimo trabalho.
Principalmente em algumas ferramentas como o Evolution, que na minha opinião é um dos melhores PIM para linux que existe, que tem apenas o Kontact como concorrente, e ambos são melhores do que o Outlook, e um dos motivos de eu ter migrado para o Kubuntu
Tags: Uncategorized
Bom, depois de assistir a sessão dupla do Harry Potter na TNT, fui dar uma olhadinha nos meus e-mails e vi que esta aberto o pré order para o sétimo livro da série Harry Potter, e parece que este vai ser o ultimo.
Quem quiser ja reservar o seu, é só seguir este link para a versão standard, ou este para a versão deluxe, ainda não faço ideia de qual a diferença entre eles, mas os livros da série são melhores do que os filmes
Pena que ainda vão demorar um pouco para chegarem os livros de verdade
PS.: acho que este ano sai mais um filme da série
Tags: Uncategorized
Bom, depois do feriadão, que tinha tudo para ser show de bola, mas acabou tendo uns probleminhas …
Algumas novidades
Estou saindo da AdvancedIT, na verdade, a partir desta segunda feira, ja não trabalho mais na AdvancedIT …
Estou começando hoje em um novo emprego na HP, ainda não tenho certeza sobre o que é o projeto em que vou trabalhar, mas pelo contrato assinado não vou poder comentar por aqui mesmo
A TechOffice continua firme, e teremos outro curso de spring no inicio de março, então se houver algum interessado podem acessar o site e entrar em contato.
Acho que este trabalho novo vai ser bem divertido, e vou ter um horario fixo, o que tem algumas vantagens, como sobrar mais tempo para ficar em casa, sair com amigos, e possivelmente até para escrever por aqui
Então aguardem posts mais seguidos
E me desejem sorte na nova empreitada
Tags: Uncategorized
Mudei o tema do blog …
o que acham deste novo?
ainda faltam algumas costumizações, mas acho que ficou legalzinho
Tags: Uncategorized
Tudo bem, não costumo postar nada sobre Swing por aqui, mas estes links valem a pena …
um Carrosel bem legal, e um outro que imita a interface da Apple TV …
deem uma olhadinha nestes links …
Carrosel
OSX Doc para Java
Interface da Apple TV para Swing
e só para completar, nunca esquecendo os componentes do Swinglabs
Tags: Java, swing, Uncategorized
Feliz natal para todos!
Um ótimo final de ano, muita sorte, muito dinheiro, muita festa e muita felicidade neste próximo ano que esta chegando!
E agora vamos deixar um pouquinho de ser NERD e vamos sair da frente do computador! ja é quase Natal
PS.: se quiserem me dar um presente é só de vez em quando, se algum dos anuncios interessar, seguir os links para dar uma olhada, ou então falar com o gerente da empresa para anunciar aqui usando aquele link para o Performancing ao lado
Tags: Uncategorized
Voces preferem ver o código fonte nos posts assim:
(more…)
Tags: Uncategorized
Cool, alguem se deu ao trabalho de postar um comentário totalmente nonsense sobre o meu ultimo tutorial de spring (no Conexão Java 2006), dizendo que eu não entendo nada de spring, …
que eu até poderia aceitar como uma critica construtiva, se o cara não tivesse se dado o trabalho de se auto denominar como: “Alguem que assistiu a palestra” e endereço de e-mail: alguem@a.com.
Ou seja, o cara foi covarde demais para se identificar, e burro demais para fazer isto da empresa onde trabalha (ele trabalha na SulAmerica Seguro Saude S/A).
Bom, o comentário não foi aprovado.
Aceito que digam que não gostaram da palestra, se alguem achar que eu não tenho dominio sobre o conteúdo que estava sendo ministrado, eu aceito que me diga também sem problema nenhum. Mas para falar qualquer coisa deste tipo a pessoa tem que no minimo ter a decencia de se identificar.
PS.: a unica coisa que eu concordo que estava escrito no comentário é que o Philip Calçado entende muito de spring
Tags: Uncategorized
Bom, apanhei um pouco pro wordpress, pra configuração do apache, mas consegui disponibilizar novamente o material das palestras que ja fiz.
Quem estiver interessado em dar uma olhadinha no material é só clicar aqui, ou no link de publicações do cabeçalho do blog.
Se ainda estiver faltando alguma coisa, peço desculpas pela falha, e peço que me avisem para que eu corrija o link.
Tags: Uncategorized
Bom, configurei o Del.Icio.Us para postar os links do dia no blog, isto deve começar a acontecer a partir de amanha, então os links de hoje são:
Empathy Box :: 5 Principles For Programming
Sztywny Blog – Stiff asks, great programmers answer
Enterprise Java Community: Testing Concurrent Programs
Java continuations e NIO, o casamento perfeito
A grande maioria dos links sera sobre java
mas boa parte deles em ingles
Tags: links, Uncategorized