
Originariamente inviata da
zipale99
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.

Originariamente inviata da
zipale99
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.