Problemas com método declarado em DAO ao chama-lo em uma JSP

3 respostas
M

Bom dia pessoa, criei um DAO que possui o seguinte o método para listar todos os clientes e ao selecionar um deles pelo código, todas as informações desse cliente sejam enviadas para outra página para que possa ser alterados os seus dados.

O primeiro método lista todos os clientes cadastrados:

public List<Clientes>getClientes() throws SQLException{
      
        try{
            List<Clientes>cliente = new ArrayList<Clientes>();
            String sql = "select*from cliente";
            PreparedStatement stm = conn.prepareStatement(sql);
            
            ResultSet rs = stm.executeQuery();
            while (rs.next()){
                Clientes cli = new Clientes();
                cli.setIdCliente(rs.getLong("idCliente"));
                cli.setNome(rs.getString("nome"));
                cli.setEndereco(rs.getString("endereco"));
                cli.setFone(rs.getString("fone"));
                cliente.add(cli);
            }
           
            stm.close();
            rs.close();
            return cliente;
        }catch(SQLException e){
           throw new RuntimeException(e);
        }
     }

já o segundo serve para buscar todas as infomações do cliente pelo código para que seja atualizado. No momento que instancio a classe DAO na página JSP, chamo o método abaixo para selecionar as informações de um cliente e alterá-lo, porém na chamada do metodo continua apresentando o seguinte erro: cannot find symbol: variable idCliente. Já tentei várias alterçoes e continua o mesmo erro.

public Clientes getCliente(Long idCliente) throws ClassNotFoundException, SQLException{
        
            Connection con = new ConexaoBanco().getConnection();
            String sql ="select*from cliente where idCliente = ?";
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setLong(1,idCliente);
            ResultSet res = ps.executeQuery();
            List<Clientes> cliente = getClientes(); // repasso para uma lista o método getClientes, que lista todos os clientes
            
           
                
             return cliente.get(0);  
            
       
        
        
    }
    
}
Na página JSP faço dessa forma:
<%
                 
                 clienteDAO dao = new clienteDAO();
                 
                 List<Clientes> cli =dao.getCliente(idCliente);
                 for(Clientes clie: cli){
                  
                 %>
                 <tr>
                 <td><%=clie.getIdCliente()%></td>
                 <td><%=clie.getNome()%></td>
                 <td><%=clie.getEndereco()%></tdr>
                 <td><%=clie.getFone()%></td>
                 
                 <td><a href ="EditarCliente.jsp?idCliente=<%=clie.getIdCliente() %>">Editar</a></td>
                 
                 </tr>
                 <%
                  }
                 
                 %>
No link gostaria de enviar somente idCliente, mais que fossem também as outras informações sem que tenha que fazer
&nome=<%=clie.getNome() %>

3 Respostas

drsmachado

Crie um método toString em sua classe cliente. O mesmo deve retornar os atributos do cliente com os respectivos “labels”.
Exemplo:

@Override
public String toString(){
   return "id=" + getId() + "&nome=" + getNome();
}

Aí, ao invés dessa gambiarra toda, use isto:

<td><a href ="EditarCliente.jsp?<%= clie%>">Editar</a></td>

Quando o compilador for ler este trecho acima, invocará o método toString, de Cliente, retornando o que você especificou lá.

F

Uma dica:
Cuidado com o nome que você dá às classes e objetos…

Você tá colocando uma classe que define um objeto cliente com o nome Clientes e instanciando uma lista com o nome cliente.
Isso pode gerar uma baita confusão…

drsmachado

fasts:
Uma dica:
Cuidado com o nome que você dá às classes e objetos…

Você tá colocando uma classe que define um objeto cliente com o nome Clientes e instanciando uma lista com o nome cliente.
Isso pode gerar uma baita confusão…

Perfeito!

A idéia de usar variáveis é justamente a de permitir que determinadas coisas sejam lidas e compreendidas de imediato.
cliente me remete à apenas um cliente e, não a uma lista de clientes.

Criado 28 de junho de 2012
Ultima resposta 28 de jun. de 2012
Respostas 3
Participantes 3