[RESOLVIDO] Listener com Map HashMap

olá pessoal, eis o problema:

1 - quero inicializar um Map em um Listener
2 - transferir esse Map (com alguns valores pré-definidos) para outro servlet
3 - imprimir esses valores

segue abaixo meu Listener:

[code]public void contextInitialized(ServletContextEvent contextEvent) {

	Map<Long, AlunoTO> alunos = new HashMap<Long, AlunoTO>();		//Classe Bean
	SimpleDateFormat formataData = new SimpleDateFormat("dd/MM/yyyy"); 
	Date data;
	
	try {
		data = formataData.parse("21/12/2012");
		AlunoTO aluno = new AlunoTO("1", "Aluno 01", "Curso teste  01",data);
		alunos.put((long) 1, aluno);
		 contextEvent.getServletContext().setAttribute("alunos", alunos);
		
	} catch (ParseException e) {			
		e.printStackTrace();
	}[/code]

agora meu Servlet receptor:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String valor = (String)request.getSession().getAttribute("alunos"); System.out.println("valor: "+valor); //alunos.get(1); }

minha saída está sendo null, alguma sujestão de como proceder?

obrigado.

Se bem entendi o listener a que vc se refere é chamado na inicilização do webcontainer. A forma que vc tem para transferir os dados é usando o contexto de aplicação que dura durante toda a vida da aplicação no webcontainer.
É como um session, só que dura para toda a aplicação e é o mesmo para todos os usuários (requisições e sessions).

Ora, vc já está fazendo isso no listener com

 contextEvent.getServletContext().setAttribute("alunos", alunos);  

Mas está usando a sessão no sevlet. Ora, obviamente não vai funcionar pq o contexto não é o mesmo.

Em vez disto

      String valor = (String)request.getSession().getAttribute("alunos"); 

use isto

      Map<Long, AlunoTO> alunos = (Map<Long, AlunoTO>) request.getSession().getSevletContext().getAttribute("alunos"); 

Repare como usa o SevletContext. Este objeto é quem contem a informação do escopo “application” num web container

ótima observação, mas agora o problema é outro:

quando tento iprimir o valor usando:

	System.out.println("valor: "+MapAlunos.get("1")); 

ou

	System.out.println("valor: "+MapAlunos.get("1").toString()); 

ou

for (AlunoTO aluno : alunos.values()) { System.out.println("alunos.values() > "+aluno); }

a saída é o nome do pacote + AlunoTO@132f9bcd

sabe como posso fazer para imprimir o Valor

Olá
Fabio

Esta saindo dessa forma prq vc nao sobrescreveu o metodo toString() da sua classe. Essa saida é a implementação padrão da classe Object

Para sobrescrever faça isso acrescente na sua classe Aluno


public String toSting(){
   return this.atributo_da_classe
}

Ou utilize os metodos getters and setters…

usando o método acima funcionou quando declarei um Map<String, String>, mas quando passo uma String e um Objeto ?

Map<String, Objeto> alunos = new HashMap<String, Objeto>();

ok ramilani, vou testar

caraka bicho… era isso mesmo, muito obrigado a todos