Como pegar um Collection na JSP?

3 respostas
jesley.sena

Pessoal, quero exibir uma COLLECTION em uma JSP.
O meu Action instancia o gerente de banco de dados que retorna um Collection.
Eu imprimo os dados que estão vindo na consulta com System.out.println() e todos os registros aparecem numa boa.

O problema está quando recebo de volta no ACTION a COLLECTION, o código é o seguinte:
Collection todosUsuarios = this.todosUsuarios(id);
	request.setAttribute("todosUsuarios", todosUsuarios);
	request.getRequestDispatcher("excluirUsuario.jsp").forward(request,response);
O Eclipse acusa o erro na última linha, depois dela vai direto para o CATCH:
request.getRequestDispatcher("excluirUsuario.jsp").forward(request,response);
Na minha JSP, faço o seguinte:
<body>
<% 
	ArrayList todosUsuarios = (ArrayList)session.getAttribute("todosUsuarios"); 
	User user;
%> 
<TABLE> 
	<TR> <TD>ID</TD> 
	         <TD>Username</TD> 
	         <TD>Perfil</TD> 
	</TR> 
	<% 
		for(int i=0; i<todosUsuarios.size();i++){ 
		user = (User)todosUsuarios.get(i);%> 
		<TR> 
                      <TD><%=user.getId()%></TD> 
		<TD><%=user.getUsername()%></TD> 
		<TD><%=user.getRole()%></TD> 
		</TR> 
	<%}%> 
</TABLE>
</body>
O ERRO QUE APARECE É SINISTRO:
org.apache.jasper.JasperException
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
	at action.ExcluirUsuarioAction.execute(ExcluirUsuarioAction.java:35)
	at control.Controlador.distribuidor(Controlador.java:65)
	at control.Controlador.doGet(Controlador.java:53)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

1 abraço,
Jesley.Sena
:shock:

3 Respostas

jesley.sena

Pessoal meu gerente de persistência está assim (pra ver se ajuda):

public Collection todosUsuariosBD(int id) {
	try{
	String sql = "Select  username, role, id from user where id = ?;" ;
	PreparedStatement psmt = this.con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
				ResultSet.CONCUR_READ_ONLY);
	psmt.setInt(1,id);
	ResultSet rs = psmt.executeQuery();
	Collection array = new ArrayList();
	User user;
	while(rs.next()){
	user = new User();
	user.setUsername(rs.getString(1));
	user.setRole(rs.getString(2));
	user.setId(rs.getInt(3));
	array.add(user);
}
	rs.close();
	con.close();
	psmt.close();
					
	return array;
}catch (Exception e) {
	e.printStackTrace(); e.getMessage();
	Collection array = new ArrayList();
	return array;
}
Espero ajudar galera.
A
Você colocou um atributo na request...
jesley.sena:
Collection todosUsuarios = this.todosUsuarios(id);
	request.setAttribute("todosUsuarios", todosUsuarios);
	request.getRequestDispatcher("excluirUsuario.jsp").forward(request,response);
Mas está pegando da session no JSP !
jesley.sena:
Na minha JSP, faço o seguinte:
<body>
<% 
	ArrayList todosUsuarios = (ArrayList)session.getAttribute("todosUsuarios"); 
	User user;
%> 
</body>

Mude a linha acima para:
ArrayList todosUsuarios = (ArrayList) request.getAttribute("todosUsuarios");

jesley.sena

Valeu Ana, funcionou blz.

Puts, eu já tinha passado várias vezes por esse ponto mais em nenhuma tinha me ligado nisso, valeu mesmo!!

Criado 2 de agosto de 2005
Ultima resposta 3 de ago. de 2005
Respostas 3
Participantes 2