Blog do Urubatan
msgbartop
Desenvolvedor, Palestrante, Escritor, Nerd Assumido e Pai do Marcus :D
msgbarbottom

23 Feb 08 Paginação AJAX com Grails e lowpro :D


Bom, apresentei hoje um tutorial sobre Grails[bb] (os slides são os mesmos utilizados para a apresentação na FACENSA no ano passado sobre Grails também), o Exemplo de código pronto eu vou colocar aqui durante a semana pois vou mudar o servidor do blog e ja copiei todos os arquivos para o server novo :D

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[bb]
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 :D )
Vamos editar o metodo “list” do controller de clientes (ou qualquer controller do grails que vocês quiserem :D )

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 ) :D
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 :D

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 :D

PS.: não esqueçam para utilizar todos os recursos do Grails é interessante saber bem groovy[bb] (a linguagem utilizada), spring[bb], GORM (hibernate[bb]) e sitemesh que são os frameworks utilizados por traz dos panos.

Tags: , , , , ,

06 Nov 07 Flex2/ActionScript 3 – Transformando objetos em XML

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 :D

Tags: , , ,

17 Aug 07 Descobri o que fazia o blog ficar lento

A página inicial do blog esta bem mais rápida agora :D

Foi só tirar aquele javascript murrinha dos feedflares do feedburner que tudo ficou mais rápido …

Tags:

16 Aug 07 Mais alterações no blog :D

Bom, mais algumas alterações …

Removi a página curriculum, pelo menos por enquanto, ja que não era atualizada a muito tempo mesmo :D

De que adianta um curriculo desatualizado :D

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 :D

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 :D

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 :D

Tags:

15 Aug 07 10 anos de GNOME

Bom, eu não sou um usuário do GNOME, pessoalmente prefiro o KDE, mas vale a noticia :D

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 :D

Tags:

04 Feb 07 Harry Potter and the Deathly Hallows.

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 :D

Pena que ainda vão demorar um pouco para chegarem os livros de verdade :D

PS.: acho que este ano sai mais um filme da série :D

Tags:

04 Feb 07 Muitas novidades.

Bom, depois do feriadão, que tinha tudo para ser show de bola, mas acabou tendo uns probleminhas …

Algumas novidades :D

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 :D

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 :D

Então aguardem posts mais seguidos :D

E me desejem sorte na nova empreitada :D

Tags:

31 Jan 07 Novo tema.

Mudei o tema do blog …

o que acham deste novo?

ainda faltam algumas costumizações, mas acho que ficou legalzinho :D

Tags:

18 Jan 07 Componentes legais para Swing.

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 :D
Interface da Apple TV para Swing

e só para completar, nunca esquecendo os componentes do Swinglabs

Tags: , ,

22 Dec 06 Feliz natal para todos vocês!

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 :D

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 :D

Tags:

14 Dec 06 perguntinha rapida sobre formatação …

Voces preferem ver o código fonte nos posts assim:
(more…)

Tags:

24 Nov 06 links for 2006-11-25

Tags:

22 Nov 06 Comentários anonimos no blog (desocupados que são covardes demais para se identificar)

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 :D

Tags:

13 Oct 06 Finalizada a migração para o wordpress! material das palestras online novamente!

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:

13 Oct 06 Links do Dia!

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 :D

mas boa parte deles em ingles :D

Tags: ,