Dados de uma Consultando no Banco com um ServLet para Um JSP [ RESOLVIDO ]

Boa Noite :lol: ;
Sou novo aqui no Forum, na verdade este é o meu primeiro POST.

Eu estou começando a estudar JAVA, estou tentando fazer um formulario de consulta a uma Tabela, eu já fiz o
layout de cadastro na tabela, agora estou tentando fazer o formulario de consulta aos dados cadastrados, estou
com o seguinte problema, estou querendo fazer uma consulta que me retorne e uma pagina JSP mais de um dado
caso ele exista…

Eu criei um servlet com metodos que faz funções no banco excluir, cadastrar etc…

Segue abaixo o metodo pelo qual estou tendo dificuldade…

Vocês iram notar que o metodo esta totalmente bagunça, galera não consigo sair disto, conseguir fazer funcionar de forma
a consulta me retornar um objeto da minha classe telefones. Mas oque estou querendo fazer agora pegar quantos dados forem necessários na minha consulta,mesmo que o dados sejam duplicados, pelo oque eu pesquisei na internet.

O Correto seria eu pegar o ResultSet colocar ele em uma Collection e enviar a colection para minha JSP através de uma Sessão e
recuperar a Collection na minha JSP…

Porém não consigo fazer isto de forma alguma…


    public ResultSet consultar(String nome){
         Statement st = null;
        //Armazena os dados de uma consultar

         //result set é representacao da Table
         ResultSet resultado = null;
         Telefones tel = null;
         try{
             st = con.createStatement();
             //executa consulta e armazena dados
             resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");
             
           //criando uma colection  
            Collection inftelefone = new ArrayList();   
            while(resultado.next()) {   
            inftelefone.add(resultado.getInt("id"));
            inftelefone.add(resultado.getInt("ramal"));   
            inftelefone.add(resultado.getString("nome"));
            inftelefone.add(resultado.getString("departamento"));
            
          }   
            
            
            //colocando a collection na session...
            session.setAttribute("minhasessao", inftelefone);

            //depois coloque  a collection na session...  


         } catch (SQLException ex) {
         ex.printStackTrace();

         }finally{
             conexao.fechar(con, st, resultado);
         }

         //retorna o objetos já preenchido
         return inftelefone;
 
         }

Abaixo segue minha JSP:

Alguem pode me dar uma dica de como posso enviar a session e recuperar ele no JSP…

Grato

O correto seria vc ter uma classe Telefone, uma classe GerenciaTelefone, nesta classe vc iria ter uma Coleção de Telefones e uma classe para acessar o Banco
tipo TelefoneBD.

A classe GerenciaTelefone teria um método para adicionar os objetos Telefone e outro método para retornar a lista de objetos Telefone.

A classe TelefoneBD teria um método semelhante ao seu:

public ResultSet consultar(String nome){  

O correto é vc criar conexões com o Banco de Dados, faça o que vc tem que fazer e depois feche os Connection, Statement, PreparedStatement e ResultSet.

NÃO USE RESULTSET NO SEU JSP USE APENAS NA SUA CLASSE TELEFONEBD.

Então seu método deveria ser:

public GerenciaTelefone consultar(String nome){  

Para cada ResutSet da sua consulta pegue os dados e insira em um objeto Telefone e depois insira o objeto Telefone na sua lista de Telefones.

Exemplo:

try{  
         st = con.createStatement();  
         //executa consulta e armazena dados  
         resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");  
           
       //Instanciando a classe GerenciaTelefone
        GerenciaTelefone listaTelefone = new GerenciaTelefone();     

        while(resultado.next()) { 
 
           //Instanciando a classe Telefone            
           Telefone telefone = new Telefone();

   
           telefone.setId(resultado.getInt("id"));  
           telefone.setRamal(resultado.getInt("ramal"));     
           telefone.setNome(resultado.getString("nome"));  
           telefone.setDepartamento(resultado.getString("departamento"));  

           listaTelefone.adiciona(telefone);
          
      }     

       return listaTelefone;
}

No jsp



TelefoneBD telefoneBD =  new TelefoneBD();

GerenciaTelefone listaTelefone = telefoneBD.consultar("nome");


Iterator i = listaTelefone.getLista().iterator();

while(i.hasNext()){ 

Telefone tels = (Telefone) i.next(); 

//Para cada interação do while vc terá um objeto Telefone.
} 

Muito bom da sua parte em tentar por a mão na massa e tentar fazer, mas vc deve aprender muitas coisas antes de chegar a mexer com web tipo:

Aprenda mais sobre Try catch finally e como lidar com Exceções

Por exemplo caso a sua consulta tiver algum erro, o seu objeto ResultSet não vai receber a referencia do resultado da consulta. Como o seu finally garante que o
objeto resultado será fechado, poderá acontecer um NullPointerException devido o objeto ainda estar apontando para null.

Esse é apenas um dos diversos erros que existem no seu código, por isso estude mais esses assuntos antes de chegar em web.

Lembrando, estude também List, Set e Map também ok!!!

Bons estudos.

Obrigado Amigo, estou levando na cabeça mesmo ao tentar apreder JAVA, agora
eu tentei trabalhar com o List, mas tive um problema não estou conseguindo instanciar a lista
usando a classe.

Pelo oque eu ententi o “ListaTelefone” seria a lista criada, eu não teria que criar este
listaTelefone como um objeto do tipo “List”.

Segue abaixo como esta ficando :

Obrigado pelas dicas, hoje anoite estarei pesquisando todos o tópicos que você relacionou e melhorando este
exemplo que estou tentando fazer…

TKS

Como mencionei acima vc tem que criar uma classe para armazenar os objetos Telefone.

exemplo:

public class GerenciaTelefone {

    private List lista = null;

    public GerenciaTelefone() {

        lista = new ArrayList();
    }

    public boolean adiciona(Telefone novo){

        return lista.add(novo);

    }

    public List getLista(){
        return lista;
    }

    

}

Para cada objeto da classe GerenciaTelefone vc terá uma lista, depois é só utilizar os métodos para adicionar e retornar a lista ok!!!

Este método é da classe TelefoneBD

public GerenciaTelefone consultar(String nome){ 

try{    
         st = con.createStatement();    
         //executa consulta e armazena dados    
         resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");    
             
       //Instanciando a classe GerenciaTelefone  
        GerenciaTelefone listaTelefone = new GerenciaTelefone();       
  
        while(resultado.next()) {   
  
           //Instanciando a classe Telefone              
           Telefone telefone = new Telefone();  
  
     
           telefone.setId(resultado.getInt("id"));    
           telefone.setRamal(resultado.getInt("ramal"));       
           telefone.setNome(resultado.getString("nome"));    
           telefone.setDepartamento(resultado.getString("departamento"));    
  
           listaTelefone.adiciona(telefone);  
            
      }       
  
       return listaTelefone;  
}  

Agora quando vc tentar instanciar a classe GerenciaTelefone o seu construtor irá criar uma lista, depois é só adicionar os objetos Telefone a cada interação
do seu ResultSet.

Na jsp quando vc chamar o método consultar ele irá retornar o objeto GerenciaTelefone onde vc poderá usar o método getLista() ok!!!

Mas volto a lembrar que ainda falta muita coisa!!!

Eu ainda não vi vc criar uma conexão com o Banco de Dados para o seu objeto Connection ???

Sim, vou colocar ele por completo…

-conexao.java-

public class conexao {

 private Connection conexao;

    public conexao(){


        try {
        InitialContext ctx = new InitialContext();
    //Recuperando a fonte de dados definida no tomcat
        DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/HelpDesk");
        conexao = ds.getConnection();
        } catch (NamingException ex) {
       // ex.printStackTrace();
        } catch(SQLException ex){
         System.out.println("Driver nao pode ser carregado!");
        }

    }

    public void fechar(Connection con, Statement st, ResultSet rs){
        try{
        if (rs != null){
        rs.close();
        }
        if (st != null){
        st.close();
        }
        if (con != null){
        con.close();
        }
        } catch(SQLException ex){
        //ex.printStackTrace();
        }
     }

     public Connection getCon(){
        return conexao;
     }

}


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pacote.persistencia;

import pacote.conexao.conexao;
import java.sql.Statement;
import java.sql.Connection;
import pacote.classes.Telefones;
import java.sql.ResultSet;
import java.sql.SQLException;


/**
 *
 * @author kees
 */

//DAO = O objeto desta classe vai ter as instruções SQL
public class TelefonesDAO {
    private conexao conexao;
    private Connection con;


    public TelefonesDAO() {
        conexao = new conexao();
        con = conexao.getCon();
    }

    public void gravar(Telefones tel){
        Statement st = null;
        try {
            //criado objeto para fazer declarações nesta conexão
            //retorna o objeto Statemen da Conexao
            st = con.createStatement();
            //Faz operações de inserção, remoção e Atualização
            st.executeUpdate("insert into Telefone values(" + null + "," + tel.getRamal() + ",'" + tel.getNome() + "','" + tel.getDepartamento() + "')");


        } catch(SQLException ex){
         System.out.println("Driver nao pode ser carregado!");
        } finally{
            conexao.fechar(con, st, null);
        }
    }


    public GerenciaTelefone consultar(String nome){
     Statement st = null;
     ResultSet resultado = null;
     try{
         st = con.createStatement();
         //executa consulta e armazena dados
         resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");

       //Instanciando a classe GerenciaTelefone
        GerenciaTelefone listaTelefone = new GerenciaTelefone();
        
        while(resultado.next()) {

           //Instanciando a classe Telefone
           Telefones telefone = new Telefones();


           telefone.setCodigo(resultado.getInt("id"));
           telefone.setRamal(resultado.getInt("ramal"));
           telefone.setNome(resultado.getString("nome"));
           telefone.setDepartamento(resultado.getString("departamento"));

         listaTelefone.adiciona(telefone);

           }
     } catch (SQLException ex) {
         System.out.println("Driver nao pode ser carregado!");
        } finally{
            conexao.fechar(con, st, null);
        }


       return listaTelefone;
}

}
  • SqlservletTelefones.java -


package pacote.servlets;

import java.io.IOException;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServlet;
import pacote.classes.Telefones;
import pacote.persistencia.GerenciaTelefone;
import pacote.persistencia.TelefonesDAO;

/**
 *
 * @author kees
 */


    public class SqlServletTelefones extends HttpServlet{



    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
            String acao = request.getParameter("acao");
           


            if (acao.equals("gravartel")){
                 int ramal = Integer.parseInt(request.getParameter("ramal"));
                 String nome = request.getParameter("nome");
                 String departamento = request.getParameter("departamento");
                //Criando objeto
                Telefones tel = new Telefones();
                //Criando objeto
                TelefonesDAO dao = new TelefonesDAO();

                //setando valores

                tel.setNome(nome);
                tel.setRamal(ramal);
                tel.setDepartamento(departamento);

                dao.gravar(tel);


            }

           //este é a consulta
            else if (acao.equals("consultartel")){
             
                          
                //Recuperando objeto nome
                String pesq = request.getParameter("nome");

                //Criando consulta ao Banco
                TelefonesDAO dao = new TelefonesDAO();
                
                //instanciando variavel tel a partir da classe GereciaTel e recebendo os valotes da consulta
                GerenciaTelefone tel = dao.consultar(pesq);
                
                request.setAttribute("tel", tel);

                request.getRequestDispatcher("resultaTelefones.jsp").forward(request, response);

            }
        }
}

A partir da dai eu teria que encaminhar o retorno para uma Pagina JSP, não sei se seria melhor
eu chamar o metodo e receber o retorno direto na pagina JSP, caso seja melhor eu posso alterar…

aversi, obrigado pela atenção !!

Volto a dizer que falta muita coisa para vc aprender ainda, neste caso o erro está acontecendo devido a assinatura do método:

public GerenciaTelefone consultar(String nome){

Nela diz que deve haver um retorno!!!

que tipo ?

um objeto do tipo GerenciaTelefone.

o problema está no seu try, catch finally

Caso ocorra um erro dentro do try nenhuma instrução será mais executada dentro do try.
Será executada as intruções dentro do catch deste que seja uma SQLException
O finally garante que todas as instruções serão executadas, independente de ter ocorrido uma Exceção ou não.

Vc poderia colocar o return dentro do finally assim o compilador entenderia que se havendo uma Exceção ou não haverá um return.

Quando vc for adicionar, atualizar e deletar utilize uma Servlets para pegar essas requisições.
Mas quando for apresentar dados, vc pode chamar o método consultar dentro do JSP.

TelefonesDAO obj = new TelefonesDAO();
obj.consultar(“nome”);

Boa Noite,
Olha concerteza ainda tenho muito que aprender, estes conceitos que você passou foram muito proveitosos, penso
em estudar mais a parte de lista, porque ainda estou voando, oque estou ficando revoltado e não consigo
parar de olhar para este scritpt, é esta bendita lista que eu não consigo retornar, eu entendi que
tenho que retornar um valor conforme oque indiquei no metodo, eu instaciei a minha variavel a classe que
me monta uma lista…

Imagino que não estaria faltando nada, porem creio que o meu return não esta conseguindo enchergar a lista a retornar…

Será que não tem que setar alguma valor, igual mandar para JSP uma classe ?

Muito Grato !!

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pacote.persistencia;

import pacote.conexao.conexao;
import java.sql.Statement;
import java.sql.Connection;
import pacote.classes.Telefones;
import java.sql.ResultSet;
import java.sql.SQLException;




/**
 *
 * @author kees
 */

//DAO = O objeto desta classe vai ter as instruções SQL
public class TelefonesDAO {
    private conexao conexao;
    private Connection con;
   // private GerenciaTelefone listaTelefone ;


    public TelefonesDAO() {
        conexao = new conexao();
        con = conexao.getCon();
    }

    public void gravar(Telefones tel){
        Statement st = null;
        try {
            //criado objeto para fazer declarações nesta conexão
            //retorna o objeto Statemen da Conexao
            st = con.createStatement();
            //Faz operações de inserção, remoção e Atualização
            st.executeUpdate("insert into Telefone values(" + null + "," + tel.getRamal() + ",'" + tel.getNome() + "','" + tel.getDepartamento() + "')");


        } catch(SQLException ex){
         System.out.println("Driver nao pode ser carregado!");
        } finally{
            conexao.fechar(con, st, null);
        }
    }


    public GerenciaTelefone consultar(String nome){
     Statement st = null;
     ResultSet resultado = null;
 
     try{
         st = con.createStatement();
         //executa consulta e armazena dados
         resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");

       //Instanciando a classe GerenciaTelefone preparando a lista
        GerenciaTelefone listaTelefone = new GerenciaTelefone();
           //laço de segue por casa conteudo do resultaser
            while(resultado.next()) {

            //Instanciando a classe Telefone
            Telefones telefone = new Telefones();

            //atribuindo valor do result set a classe telefone
            telefone.setCodigo(resultado.getInt("id"));
            telefone.setRamal(resultado.getInt("ramal"));
            telefone.setNome(resultado.getString("nome"));
            telefone.setDepartamento(resultado.getString("departamento"));
            //adicionando valores que estão na classe telefone para a lista 
            listaTelefone.adiciona(telefone);

            }
          
        
       }
        //excessão de conexao
       catch (SQLException ex) {
         //pelo oque eu entendi este objeto me retorna uma mensagem de erro neste caso a causa
         // bem que poderia retornar com conserta tipo um objeto assim ex.consetaparamin().
         ex.getCause();
       }
       finally{
       /*aqui diz que precisa ser criado o paramento para ela  se eu colocar
        ela dentro do try não acusa erro porem não retorna nada
        */
         return listaTelefone;
       //conexao.fechar(con, st, null); -- Creio que não seja necessário 
       }
    }
}

segue o restando programa:

<%@page import="java.util.Iterator"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@page import="pacote.classes.Telefones" %>
<%@page import="pacote.persistencia.GerenciaTelefone" %>

<%@page import="javax.servlet.http.HttpServletRequest" %>
<%@page import="javax.servlet.http.HttpServletResponse" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
         <%

       GerenciaTelefone tellist = (GerenciaTelefone)request.getAttribute("tel");
       GerenciaTelefone listaTelefone = null;// = new GerenciaTelefone();
       // listaTelefone = request.getAttribute("tel");
       //GerenciaTelefone teste = request.getAttribute("tel")
       Iterator i = tellist.getLista().iterator();
               
       
       while(i.hasNext()){

            //Telefones tels = null;
             Telefones tels = (Telefones) i.next();
            //Setando Valores
             int codigo = tels.getCodigo();
             int ramal = tels.getRamal();// = (Telefones) i.next();
             String nome = tels.getNome();
             String departamento = tels.getDepartamento();

            //recuperando
            out.println("<tr>");
            out.println("<td>" +ramal+ "</td><br>");
            out.println("<td>" +nome+ "</td><br>");
            out.println("<td>" +departamento+ "</td><br>");
            out.println("<td> <a href=\"SqvCliente?acao=excluir&codigo="+ramal+" \">Excluir</a></td><br>");
            out.println("<td> <a href=\"SqvCliente?acao=alterar&codigo="+ramal+" \" >Alterar</a></td>");

            }





%>

    </body>
</html>

Apenas mais uma pergunta, qual o melhor caminho para aprender JAVA !

Obrigado

Então fera!!!

No meu caso eu aprendi Java, ou melhor estou aprendendo, na Faculdade. Mas no meu caso a Faculdade onde estudo adota a linguagem Java como
linguagem padrão. Então a linguagem a ser utilizada para cada Faculdade pode mudar.

Eu já ouvi falar de bons cursos de Java na Caelum e na Global Code

http://www.caelum.com.br/
http://www.globalcode.com.br/home

O curso que estou fazendo é de Sistemas de Informação

Mas vai depender de onde você mora para encontrar a escola mais adequada.

O erro está ocorrendo na classe TelefonesDAO ou na JSP ?

Opa !!
eu também estudo sistemas da informação, mas no caso da minha grade tem Java que começou neste ano e delphi…

Até agora estudei apenas Orientação a Objeto com java, trabalho com informatica na area de Infra Estrutura, tipo
exchange, windows server, firewall , Linux. estou querendo aprender java para ter algum conhecimento em desenvolvimento
e quebrar aquele tabu Desenvolvimento VS Infra…

O problema esta dando na minha classe que consulta no banco, acho que é a lista que não está sendo retornada para a servlet que
chamou o metodo de consulta…

Abs…

Acho que encontrei o erro!!!

No método consultar()

caso ocorra um erro nesta instrução:

st = con.createStatement(); 

o objeto listaTelefone do tipo GerenciaTelefone ainda nem existe!!!

por isso que o compilador já preve isso e acusa o erro de compilação.

Então podemos fazer o seguinte, em baixo do

ResultSet resultado = null;

colocamos

GerenciaTelefone listaTelefone = null;

Dessa forma o seu método garante que haverá um retorno.

E quando for instanciar a classe GerenciaTelefone faça:

//Instanciando a classe GerenciaTelefone preparando a lista  
listaTelefone = new GerenciaTelefone();  

Dessa vez o erro foi meu, quando fui escrever o código escrevi direto no GUJ e não no NetBeans.

Foi mal!!!

Fera !! q isso vc já esta fazendo muito descobrindo o problema, olha, vou ser sincero
acho que está faltando muito para min mesmo, estou tentando me esforçar este problema
que não consigo ver esta me matando, mas está sendo util, já aprendi muito contigo e pesquisando
tentando fazer algo…

Então oque tenho agora é o seguinte :

O Meu servlet chamando o metodo consulta que esta na classe TelefoneDAO:


//Este captura o valor do input acao e verifica se pretendo fazer uma consulta
else if (acao.equals("consultartel")){
             
            //String nome = request.getParameter("nome");

                //Recuperando objeto nome
                String pesq = request.getParameter("nome");
                //Criando consulta ao Banco
                TelefonesDAO dao = new TelefonesDAO();

                GerenciaTelefone tel = dao.consultar(pesq);
                //ResultSet result = dao.consultar(pesq);
                request.setAttribute("tel", tel);

                request.getRequestDispatcher("resultaTelefones.jsp").forward(request, response);

            }

Abaixo segue o codigo da classse que faz a consulta no banco, esta é especificamente o metodo consultar() :


    public GerenciaTelefone consultar(String nome){
     Statement st = null;
     ResultSet resultado = null;
     GerenciaTelefone listaTelefone = null;

     try{
         st = con.createStatement();
         //executa consulta e armazena dados
         resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");

       //Retirado -Instanciando a classe GerenciaTelefone preparando a lista
       // Retirado --  GerenciaTelefone listaTelefone = new GerenciaTelefone();
           
            //laço de segue por casa conteudo do resultaser
            while(resultado.next()) {

            //Instanciando a classe Telefone
            Telefones telefone = new Telefones();

            //atribuindo valor do result set a classe telefone
            telefone.setCodigo(resultado.getInt("id"));
            telefone.setRamal(resultado.getInt("ramal"));
            telefone.setNome(resultado.getString("nome"));
            telefone.setDepartamento(resultado.getString("departamento"));
            //adicionando valores que estão na classe telefone para a lista
            listaTelefone.adiciona(telefone);

            }


       }
        //excessão de conexao
       catch (SQLException ex) {
         //pelo oque eu entendi este objeto me retorna uma mensagem de erro neste caso a causa
         // bem que poderia retornar com conserta tipo um objeto assim ex.consetaparamin().
         ex.getCause();
       }
       finally{
       /*aqui diz que precisa ser criado o paramento para ela  se eu colocar
        ela dentro do try não acusa erro porem não retorna nada
        */
         return listaTelefone;
       //conexao.fechar(con, st, null); -- Creio que não seja necessário
       }

Ok, até o momento creio que esteja corretor o Servlet chama o metodo consultar, o metodo
consultar retorna um objeto de tipo GerenciaTelefone, que é uma classe que foi criada e nesta classe
o construtor declara um array list e foi criado o metodo adiciona lista e get lista .

Agora creio que o problema esteja aqui, está uma pagina JSP reponsavel por mostrar o conteudo da lista…

FormularioJSP --> Servlet -> Metodo Consulta() -> Servlet --> FormularioQueMostraaLista

Aversi, esta acusando erro na hora que vou instanciar o objeto gerenciatelefone, mesmo eu
tentando instanciar deste modo que o NetBeans não acusa erro :

GerenciaTelefone listatelefone = new GerenciaTelefone();

Aparece erro de incompatibildade na segunda linha :

listatelefone = request.getAttribute("tel");

Abaixo estou postando o JSP confecionado conforme sua orientação:


<%   
  
       
                  
        listatelefone = new GerenciaTelefone(); 
        listatelefone = request.getAttribute("tel");   
       //GerenciaTelefone listaTelefone = null;// = new GerenciaTelefone();   
       // listaTelefone = request.getAttribute("tel");   
       //GerenciaTelefone teste = request.getAttribute("tel")   
       Iterator i = listatelefone.getLista().iterator();   
                 
         
       while(i.hasNext()){   
  
            //Telefones tels = null;   
             Telefones tels = (Telefones) i.next();   
            //Setando Valores   
             int codigo = tels.getCodigo();   
             int ramal = tels.getRamal();// = (Telefones) i.next();   
             String nome = tels.getNome();   
             String departamento = tels.getDepartamento();   
  
            //recuperando   
            out.println("<tr>");   
            out.println("<td>" +ramal+ "</td><br>");   
            out.println("<td>" +nome+ "</td><br>");   
            out.println("<td>" +departamento+ "</td><br>");   
            out.println("<td> <a href=\"SqvCliente?acao=excluir&codigo="+ramal+" \">Excluir</a></td><br>");   
            out.println("<td> <a href=\"SqvCliente?acao=alterar&codigo="+ramal+" \" >Alterar</a></td>");   
  
            }   
  
  
  
  
  
%>

Eu acho que só falta isto, estranho eu não consigo recuperar o valor do atributo na variavel criada com o mesmo tipo "GerenciaTelefone "

Abs… :?

<%

    listatelefone = new GerenciaTelefone(); 
    listatelefone = request.getAttribute("tel");   
   //GerenciaTelefone listaTelefone = null;// = new GerenciaTelefone();   
   // listaTelefone = request.getAttribute("tel");   
   //GerenciaTelefone teste = request.getAttribute("tel")   
   Iterator i = listatelefone.getLista().iterator();   
             
     
   while(i.hasNext()){   

        //Telefones tels = null;   
         Telefones tels = (Telefones) i.next();   
        //Setando Valores   
         int codigo = tels.getCodigo();   
         int ramal = tels.getRamal();// = (Telefones) i.next();   
         String nome = tels.getNome();   
         String departamento = tels.getDepartamento();   

        //recuperando   
        out.println("<tr>");   
        out.println("<td>" +ramal+ "</td><br>");   
        out.println("<td>" +nome+ "</td><br>");   
        out.println("<td>" +departamento+ "</td><br>");   
        out.println("<td> <a href=\"SqvCliente?acao=excluir&codigo="+ramal+" \">Excluir</a></td><br>");   
        out.println("<td> <a href=\"SqvCliente?acao=alterar&codigo="+ramal+" \" >Alterar</a></td>");   

        }   

%>

Primeiro um método request.getAttribute(“tel”) sempre retorna um Object que é a superclasse de todas as classes Java, ou seja todas as classes descendem dela.

Você teria que fazer um DowCasting!!!

GerenciaTelefone listaTelefone = (GerenciaTelefone) request.getAttribute(“tel”);

nem precisa instanciar a classe GerenciaTelefone, vc precisa apenas de um objeto para receber a referencia do retorno do request.getAtribute(“tel”);

Sobre o problema de instanciar a classe GerenciaTelefone na sua JSP, se o contrutor da classe GerenciaTelefone estiver correto o erro deve estar no import
da sua JSP.

Existe um import da classe GerenciaTelefone na sua JSP ?

exemplo:

<%@page import=“NomeDoPacote.GerenciaTelefone”%>

Isso pode variar dependendo de como está organizado os seus pacotes.

Outra coisa quando eu vou gravar, deletar e atualizar eu utilizo Servlets para capturar essas requisições, mas quando eu quero consultar, na própria JSP
eu instancio a classe DAO e chamo o método consultar que me retorna o objeto GerenciaTelefone.

Então, na proxima eu vou tentar chamar o metodo direto no jsp, mas eu queria fazer este funcionar, acho que
esta quase…

Não está acusando no NetBeans, porém acusa no JSP…

Fiz o Teste das Seguintes Maneiras:

List lista = new ArrayList();
       lista = listatelefone.getLista();// --- O Erro aparece aqui no JSP
       Iterator i = lista.iterator();
       
       while(i.hasNext()){

OU


       GerenciaTelefone listatelefone = (GerenciaTelefone)request.getAttribute("tel");
           
       Iterator i = listatelefone.getLista().iterator();// -- Acusa Erro nesta Linha agora
       

Pelo oque entendo o Iterator não esta recebendo o Objeto do Tipo Gerencia Telefone…

Segue o codigo todo:

<%-- 
    Document   : resultaTelefones
    Created on : 27/07/2010, 12:07:08
    Author     : oz
--%>


<%@page import="java.util.ArrayList"%>
<%@page import="pacote.persistencia.TelefonesDAO"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@page import="pacote.classes.Telefones" %>
<%@page import="pacote.persistencia.GerenciaTelefone" %>
<%@page import="java.util.Iterator"%>
<%@page import="javax.servlet.http.HttpServletRequest" %>
<%@page import="javax.servlet.http.HttpServletResponse" %>
<%@page  import="java.util.List" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
      <%

       GerenciaTelefone listatelefone = (GerenciaTelefone)request.getAttribute("tel");
           
       Iterator i = listatelefone.getLista().iterator();
       
       while(i.hasNext()){

            //Telefones tels = null;
             Telefones tels = (Telefones) i.next();
            //Setando Valores
             int codigo = tels.getCodigo();
             int ramal = tels.getRamal();// = (Telefones) i.next();
             String nome = tels.getNome();
             String departamento = tels.getDepartamento();

            //recuperando
            out.println("<tr>");
            out.println("<td>" +ramal+ "</td><br>");
            out.println("<td>" +nome+ "</td><br>");
            out.println("<td>" +departamento+ "</td><br>");
            out.println("<td> <a href=\"SqvCliente?acao=excluir&codigo="+ramal+" \">Excluir</a></td><br>");
            out.println("<td> <a href=\"SqvCliente?acao=alterar&codigo="+ramal+" \" >Alterar</a></td>");

            }





%>

    </body>
</html>

Abs

Acho que eu escrevi mal no meu penúltimo post!!

No método consultar vc faltou instanciar a classe GerenciaTelefone, eu pedi para vc declarar o objeto GerenciaTelefone para garantir o seu retorno, mas vc
deveria instancia a classe mesmo assim antes do while.

Exemplo:


public GerenciaTelefone consultar(String nome){  
Statement st = null;  
ResultSet resultado = null;  
GerenciaTelefone listaTelefone = null;  
  
try{  
     st = con.createStatement();  
     //executa consulta e armazena dados  
     resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");  
  

         listaTelefone = new GerenciaTelefone();  
         
        //laço de segue por casa conteudo do resultaser  
        while(resultado.next()) {  
  
        //Instanciando a classe Telefone  
        Telefones telefone = new Telefones();  
  
        //atribuindo valor do result set a classe telefone  
        telefone.setCodigo(resultado.getInt("id"));  
        telefone.setRamal(resultado.getInt("ramal"));  
        telefone.setNome(resultado.getString("nome"));  
        telefone.setDepartamento(resultado.getString("departamento"));  
        //adicionando valores que estão na classe telefone para a lista  
        listaTelefone.adiciona(telefone);  
  
        }  
  
  
   }  

Do modo que estava antes vc tinha um objeto apontado para null, sendo que seu ArrayList é criado no construtor da classe GerenicaTelefone.

Na sua JSP vc tinha o seguinte:

Iterator i = null.iterator();

por isso dava erro.

Dê uma olhada no meu penúltimo post antes desse, era isso que eu tentei expressar.

Por favor quando funcionar me informe ok!!!

Boa Noite;
Amersi eu fiz o seguinte, eu fiz um teste somente com JSP, sem chamar a classe GerenciaTelefone…
deu certo…

<%-- 
    Document   : resultaTelefones
    Created on : 27/07/2010, 12:07:08
    Author     : oz
--%>



<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@page import="pacote.classes.Telefones" %>
<%@page import="pacote.persistencia.GerenciaTelefone" %>
<%@page import="java.util.Iterator"%>
<%@page import="javax.servlet.http.HttpServletRequest" %>
<%@page import="javax.servlet.http.HttpServletResponse" %>
<%@page  import="java.util.List" %>
<%@page import="java.util.ArrayList"%>
<%@page import="pacote.persistencia.TelefonesDAO"%>


<%@page  import="pacote.conexao.conexao" %>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.SQLException"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
      <%
     String nome = request.getParameter("nome");
     Statement st = null;
     ResultSet resultado = null;
     List listaTelefone = null;
     listaTelefone = new ArrayList();
     conexao conexao;
     Connection con;
     conexao = new conexao();
     con = conexao.getCon();

   try{
         st = con.createStatement();
         //executa consulta e armazena dados
         resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");

           //laço de segue por casa conteudo do resultaser
            while(resultado.next()) {

            //Instanciando a classe Telefone
            Telefones telefone = new Telefones();

            //atribuindo valor do result set a classe telefone
            //telefone.setCodigo(resultado.getInt("id"));
            telefone.setCodigo(0);
            telefone.setRamal(resultado.getInt("ramal"));
            telefone.setNome(resultado.getString("nome"));
            telefone.setDepartamento(resultado.getString("departamento"));
            //adicionando valores que estão na classe telefone para a lista
            listaTelefone.add(telefone);

            }

      
           
           Iterator i = listaTelefone.iterator();
       
           while(i.hasNext()){

            //Telefones tels = null;
             Telefones tels = (Telefones) i.next();
            //Setando Valores
             int codigo = tels.getCodigo();
             int ramal = tels.getRamal();// = (Telefones) i.next();
             String nomes = tels.getNome();
             String departamento = tels.getDepartamento();

            //recuperando
            out.println("<tr>");
            out.println("<td>" +ramal+ "</td><br>");
            out.println("<td>" +nomes+ "</td><br>");
            out.println("<td>" +departamento+ "</td><br>");
            out.println("<td> <a href=\"SqvCliente?acao=excluir&codigo="+ramal+" \">Excluir</a></td><br>");
            out.println("<td> <a href=\"SqvCliente?acao=alterar&codigo="+ramal+" \" >Alterar</a></td>");

            }


        }
      finally{
   
          }


%>

    </body>
</html>


E Tambem deu certo usando o Servlet…


public GerenciaTelefone consultar(String nome){
     Statement st = null;
     ResultSet resultado = null;
     GerenciaTelefone listaTelefone = null;

     try{
         st = con.createStatement();
         //executa consulta e armazena dados
         resultado = st.executeQuery("select * from Telefone where nome = '"+nome+"'");

         listaTelefone = new GerenciaTelefone();
       //Retirado -Instanciando a classe GerenciaTelefone preparando a lista
       // Retirado --  GerenciaTelefone listaTelefone = new GerenciaTelefone();
           //laço de segue por casa conteudo do resultaser
            while(resultado.next()) {

            //Instanciando a classe Telefone
            Telefones telefone = new Telefones();

            //atribuindo valor do result set a classe telefone
            telefone.setCodigo(resultado.getInt("id"));
            telefone.setRamal(resultado.getInt("ramal"));
            telefone.setNome(resultado.getString("nome"));
            telefone.setDepartamento(resultado.getString("departamento"));
            //adicionando valores que estão na classe telefone para a lista
            listaTelefone.adiciona(telefone);

            }


       }
        //excessão de conexao
       catch (SQLException ex) {
         //pelo oque eu entendi este objeto me retorna uma mensagem de erro neste caso a causa
         // bem que poderia retornar com conserta tipo um objeto assim ex.consetaparamin().
         ex.getCause();
       }
       finally{
       /*aqui diz que precisa ser criado o paramento para ela  se eu colocar
        ela dentro do try não acusa erro porem não retorna nada
        */
         return listaTelefone;
       //conexao.fechar(con, st, null); -- Creio que não seja necessário
       }
    

Só me explica uma coisa no esquema do metodo consultar, primeiro eu declaro o objeto
como tipo GerenciaTelefone, e depois eu instancio ele pq senão ele não chama o construtor nem
nada é isso, Fera obrigado aprendi muito coisa…

Obrigado pela Atenção…

De uma maneira em geral, quando houver retorno no seu método, vc deve garantir que alguma coisa irá retornar, caso contrário o compilador
irá acusar erro.

Se vc estiver retornando um objeto, este objeto deve estar apontando para algum lugar, isso garante um retorno para esse método.

No seu caso como podem ocorrer erros, quando vc está acessando o Banco de Dados, vc deve garantir que haverá um retorno para
o seu método antes de qualquer possibilidade de erro dentro do seu método ok!!!