Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    32

    [JSP e Servlet] problema casting tra vettore e oggetto "Auto"

    Ciao a tutti, sto realizzando un sito con jsp e servlet per un esame universitario, ho un problema che mi sta facendo impazzire:

    ho una servlet che mi fa una ricerca in un db mysql i risultati di questa ricerca servono per istanziare degli oggetti di tipo Auto (semplice classe di mia creazione con metodi get e set), queste "Auto" le inserisco in un vettore che poi passo ad una jsp tramite


    codice:
     request.setAttribute("auto", v);
    v è il vettore di auto.

    nella jsp recupero tramite questo codice il vettore e cerco di usarlo:

    codice:
    <%@ page import="java.util.*" %>             
    <%@page import="packagea.Auto"%>             
    
    <% Vector<Auto> v = (Vector<Auto>)request.getAttribute("auto"); 			 			
    Auto auto  = v.elementAt(0);             
    out.println(auto.getMarca());   %>
    in questo caso sto cercando di stampare solo la marca dell'oggetto auto presente nella posizione 0 del vettore.

    L'errore che riscontro alla riga "Auto auto = v.elementAt(0);" è il seguente:

    "Auto cannot be cast to packagea.Auto"

    ovviamente si capisce che il problema è il casting ma non mi vengono in mente soluzioni, non mi sembra ci sia qualcosa di errato, anche se provo a scrivere "Auto auto = (Auto)v.elementAt(0);" ottengo lo stesso errore.

    Qualche consiglio ?

    Grazie

  2. #2
    Prova così:

    codice:
    Auto auto = (Auto)v.elementAt(0);
    perché a quanto pare l'oggetto restituito da elementAt(n) è di tipo Element

    EDIT: infatti, il metodo restituisce oggetti di tipo E

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    32
    Originariamente inviato da ardito86
    Prova così:

    codice:
    Auto auto = (Auto)v.elementAt(0);
    perché a quanto pare l'oggetto restituito da elementAt(n) è di tipo Element

    EDIT: infatti, il metodo restituisce oggetti di tipo E
    Ti ringrazio per la risposta ma se leggi l'ultima parte del primo post noterai che ho già provato a fare il casting come consigli e ho riscontrato lo stesso errore.
    Sinceramente non ne vengo a capo...

  4. #4
    Beh allora non lo so.
    Prova allora a istanziare prima l'oggetto...la classe Auto non ha metodi o campi statici, giusto?

    codice:
    Auto auto = new Auto();
     auto = (Auto)v.elementAt(0);
    Ah poi non conosco jsp per cui non so interpretare la prima istruzion, ma assicurati comunque che il vettore v contenga elementi...

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    32
    il vettore contiene elementi, ho provato a stampare il suo contenuto e ci sono due oggetti Auto, il problema è proprio il casting che provo ad eseguire per recuperare le auto nel vettore, ho anche provato ad istanziare prima l'oggetto auto come dici e poi a estrarre il singolo elemento nel vettore in posizione 0 ed ottengo sempre lo stesso errore di cast, se può essere utile inserisco anche il codice della classe auto presente nel package "packagea":

    codice:
    public class Auto {
        private String modello,marca,carburante,colore,nporte,anno,cilindrata,km;
            
            public Auto(){}
    	
    	public String getModello() {
    		return modello;
    	}
    
    	public void setModello(String modello) {
    		this.modello = modello;
    	}
    
    	public String getMarca() {
    		return marca;
    	}
    
    	public void setMarca(String marca) {
    		this.marca = marca;
    	}
    
    	public String getCarburante() {
    		return carburante;
    	}
    
    	public void setCarburante(String carburante) {
    		this.carburante = carburante;
    	}
    
    	public String getColore() {
    		return colore;
    	}
    
    	public void setColore(String colore) {
    		this.colore = colore;
    	}
    
    	
             public void setNporte(String nporte) {
    		this.nporte= nporte;
    	}
    	
    	public String getNporte(){
    		return nporte;
    	}
             public void setCilindrata(String cilindrata) {
    		this.cilindrata= cilindrata;
    	}
    	
    	public String getCilindrata(){
    		return cilindrata;
                    
    	} public void setKm(String km) {
    		this.km= km;
    	}
    	
    	public String getKm(){
    		return km;
    	}
    }

  6. #6
    Beh forse dirò una cavolata...

    Nella classe Auto dire che in oggetto è uguale a un altro equivale a dire in sostanza che tutti i campi devono coincidere. Non è che forse non si può fare l'operazione perché i campi sono private? Prova a metterli public

  7. #7
    L'unica cosa che puoi fare, i campi dichiarati privati non c'entrano nulla, e farci vedere il codice (servlet) in cui popoli quel vettore.
    L'errore dato è un casting errato, quindi i contenuto della vettore non matcha con il tipo con cui stai facendo il cast.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    32
    ecco la servlet:

    codice:
    import java.io.*;
    import java.sql.*;
    import java.util.Vector;
    import javax.sql.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    
    public class Vista extends HttpServlet {
    
    public void doGet(HttpServletRequest request,
    HttpServletResponse response) throws
    ServletException, IOException {
    
        
        String marca;
        Auto auto;
        Vector v = new Vector();
       
        marca = request.getParameter("marca");
        
        
       //CREA LA CONNESSIONE E INSERISCE I DATI NEL DB
                    ConnectionDB con = new ConnectionDB("select * from auto where marca='"+marca+"'");
                    ResultSet rs = con.getRs();
                    try{
                    rs.next();
                    }catch(Exception e){}
                   
                    if(rs != null){
                        
                        try{
                        do{
                            auto = new Auto();
                            auto.setId(rs.getString("id"));
                            auto.setFoto(rs.getString("foto"));
                            auto.setMarca(rs.getString("marca"));
                            auto.setModello(rs.getString("modello"));
                            auto.setCarburante(rs.getString("carburante"));
                            auto.setCilindrata(rs.getString("cilindrata"));
                            auto.setColore(rs.getString("colore"));
                            auto.setKm(rs.getString("km"));
                            auto.setNporte(rs.getString("n_porte"));
                            auto.setAnno(rs.getString("anno"));
                            v.add(auto);
                          
                        }while(rs.next() == true);
                        
                        request.setAttribute("auto", v);
                        request.setAttribute("marca", marca);
                        
                        }catch(Exception e){}
                    }
                    
                    con.closeConnection();
                        
                    
        
        
        
        
        
        
        // RESTITUZIONE ALLA JSP
            RequestDispatcher rd = request.getRequestDispatcher("vista.jsp");
            rd.forward(request, response);
        }
        
       
    
    
    
    }

  9. #9
    Il codice sembra corretto, l'unica cosa che si nota è che manca l'import della classe Auto (e la dichiarazione del package della servlet). Riporta anche tutto lo stacktrace dell'eccezione.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    32
    Hai proprio ragione avevo dimenticato l'import della classe auto che essendo presente anche nel package di default non mi dava errore in netbeans. Grazie a tutti per la pazienza. Un saluto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.