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>();
caraka bicho… era isso mesmo, muito obrigado a todos