Ajuda com ArraList

Estou tendo um probleminha simples…mas não sei onde esta o erro…

tenho uma classe dao com o seguinte método:

public ArrayList<Usuario> listaCompleta() throws SQLException{
        
        String sql = ("SELECT * FROM tb_usuario");
        
        stmt = con.createStatement();
        stmt.executeQuery(sql);
        rs = stmt.getResultSet();
        
        Usuario usuario = new Usuario();
        ArrayList listausers = new ArrayList<Usuario>();
        
        while (rs.next()){
            usuario.setNome(rs.getString("nome"));
            usuario.setDepto(rs.getString("depto"));
            
            listausers.add(usuario);
        }
        
        stmt.close();rs.close();con.close();System.out.print("Conexões Fechadas");
        
        return listausers;
    }

eu gostaria de chamar ele numa servlet e imprimir na tela uma lista dos registros…então fiz o seguinte:

try {
            UsuarioDao dao = new UsuarioDao();
            ArrayList<Usuario> lista = dao.listaCompleta();
            
            //aqui estou testando pra ver se recebi a lista
            for(Usuario user:lista){
                System.out.print(user.getNome());
            }
            
            PrintWriter out = resp.getWriter();
            
            out.print("<html>");
            out.print("<body>");
            out.print("aqui virão os registros");
            out.print("</body>");
            out.print("</html>");
            
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

o problema é que ele retorna apenas o último nome várias vezes…

se eu mando imprimir direto na classe dao pra testar…ele mostra todos…mas na servlet não consigo…

alguém se habilita por favor ???

[/]'s

O problema é que tu ta usando sempre o esmo objeto Usuario.

Faça assim

Usuario usuario = null;
ArrayList listausers = new ArrayList<Usuario>();
         
while (rs.next()){
  usuario = new Usuario();
  usuario.setNome(rs.getString("nome"));
  usuario.setDepto(rs.getString("depto"));
            
  listausers.add(usuario);
}
   

Até…

ou seja… vc criou apenas uma referência pra usuario (no momento q vc deu o new)… qdo vc seta o nome e o dpto, ele vai atualizar a referencia, porem vc está adicionando a mesma referência N vezes na coleção…

Galera muito obrigado…agora funcionou…

fabiocsi valeu pela explicação…

[/]'s

obs.: precisei dar um undeploy na app que estava no Servidor de aplicação e criar novamente …

Uma dica coloque essa sua lista no request e use jstl especificamente a tag forEach para listar os dados no jsp

//servlet

request.setAttribute("usuarios",new UsuarioDao().listaCompleta());

//jsp

<c:forEach var="usuarios" items="${usuarios}">
    ${usuarios.nome}<br>
    ${usuarios.depto}<br>
</c:forEach>

Ou melhor ainda use essa taglib e para de sofrer, pois você poderá paginar e exportar arquivos, fantástico né?

http://displaytag.homeip.net/displaytag-examples-1.1/example-paging.jsp

Maravilha…desse jeito eu ainda não tentei…

mas irei testar pois é muito menos código…rss

valews

Lembrando que classes Java não devem conter códigos html e vice-versa, bons testes, para testar aquele forEach vc precisa adicionar jstl.jar no seu projeto e colocar essa chamada no início de suas páginas:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

E complementando em sua Servlet deve conter os seguintes comandos:

RequestDispatcher rd;
rd = getServletContext().getRequestDispatcher("/Pagina.jsp");
rd.forward(request, response);

:wink:

Pedrosa, desse jeito que vc me passou…

depois qeu eu seto o request…o que eu preciso fazer ??

dou um resp.sendRedirect(“qq_pagina.jsp”);

???

Editei meu ultimo comentario, com sendRedirect ele não trafega as informações do request e response!

Sem comentários né…agora sim ficou mais bonito…

brigadão pela dica…[/]'s