DWR | Handerson Frota - WEB2.0 - Part 2

ReverseAjax DWR – IV Natal Java Day 2008

Bem todos sabem que palestrei no IV Natal Java Day em Natal/RN(veja a cobertura aqui).

Tive pouco tempo, todas as palestras foram de no máximo 40min, mas acho que deu para passar a idéia do que é o ReverseAjax no DWR e espero ter conseguido.

Adicionei a palestra no SlideShare, mas ele meio que “estragou” um pouco o layout, mas acho que dá para entender.



Com a ajuda do René Araujo foi possível também filmar, então para quem perdeu segue abaixo os vídeos.

[youtube u9mF2VDvFIA]

[youtube WkWep-wh_AU]

[youtube s335_YNSba0]

[youtube 4Av5cV7DJPc]

Queria mais uma vez agradecer aos organizadores do evento e parabenizar pelo excelente evento e de alto nível que foi esse ano, e em 2009 estaremos novamente marcando presença no evento.

IV Natal Java Day

No dia 22 de Novembro de 2008 acontecerá o IV Natal Java Day em  Natal-RN. Este evento é promovido pelo Grupo de Usuário JavaRN que irá reuni estudantes e profissionais de TI que utilizam ou se interessam pela plataforma Java.

Fui ao evento ano passado e fiquei muito empolgado e impressionado com a tamanha organização. Fomos  muito bem recebidos e  muito bem tratados pelos organizadores, com isso motivou a tentativa de organizar uma caravana bem maior este ano.

No III Natal Java Day fui apenas para participar do evento e fazer a cobertura on-line e quase em tempo real do evento. O Milfont foi palestrar e outros integrantes foram participar e prestigiar esse maravilhoso evento.

Este ano, teremos 3 palestrantes  do CEJUG no evento e eu serei um deles.

Handerson Frota
Palestra:
DWR: Utilizando o COMET/ReverseAjax do DWR
Nesta palestra apresentaremos uma visão prática de como utilizar o ReverserAjax do DWR. Uma pequena introdução ao conceito de COMET e veremos como funciona a comunicação do DWR para efetuar chamadas utilizando ReverseAjax. Como configurar o DWR para cada tipo de conexão do Reverse Ajax aceito por ele. Serão mostrados exemplos como prova de conceito.

Rafael Ponte(www.rponte.com.br)
Palestra: Os 10 maus hábitos dos desenvolvedores JSF
Toda tecnologia tende a trazer consigo um novo paradigma de como desenvolver partes específicas de software, contudo, algumas novas práticas nem sempre são entendidas, e algumas vezes antigas práticas permanecem dentro do novo paradigma tornando-se assim maus hábitos, e com JSF não seria diferente.
Aqui será apresentado 10 discussões sobre os maus hábitos mais comuns entre os desenvolvedores JSF, hábitos encontrados não somente entre iniciantes, mas também entre alguns desenvolvedores mais experientes, e por sua vez será apresentado soluções para cada um deles.

Christiano Milfont(www.milfont.org/tech/)
Palestra: OpenSocial: Padronização das redes sociais
OpenSocial é uma especificação aberta proposta pelo Google e adotada pela maioria das redes sociais como MySpace, Hi5, Ning, Orkut, Salesforce.com e Linkedin, entre outros.
Composta de APIs comuns, permite que desenvolvedores possam escrever aplicações sociais que funcionam em qualquer um destes sites seguindo a filosofia do Java: “escreve uma vez, roda em todos os lugares”. Nesta palestra será demonstrado o que é o OpenSocial e em que se baseia uma rede social. Também veremos exemplos de aplicações em containers OpenSocial e como criar uma aplicação OpenSocial.

Se você tiver a oportunidade de ir para este evento, não perca essa chance. Eu realmente recomendo o evento, pois terá um alto nível de qualidade, sem falar que você ainda irá aumentar seu network conhecendo excelentes profissionais de outros estados.

Como todos os outros anos, para participar do evento, basta se inscrever no site do evento e levar 2 Kg de alimentos não perecíveis ao local no dia do evento, que serão doados para instituições de caridade do estado do RN.

A Triadworks e a IVIA estão fortemente nos apoiando nesse evento e já queríamos adiantar o nosso agradecimento por este apoio.

Fico feliz em saber que aqui existem empresas  com essa consciência, pois é motivo de orgulho tanto para a empresa quanto para os colaboradores, ter  3 palestrantes no evento de alto nível como esse, representando tanto a IVIA, Triadworks, CEJUG como o ceará.

Mais informações acesse: http://www.jeebrasil.com.br/nataljavaday/index.jsp
Inscreva-se: http://www.jeebrasil.com.br/inscricao/24
Veja a programação completa: http://www.jeebrasil.com.br/nataljavaday/programacao.jsp

Abraços e até o evento.

Criando uma lista na sessão com DWR – Final

Para finalizar a nossa série de artigos vamos ver nesta última parte como implementar no html a nossa funcionalidade.
No artigo anterior vimos os métodos que iremos utilizar no JavaScript agora vamos ver no html como vai ficar as chamadas, não tem muito o que explicar por isso vou direto ao ponto mostrando o código.

Formulário

Listagem 10: Formulário que irá conter os dados que serão inseridos no mapa que será enviado para sessão.

Tabela

KeyMap ID NAME

Listagem 11: Tabela onde serão carregados os dados da sessão.

Conclusão:
Para se trabalhar com listas ou qualquer objeto na sessão com o DWR é muito simples, o que quis mostrar aqui, não é, se é certo ou não o uso da sessão, não vou, e nem quero entrar nessa polêmica, pois alguns defendem que sim outros que não, eu defendo a solução para uma funcionalidade específica, para mim em alguns casos não vejo problema.

Espero que tenham gostado do artigo e qualquer dúvida mandem email.

Projeto de Exemplo:DWRSessionRequest.rar

Abraços

Criando uma lista na sessão com DWR – Parte 4

Dando continuidade nossa série de artigos vamos ver nesta penúltima parte como implementar no lado JavaScript a nossa funcionalidade. No artigo anterior vimos os métodos que iremos utilizar.


Alterando o session.js

Vamos ver logo abaixo as funções em JavaScript para cada método Java que criamos.

Função que adiciona o objeto na sessão:

function addValue()
{

	var bean = DWRUtil.getValues("formCreateMapSession");//01
	FacadeAjaxSession.addMapSession(bean,{

		callback:function(){

			DWRUtil.setValue("msgSession", "Value add !");//02
			listMap();//03

		},
		errorHandler:function(errorString, e){
			DWRUtil.setValue("msgSession", errorString);
		},

timeout:50000

}

);}

Listagem 06: Função que pega os valores do formulário e envia para a classe Java para ser adicionado em um Map que será adicionado na Sessão.

01:Com o getValues recuperamos todos os dados contidos no formulário e criamos um objeto JS,que será convertido em um BeanSession(ver listagem 01);

02:Após executar o método addMapSession(ver listagem 03), no seu retorno envia uma mensagem com o setValue de sucesso. 03:Executa a função que monta a lista(ver adiante)

Função que cria a grid(tabela):

function listMap(){

FacadeAjaxSession.listMapSession({

 callback:function(map){
DWRUtil.removeAllRows("mapList");

        var cellFuncs = [
			function(bean) { return bean.keyMap; },
 			function(bean) { return bean.id; },
 			function(bean) { return bean.name; }

		];

DWRUtil.addRows( "mapList", map, cellFuncs, {
	rowCreator:function(options) {
	 	row = document.createElement("tr");
	 	row.id = options.rowData.keyMap;
	 	row.style.cursor = "pointer";

		if(validateBrowser()){
	 		row.attachEvent("onmouseover", function(e){changeto(e, '#ff0000')});
	 		row.attachEvent("onmouseout", function(e){changeback(e, '')});
	 		row.attachEvent("onclick", function(e){removeValue(this.id)});
	 	}else{
	 		row.addEventListener("mouseover", function(e){changeto(e, '#ff0000')}, false);
	 		row.addEventListener("mouseout", function(e){changeback(e, '')}, false);
 			row.addEventListener("click",function(e){removeValue(this.id)},true);
 		}
	 	return row;
	 },
	cellCreator:function(options) {
		 	var td = document.createElement("td");
	 	return td;
	}

});

},

errorHandler:function(errorString, e){
    DWRUtil.setValue("msgSession", errorString);
},
timeout:50000
});

}

Listagem 07: Função que monta uma grid(tabela) com os dados que estão salvos na sessão.

Na listagem 07 vou explicar apenas o que está contido dentro do rowCreator pois o resto do código já foram explicados em vários outros artigos anteriores.

Então vamos focar no seguinte trecho:

rowCreator:function(options) {

	row = document.createElement("tr");
	row.id = options.rowData.keyMap;//01
...
	if(validateBrowser()){
		row.attachEvent("onclick", function(e){removeValue(this.id)});//02
	}else{
		row.addEventListener("click",function(e){removeValue(this.id)},true);//02
	}
	return row;

Listagem 08: Trecho retirado da listagem 07.

01: Através do parâmetro do rowCreator(rowCreator:function(parametro)) iremos pegar a propriedade do nosso BeanSession(ver listagem 01) keyMap, que contém um determinado valor que identifica o objeto dentro do Map(ver listagem 03), e que vai identificar a linha que esse objeto será exibido. Adiciono esse valor ao id da minha linha gerando mais ou menos o código abaixo:
Ex: < tr id=”keyMap” />

02: Montamos agora um evento adicionando o removeValue(será mostrado mais a frente) e com ele adicionando o id de cada linha que criamos. Isso é feito para o IE como para a família MOZILLA.

Função que exclui o objeto da sessão:

function removeValue(key){

 var bean = { keyMap:key };

FacadeAjaxSession.removeValueMap(bean,{

 callback:function(){
 	DWRUtil.setValue("msgSession", "Remove success !");
 	listMap();
  },
	errorHandler:function(errorString, e){
		DWRUtil.setValue("msgSession", errorString);
	},
	timeout:50000
 });
}

Listagem 09: Função que exclui o objeto da sessão.

Bem como vocês podem observar não tem muito o que explicar aqui, ele recebe a chave(keyMap) e adiciona em um objetoJS que será convertido para o BeanSession(ver listagem 01).
Ele vai verificar essa chave e excluir do Map(ver listagem 05).

Lembrando que os dados que serão inseridos da sessão podem ser: HashMaps(no caso do nosso exemplo), Array, ArrayList, List, Collection etc. Os dados contidos nessas listas podem ser qualquer objetos e claro se forem objetos criados por você(objetos fora da Api padrão: String, Integer etc) é só mapear no dwr.xml que o DWR vai enxergar seu objeto.

No próximo artigo iremos ver o código HTML deste exemplo.

Arquivos para baixar: session.js, FacadeAjaxSession.java

Abraços