Categoria DWR

Nova série de vídeo aulas - EXTJS

Estou lançando juntamente com a DevMedia uma nova série de vídeo aulas, só que agora sobre o EXT JS.

Serão vídeo aulas no estilo que sempre faço, passo a passo, começando do zero e aumentando o nível em cada nova vídeo aula.
Ainda não tenho o número de quantidade de vídeo aulas que serão lançadas, mas garanto que serão muitas, pois vou tentar abordar os principais componentes do EXT JS, com exemplos didáticos e detalhados.

Já foram lançadas duas:

1. EXT JS - Introdução ao Framework – Parte 1
2. EXT JS - Introdução ao Framework – Parte 2

Onde:

EXT JS - Introdução ao Framework
Mini Resumo: Nesta video aula iremos ver como adicionar, configurar e rodar o EXT JS em uma aplicação WEB JAVA. Foi criado uma aplicação simples no eclipse, WEB PROJECT. O EXT JS foi adicionado no projeto e gerado uma tela de exemplo com o MessageBox para demonstrar o framework e outros exemplos.

EXT JS - Introdução ao Framework – Parte 2
Mini Resumo: Nesta Video aula iremos ver como utilizar o EXTJS juntamente com o DWR. Utilizando o projeto da aula 1 de EXTJS iremos adicionar o Framework DWR na aplicação. Foi construido também alguns exemplos tais como: Utilizamos o componente Ext.MessageBox.prompt para enviar dados via DWR para o servidor. Utilizamos o componente Ext.FormPanel para enviar um certo dado do usuário para o JAVA com o DWR. Adicionando o componente Form no componente Window do EXT.

Para acessar todas as minhas vídeo aulas clique aqui(DevMedia) ou aqui(handersonfrota.com.br).

Bem espero cumprir a meta, que é tentar passar o máximo de conhecimento possível do EXTJS a vocês.

Bons estudos.

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

Criando uma lista na sessão com DWR - Parte 3

Na parte 3 do nosso artigo vamos ver que tipos de métodos iremos criar no nosso FacadeAjaxSession explicado no artigo anterior.

Agora veremos os trechos dos novos métodos:

Método para adicionar um objeto na sessão:

public void addMapSession(BeanSession beanSession){
Session session = new SessionFacade();//01
Map<String, BeanSession> sessionMap = null;//02

if(session.getAttribute("sessionMap") != null){ //03
sessionMap = (Map) session.getAttribute("sessionMap");//04
}else{
sessionMap = new HashMap<String, BeanSession>();//05
}
String keyMap = beanSession.getId() + "_" +  beanSession.getName();//06

beanSession.setKeyMap(keyMap); //07

sessionMap.put(keyMap, beanSession); //08

session.setAttribute("sessionMap", sessionMap); //09
}

Listagem 03: Método que adiciona em um atributo da sessão o objeto passado como parâmetro.

Na listagem 03 vimos o método addMapSession() que espera como parâmetro um BeanSession(ver listagem 01), veja baixo:

01:Criamos o objeto session a partir de nossa classe SessionFacade;
02:Criamos um Map(sessionMap);
03: Recuperamos da sessão o atributo utilizado, e verificamos se o mesmo já existe;
04:Caso o Atributo exista(linha 03) pegamos o valor desse atributo e adicionamos no Map(sessionMap);
05:Caso o atributo não exista inicializamos o sessionMap;
06:Criamos uma variável que servirá como identificador do objeto, que será utilizado no lado JavaScript para identificar o objeto que o usuário está clicando. OS: Como não estou utilizando dados de um banco, tive que fazer essa “adaptação” para simular o id. O que eu fiz foi nada mais que garantir que o objeto que estou inserindo neste momento não terá o mesmo id do próximo;
07:Adiciono esse keyMap(identifica o mapa, linha 06) no meu BeanSession;
08:Adiciono no sessionMap a chave do meu mapa(keyMap) e o meu objeto(BeanSession).

Método para listar um objeto na sessão:

public Map listMapSession() throws Throwable {
Session session = new SessionFacade();
Map<String, BeanSession> sessionMap = null;

if (session.getAttribute("sessionMap") != null) {
sessionMap = (Map) session.getAttribute("sessionMap");
} else {
sessionMap = new HashMap<String, BeanSession>();
}

return sessionMap;
}

Listagem 04: Método que retorna um Map da sessão.

Este método dispensa explicação mais detalhada, ele apenas retorna um Map que está salvo em um determinado atributo na sessão.

Método para excluir um objeto da sessão:

public void removeValueMap(BeanSession beanSession) throws Throwable {
Session session = new SessionFacade();
Map sessionMap = null;

if (session.getAttribute("sessionMap") != null) {
sessionMap = (Map) session.getAttribute("sessionMap");
} else {
sessionMap = new HashMap<String, BeanSession>();
}

if (sessionMap.containsKey(beanSession.getKeyMap())) {
sessionMap.remove(beanSession.getKeyMap());
}

session.setAttribute("sessionMap", sessionMap);
}

Listagem 05: Método que exclui o objeto passado como parâmetro da sessão.

Um método também bem simples. Recebe o objeto como parâmetro, recupera o valor da sessão, verifica se existe um objeto no Map através da chave (keyMap), caso exista ele remove o objeto do Map e adiciona novamente o Map na sessão.

São métodos simples e claro precisam de mais alguns requintes, mas, esse não é o objetivo do nosso artigo. Quero apenas exemplificar essa funcionalidade.

No próximo artigo(parte 4) iremos ver a implementação no lado JavaScript.

Abraços