[resolvido] servlet pegar lista e retornar na minha view

6 respostas
andreacerqueira

Tenho meu servlet assim:

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String c = request.getParameter("tipo");
        VinhosExpert vinho = new VinhosExpert();
        List<?> result = vinho.listaVinhosEsp(c);

        request.setAttribute("vinhos", result);

        RequestDispatcher view = request.getRequestDispatcher("result.jsp");
        view.forward(request, response);
    }

A intenção é pegar a lista de vinhos do ID que eu passei no método listaVinhosEsp(), mas até ai tudo bem.
Eu quero saber como eu retorno essa lista na minha jsp, pq esse método listaVinhosEsp() tá assim:

public List<VinhosExpert> listaVinhosEsp(String tipo) {
        try {
            List<VinhosExpert> vinhos = new ArrayList<VinhosExpert>();
            String sql = null;
            ResultSet rs = null;
            sql = "SELECT id, nome FROM vinhos WHERE tipo = " + tipo;
            Connection conn = Conexao.obterConexao();

            Statement st = conn.createStatement();
            rs = st.executeQuery(sql);
            while (rs.next()) {
                // criando o objeto Vinho
                VinhosExpert vinho = new VinhosExpert();
                vinho.setId(rs.getInt("id"));
                vinho.setNome(rs.getString("nome"));

                // adicionando o objeto à lista
                vinhos.add(vinho);
            }
            rs.close();
            st.close();
            return vinhos;
        } catch (SQLException e) {
            throw new RuntimeException(e);
            //System.out.println("Erro no SELECT: " + e.getMessage());
        }
    }
Mas quando eu tento listar no jsp, só me retorna o hashCode():
<%
                    List vinhos = (List) request.getAttribute("vinhos");
                    for (int i = 0; i < vinhos.size(); i++) {
                        out.println(vinhos.get(i) + "<br>");
                    }
                %>

Eu achei que o setId e o setNome do listaVinhosEsp() estavam guardando o nome e id na List...

6 Respostas

vinnysoft

Olá!

Está correto, pois vc está imprimindo na tela o valor da referencia do objeto Vinho que está no ArrayList[i].

Não seria o caso usar o getNome?

for (int i = 0; i < vinhos.size(); i++) {  
       out.println(vinhos.get(i).getNome + "<br>");  
 }

Até +!

andreacerqueira

foi o que eu pensei vinny, o problema é que o getNome não está acessivel.
olha:

vinnysoft

Hum…

Tenta fazer assim:

<%  
                        List<VinhosExpert> vinhos = (List<VinhosExpert>) request.getAttribute("vinhos");  
                        for (int i = 0; i < vinhos.size(); i++) {  
                            out.println(vinhos.get(i).getNome() + "<br>");  
                        }  
                    %>

ou então:

<%  
                        List vinhos = (List) request.getAttribute("vinhos");  
                        for (int i = 0; i < vinhos.size(); i++) {  
                            out.println(((VinhosExpert)vinhos.get(i)).getNome + "<br>");  
                        }  
                    %>

Até +!

andreacerqueira

Perfeito :slight_smile:
Nem sabia disso (List).
Não ia chegar na solução nunca hehehe.
Obrigado.

vinnysoft

Beleza! :thumbup:

Esse recurso se chama Generics… Ele garante de certa forma que os valores da List (no seu caso) sempre serão o que vc informou entre <> (no caso, VinhosExpert). Assim você terá acesso aos métodos e atributos públicos de VinhosExpert. Pesquise depois.

Não esqueça de editar o seu primeiro post e colocar como resolvido.

Abraços!

andreacerqueira

Entendi, vou pesquisar.
Vlw :wink:

Criado 5 de abril de 2012
Ultima resposta 5 de abr. de 2012
Respostas 6
Participantes 2