Visualizzazione dei risultati da 1 a 10 su 11

Hybrid View

  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da zipale99 Visualizza il messaggio
    Ecco l'esempio che ti dicevo, qua per ogni riga mettevo un bottone in cui una volta cliccato chiamava il controller
    e gli passava come parametr l'id del libro da acquistare.

    No, infatti, non è quello il modo procedere. Immagino che "Catalogo.java" sia il tuo bean... in questo caso stavi addirittura mescolando tutto assieme: logica di presentazione, logica di business e modello dei dati.

    Il bean (modello dei dati) dovrebbe essere solamente un contenitore di dati. I dati glieli deve fornire il controller (la logica di business = servlet)
    La servlet deve fare la logica di business (il lavoro sporco): interrograre il DB, creare i beans per contenere i dati, mettere questi beans a disposizione della view e passare la palla a quest'ultima.
    La view deve solo occuparsi di prendere i dati che gli sono stati forniti e visualizzarli.

    Questo è il pattern MVC. Più avanti ti posto una bozza molto sintetica dell'intera struttura.


    Quote Originariamente inviata da zipale99 Visualizza il messaggio
    Comunque ora mi rivedo bene il programma del corso ma sono sicuro al 100% che le jstl non c'è le hanno spiegato, ecco altra cosa, ormai leggo e sento in giro che praticamente ovunque si utilizzano framework, non capisco perchè nelle università non vengano spiegati...

    Da quest'anno hanno iniziato solo ad accennare dell'esistenza di Spring, peccato perchè immagino poi che nelle aziende uno si troverà in difficoltà a non consocere certe cose.. Vorrà dire che ci si metterà da autodidatta!

    Purtroppo conosco la situazione delle università italiane. Ci si deve "adattare"...


    Un abbozzo della struttura MVC di quello che stai facendo: se dobbiamo permettere all'utente di visualizzare un elenco di libri (e, quindi, successivamente poter selezionare un libro), allora si vedono questi 3 elementi:

    1) Un bean "Libro" (Model), che serve a contenere i dati del libro.
    2) Una Servlet (Controller), che effettua l'interrogazione sul DB per reperire tutti i libri, crea una serie di istanze del bean Libro (una per ciascun libro nel DB) e la fornisce ad una JSP per la visualizzazione
    3) Una JSP (View) che visualizza il risultato dell'elaborazione


    Libro.java

    codice:
    public class Libro {
       private int idLibro;   // Suppongo che l'ID sia un intero
       private String titolo;
       private String autore;
    
       public int getIdLibro() { return idLibro; }
       public String getTitolo() { return titolo; }
       public String getAutore() { return autore; }
    
       public void setIdLibro(int idLibro) { this.idLibro = idLibro; }
       public void setTitolo(String titolo) { this.titolo = titolo; }
       public void setAutore(String autore) { this.autore = autore; }
    }

    La servlet (metto solo il metodo doGet):

    codice:
    public class GestioneLibri extends HttpServlet {
       ...
       @Override
       protected void doGet(HttpServletRequest request,
                            HttpServletResponse response) throws ServletException, IOException {
    
          // Dico che la response sarà un documento HTML
          response.setContentType("text/html");
    
          // Recupero dal DB l'elenco dei libri
          List<Libro> listaLibri = recuperaLibriDaDb();
    
          // Inserisco l'elenco dei libri in request
          request.setAttribute("elencoLibri", listaLibri);
    
          // Passo la palla alla view (la pagina "listaLibri.jsp")
          request.getRequestDispatcher("listaLibri.jsp").forward(request, response);
       }
       ...
       private List<Libro> recuperaLibriDaDb() {
          List<Libro> ret = new ArrayList<Libro>();
    
          Statement stmt = null;
          ResultSet rs = null;
          try {
             // Creo lo statement dalla connessione (che sarà fatta altrove)
             stmt = con.createStatement("SELECT * FROM Libri");
    
             // Eseguo la query sul DB
             rs = stmt.executeQuery();
    
             // Scorro i risultati
             while( rs.next() ) {
                // Per ciascun record, creo un bean "Libro"
                Libro libro = new Libro();
    
                // Setto i valori del bean
                libro.setIdLibro( rs.getInt(1) );   // Suppongo che l'ID sia il primo campo
                libro.setTitolo( rs.getString(2) );   // Suppongo che il titolo sia il secondo campo
                libro.setAutore( rs.getString(3) );   // Suppongo che l'autore sia il terzo campo
    
                // Aggiungo alla lista di libri che restituirò
                ret.add( libro );
             }
          } catch (Exception e) {
             e.printStackTrace();
          } finally {
             if (rs != null) {
                try { rs.close(); } catch (Exception e) { }
             }
             if (stmt != null) {
                try { stmt.close(); } catch (Exception e) { }
             }
          }
    
          return ret;
       }
    }

    La pagina JSP (listaLibri.jsp):

    codice:
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
       <head>
          <title>Elenco dei libri</title>
       </head>
       <body>
          <h1>Elenco dei libri</h1>
          <ul>
          <c:forEach items="${elencoLibri}" var="libro">
             <li><a href="<c:url value="/visDettaglio?idLibro=${libro.idLibro}" />">${libro.titolo} - ${libro.autore}</a></li>
          </c:forEach>
          </ul>
       </body>
    </html>

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    10
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    No, infatti, non è quello il modo procedere. Immagino che "Catalogo.java" sia il tuo bean... in questo caso stavi addirittura mescolando tutto assieme: logica di presentazione, logica di business e modello dei dati.

    Il bean (modello dei dati) dovrebbe essere solamente un contenitore di dati. I dati glieli deve fornire il controller (la logica di business = servlet)
    La servlet deve fare la logica di business (il lavoro sporco): interrograre il DB, creare i beans per contenere i dati, mettere questi beans a disposizione della view e passare la palla a quest'ultima.
    La view deve solo occuparsi di prendere i dati che gli sono stati forniti e visualizzarli.

    Questo è il pattern MVC. Più avanti ti posto una bozza molto sintetica dell'intera struttura.
    Ciao, grazie ancora per tutte le preziose informazioni e il lavoro che stai facendo per me.
    Ora ho impostato il tutto come mi hai fatto vedere e ho così eliminato il bean catalogo, lasciano solo il bean libro. Il tutto ha gia un aspetto molto più pulito.
    Scusa se ti rompo ancora ma penso proprio solo più di avere un ultimissimo dubbio dovuto a quello che ho studiato sulle slides del mio corso, in particolare questa immagine:


    mvc-uni.jpg

    Fa vedere chiaramente che la connessione e il recupero dati dal database, avviene solo nella classe del bean!
    Dici che è un errore farlo fare alla servlet?

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.