Trabalhando com Session no DWR - Parte 2.3
Para finalizar esses artigos básicos sobre session vamos ver adiante como salvar, excluir e listar objetos na sessão, será um exemplo bem simples mas ao mesmo tempo muito útil para quem pretende fazer algo semelhante.
Iremos continuar utilizando o projeto anterior.
Preparando o ambiente e ferramentas
Segue abaixo o nosso ambiente:
IDE: MyEclipse 6.0
ContainerWeb: Tomcat 5.5.17
DWR: Versão 2.0.1
JAVA: JKD5.0 ou superior.
Informações Iniciais
Iremos criar uma funcionalidade bem simples, mas também bem útil. Teremos um formulário onde entraremos com alguns dados, salvaremos esses dados na sessão, podemos adicionar um ou mais dados formando assim uma lista desses dados. A funcionalidade também irá permitir listar e excluir esses dados da sessão. Não iremos salvar no banco, mas nada impede que você o faça.
Para você acompanhar melhor esse artigo você deve ler as seqüências de artigos localizados nos links que passarei mais a frente, isso será necessário caso você ainda não tenha visto ou não saiba o básico para trabalhar com sessão utilizando o DWR, com isso você terá um bom entendimento do que será apresentado.
Trabalhando com Session no DWR parte 1
Trabalhando com Session no DWR parte 2
Vídeo-aula 1
Vídeo-aula 2
Vídeo-aula 3
Vídeo-aula 4
Estrutura.
Vamos utilizar a implementação do último artigo. Session e SessionFacade. Iremos manter a estrutura desde o primeiro artigo e vamos inserir essa nova funcionalidade no “sistema”.
Criando o Bean
Para iniciarmos o nosso exemplo sem mais delongas vamos criar o bean que iremos utilizar. Veja a Listagem 1.
public class BeanSession {
private String id;
private String keyMap;
private String name;
public String getId() {
return id;
}
public String getKeyMap() {
return keyMap;
}
public String getName() {
return name;
}
public void setId(String id) {
this.id = id;
}
public void setKeyMap(String keyMap) {
this.keyMap = keyMap;
}
public void setName(String name) {
this.name = name;
}
}
Listagem 1. Código do BeanSession com 3 propriedades(id, keyMap e name) e seus respectivos Get´s e Set´s
Iremos utilizar esse bean para auxiliar o transporte dos dados entre o Java e o JavaScript. Mas o uso do mesmo não é obrigatório como vocês já sabem.
Alterando o FacadeAjaxSession.java
Segue o código que tínhamos:
public class FacadeAjaxSession {
public String exampleSession1(String attribute){
WebContext wc = WebContextFactory.get();
String valueSession = "";
if(wc.getHttpServletRequest().getSession().getAttribute(attribute)!= null){
valueSession = wc.getHttpServletRequest().getSession().getAttribute(attribute).toString();
}else{
valueSession = "Session is null";
}
return valueSession;
}
public void createSession(String attribute, String value){
WebContext wc = WebContextFactory.get();
wc.getHttpServletRequest().getSession().setAttribute(attribute, value);
}
public String exampleSession2(String attribute){
Session session = new SessionFacade();
String valueSession = "";
if(session.getAttribute(attribute)!= null){
valueSession = session.getAttribute(attribute).toString();
}else{
valueSession = "Session is null";
}
return valueSession;
}
}
Listagem 2. Código do FacadeAjaxSession que utilizamos no último artigo
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 3. Método que adiciona em um atributo da sessão o objeto passado como parâmetro
Na Listagem 3 vimos o método addMapSession() que espera como parâmetro um BeanSession(ver Listagem 1), 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 4. 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())) {
&n">
...