Tecnologie Web: Parte 6f [Martedì, 16 Maggio 2006] |
---|
Home / Teaching |
Un java bean è un oggetto prodotto da una classe molto generica che rispecchi due semplici proprietà:
I java bean non sono definiti dalle specifiche JSP nè il loro uso è necessariamente limitato allo sviluppo di applicazioni WEB. Di certo JSP fornisce strumenti per accedere facilemente a un oggetto java bean. Vediamoli attraverso un esempio. Ecco un java bean che memorizza il nome ed il cognome di un utente.
package dati; import java.io.*; public class DatiUtente implements Serializable { private static final long serialVersionUID = -4494204860444161325L; private String nome; private String cognome; public DatiUtente() { } public void setNome(String valoreNome) { this.nome=valoreNome; } public void setCognome(String valoreCognome) { this.cognome=valoreCognome; } public String getNome() { return this.nome; } public String getCognome() { return this.cognome; } }
Ecco una banale pagina JSP che utilizza il bean. La novità stà nei tag di azione jsp <jsp: /> che non avevamo mai visto. Questi tag permettono varie azioni standard (include, forward, etc.) tra le quali un set di azioni per l'azione su di java beans. jsp:useBean serve e creare nel contesto prescelto (di default Page) l'oggetto bean indicato. jsp:getProperty e jsp:setProperty modificano le proprietà del bean.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Utilizzo di un bean per i dati dell'utente</title> </head> <body> <jsp:useBean id="beanUtente" class="dati.DatiUtente" /> <jsp:setProperty name="beanUtente" property="nome" value="Roberto" /> <jsp:setProperty name="beanUtente" property="cognome" value="Sassi" /> <h3>Benvenuto!</h3> <p>Salve, <b> <jsp:getProperty name="beanUtente" property="nome" /> <jsp:getProperty name="beanUtente" property="cognome" /> </b> il tuo nome è stato inserito in un Java Bean!.</p> </body> </html>
Da JSP 2.0 in avanti, si preferisce utilizzare il linguaggio EL per accedere alle proprietà dei beans. Il codice sopra, potrebbe essere riscritto:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Utilizzo di un bean per i dati dell'utente</title> </head> <body> <jsp:useBean id="beanUtente" class="dati.DatiUtente" /> <c:set target="${beanUtente}" property="nome" value="Roberto" /> <c:set target="${beanUtente}" property="cognome" value="Sassi" /> <h3>Benvenuto!</h3> <p>Salve, <b>${beanUtente.nome} ${beanUtente.cognome}</b> il tuo nome è stato inserito in un Java Bean!.</p> </body> </html>
Vediamo come modificare la pagina JSP ElaboraSelezioni.jsp utilizzata durante la scorsa esercitazione.
Prima possibilità:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Checkbox multipli</title> </head> <body> <h3>L'elenco dei linguaggi di programmazione che conosci è:</h3> <c:forEach items="${paramValues.linguaggioConosciuto}" var="questoLinguaggio"> <c:if test="${questoLinguaggio=='HTML'}" > HTML? non è un linguaggio di programmazione ma di markup! </c:if> <c:if test="${questoLinguaggio!='HTML'}" > ${questoLinguaggio} </c:if> <br /> </c:forEach> </body> </html>
Seconda possibilità:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Checkbox multipli</title> </head> <body> <h3>L'elenco dei linguaggi di programmazione che conosci è:</h3> <c:forEach items="${paramValues.linguaggioConosciuto}" var="questoLinguaggio"> <c:choose> <c:when test="${questoLinguaggio=='HTML'}"> HTML? non è un linguaggio di programmazione ma di markup! </c:when> <c:otherwise> ${questoLinguaggio} </c:otherwise> </c:choose> <br /> </c:forEach> </body> </html>
Questo esempio è contenuto nelle dispense e riportato qui solo per facilitare la lettura. L'esempio è preso dal capitolo 5 del libro di David Geary "Core JSTL: Mastering the JSP Standard Tag Library" (Prentice Hall, 2003) e disponibile all'indirizzo http://www.theserverside.com/tt/articles/content/CoreJSTL/article.html . Per renderlo utilizzabile con JSP 2.0 e compatibile con la nuova veste grafica del sito Amazon.com è stato adattato (quindi c'è qualche modifica con quello nelle dispense.
Il file BookSelection.jsp. Andate all'indirizzo http://jsp.dti.unimi.it/rsassi/BookSelection.jsp per vederlo funzionare.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Book Selection</title> </head> <body> <%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%> <font size='5'> Select a book: </font><br /> <%-- Create URLs for each book with a page-relative path to show_book.jsp and a request parameter named bookUrl whose value represents the book's URL on Amazon.com. Those URLs are stored in page-scoped variables that are used to create HTML links below --%> <c:url var='ApacheStruts' value='show_book.jsp'> <c:param name='bookUrl' value='http://www.amazon.com/gp/product/1930110502/sr=8-1/qid=1147858062/ref=pd_bbs_1/104-1064078-9261503?%5Fencoding=UTF8' /> </c:url> <c:url var='PracticalJSTL' value='show_book.jsp'> <c:param name='bookUrl' value='http://www.amazon.com/gp/product/0126567557/qid=1147858345/sr=11-1/ref=sr_11_1/104-1064078-9261503?n=283155' /> </c:url> <c:url var='CoreJSTL' value='show_book.jsp'> <c:param name='bookUrl' value='http://www.amazon.com/gp/product/0131001531/qid=1147858406/sr=11-1/ref=sr_11_1/104-1064078-9261503?n=283155' /> </c:url> <c:url var='JSTLAction' value='show_book.jsp'> <c:param name='bookUrl' value='http://www.amazon.com/gp/product/1930110529/qid=1147858452/sr=11-1/ref=sr_11_1/104-1064078-9261503?n=283155' /> </c:url> <%-- Create HTML links for each book using the URLs stored in page-scoped variables that were created above by <c:url> --%> <a href='<c:out value="${ApacheStruts}"/>'> Struts in Action: Building Web Applications with the Leading Java Framework </a><br /> <a href='<c:out value="${PracticalJSTL}"/>'> JSTL : Practical Guide for JSP Programmers </a><br /> <a href='<c:out value="${CoreJSTL}"/>'> Core JSTL: Mastering the JSP Standard Tag Library </a><br /> <a href='<c:out value="${JSTLAction}"/>'> JSTL in Action </a><br /> </body> </html>
ed il file show_book.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Book Information</title> </head> <body> <%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%> <%-- Declare the Jakarta Strings tag library --%> <%@ taglib uri='WEB-INF/taglibs-string.tld' prefix='str'%> <%-- Import the page from Amazon.com using the bookUrl request parameter --%> <c:import var='book' url='${param.bookUrl}' /> <%-- Store today's date and time in page scope --%> <jsp:useBean id='now' class='java.util.Date' /> <table> <tr> <td>Book:</td> <td><i> <%-- Show the book title --%> <%-- Dal momento che utilizziamo c:out per stampare sullo stream della richiesta, i caratteri "proibiti" (come <, >, &, etc.) per HTML vengono convertiti nei caratteri speciali equivalenti (<, >, &). Le stringhe open e close devono tenere conto di questo in quanto la libreria di tag string lavora sull'output della funzione di stampa annidata. --%> <str:nestedString open='<title>Amazon.com: ' close=': Books: '> <c:out value='${book}' /> </str:nestedString> </i></td> </tr> <tr> <td>Rank:</td> <td><i> <%-- Show the book rank --%> <str:nestedString open="Sales Rank:</b> #" close=' in Books (See '> <c:out value='${book}' /> </str:nestedString> </i></td> </tr> <tr> <td>Average Review:</td> <td><i> <%-- Show the average review --%> <str:replace replace='-' with='.'> <str:nestedString open='stars-' close='.gif'> <c:out value='${book}' /> </str:nestedString> stars </str:replace> </i></td> </tr> <tr> <td>Date and Time:</td> <td><i> <c:out value='${now}' /> </i></td> </tr> </table> </body> </html>