Jacopo Giudici [email_address]
Scopo della presentazione <ul><li>Introdurre il concetto di tag personalizzato; </li></ul><ul><li>Creare una prima serie d...
Tag personalizzato <ul><li>Un tag personalizzato è un  sistema  formato da </li></ul><ul><li>Una classe java che estenda u...
Vantaggi <ul><li>Permettono di semplificare la scrittura del codice JSP </li></ul><ul><li>Vengono inserite nelle pagine JS...
Svantaggi <ul><li>E’  NECESSARIO  stabilire a priori di quali tag necessita un progetto (pena la troppa astrazione dello s...
La classe del Tag personalizzato <ul><li>E’ un  frammento di codice Java  inseribile in una pagina Jsp tramite del codice ...
Tag senza corpo (I) <ul><li>Sono tag HTML paragonabili ai tag HTML: </li></ul><ul><li><img />, <br />, <hr /> </li></ul><u...
Tag senza corpo (II) <ul><li>Estendono la classe  TagSupport , che contiene i seguenti metodi  principali  (dalle specific...
Metodi da implementare <ul><li>Per personalizzare la nostra classe è possibile implementare uno dei metodi visti, sapendo ...
Esempio di classe per tag senza corpo <ul><li>Esempio di classe TagSupport: </li></ul><ul><li>package  taglib; </li></ul><...
Attributi dichiarativi <ul><li>Gli attributi vengono gestiti tramite i metodi setValue e getValue della classe Tag di impl...
Attributi dichiarativi <ul><li>Per ogni attributo, così come per le specifiche di JavaBean, devono esistere un metodo set ...
Esempio di recupero attributi <ul><li>package  taglib; </li></ul><ul><li>import  java.text.SimpleDateFormat; </li></ul><ul...
Esempio di recupero attributi <ul><li>public   void  setFormato(String formato) { </li></ul><ul><li>this . formato  = form...
Taglib descriptor <ul><li>E’ un file xml contenente la descrizione di utilizzo della classe tag avente estensione  .tld ; ...
Principali tag XML nel file taglib: root <ul><li><taglib>:  è la root del documento </li></ul><ul><li><tlib-version>:  la ...
Principali tag XML nel file taglib: <tag> <ul><li><name>:  il nome del tag da utilizzare nella jsp </li></ul><ul><li><tag-...
Principali tag XML nel file taglib: <attribute> <ul><li><name>:  il nome dell’attributo. Deve essere uguale nella dichiara...
Descrittore di tag: esempio <ul><li><? xml  version = &quot;1.0&quot;  encoding = &quot;ISO-8859-1&quot;  ?> </li></ul><ul...
Utilizzo dei tag nelle JSP
Esempio di JSP con tag personalizzati (I) <ul><li><%@  taglib  uri = &quot;/WEB-INF/taglib001.tld&quot;  prefix = &quot;t1...
Esempio di JSP con tag personalizzati (II) <ul><li><%@  taglib  uri = &quot;/WEB-INF/taglib001.tld&quot;  prefix = &quot;t...
Tag con corpo <ul><li>Rispetto ai tag senza corpo, hanno la possibilità di gestire il testo tra l’apertura e la chiusura d...
Altri metodi da implementare <ul><li>La classe BodyTagSupport possiede questi particolari metodi, oltre a quelli della cla...
Esempio di tag con corpo <ul><li>package taglib; </li></ul><ul><li>import java.io.IOException; </li></ul><ul><li>import ja...
Descrittore del tag con corpo
Upcoming SlideShare
Loading in...5
×

JSP Tag Library

2,189

Published on

Librerie di tag per JSP

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,189
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
35
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

JSP Tag Library

  1. 1. Jacopo Giudici [email_address]
  2. 2. Scopo della presentazione <ul><li>Introdurre il concetto di tag personalizzato; </li></ul><ul><li>Creare una prima serie di tag in Tomcat; </li></ul><ul><li>Utilizzare Eclipse per fare il debug dell’applicazione; </li></ul><ul><li>Creare tag personalizzati connessi con un database tramite JNDI. </li></ul>
  3. 3. Tag personalizzato <ul><li>Un tag personalizzato è un sistema formato da </li></ul><ul><li>Una classe java che estenda una tra le seguenti classi: </li></ul><ul><li>javax.servlet.jsp.tagext.TagSupport; </li></ul><ul><li>javax.servlet.jsp.tagext.BodyTagSupport; </li></ul><ul><li>o che implementi l’interfaccia </li></ul><ul><li> javax.servlet.jsp.tagext.Tag; </li></ul><ul><li>Un file XML descrittore dell’utilizzo di questa classe Java; </li></ul><ul><li>Una pagina Jsp che contenga un riferimento alla classe. </li></ul>
  4. 4. Vantaggi <ul><li>Permettono di semplificare la scrittura del codice JSP </li></ul><ul><li>Vengono inserite nelle pagine JSP con una sintassi simile all’HTML </li></ul><ul><li>Forniscono un metodo per costruire del codice riutilizzabile (anche tra più progetti) </li></ul><ul><li>Ne esistono svariate librerie free in rete </li></ul>
  5. 5. Svantaggi <ul><li>E’ NECESSARIO stabilire a priori di quali tag necessita un progetto (pena la troppa astrazione dello stesso) </li></ul><ul><li>Sono difficili da scrivere perchè: </li></ul><ul><ul><li>Un programmatore sarà sempre portato a scrivere “un po’ di codice per migliorare la classe” </li></ul></ul><ul><ul><li>Un NON programmatore non vorrà mai utilizzare “qualcosa che non sa da dove arrivi” </li></ul></ul>
  6. 6. La classe del Tag personalizzato <ul><li>E’ un frammento di codice Java inseribile in una pagina Jsp tramite del codice pseudo-HTML; </li></ul><ul><li>Deve contenere alcuni metodi particolari che ne controllino il flusso di esecuzione, </li></ul><ul><li>Ci sono due tipi di classi di tag: i gestori di tag con corpo e i gestori di tag senza corpo </li></ul><ul><li>Sono conformi allo standars JavaBean POJO (Plain Old Java Object): </li></ul><ul><ul><li>Dati privati </li></ul></ul><ul><ul><li>Metodi set e get pubblici per l’accesso ai dati </li></ul></ul>
  7. 7. Tag senza corpo (I) <ul><li>Sono tag HTML paragonabili ai tag HTML: </li></ul><ul><li><img />, <br />, <hr /> </li></ul><ul><li>che non contengono testo apertura e chiusura. </li></ul><ul><li>Possono gestire attributi dichiarativi, ad es: </li></ul><ul><li>< colore:sfondo colore=“RED” /> </li></ul>Nome del tag Attributo dichiarativo
  8. 8. Tag senza corpo (II) <ul><li>Estendono la classe TagSupport , che contiene i seguenti metodi principali (dalle specifiche J2EE): </li></ul><ul><li>int doAfterBody ()           Default processing for a body   </li></ul><ul><li>int doEndTag ()           Default processing of the end tag returning EVAL_PAGE.   </li></ul><ul><li>int doStartTag ()           Default processing of the start tag, returning SKIP_BODY. </li></ul><ul><li>java.lang.Object getValue (java.lang.String k)           Get a the value associated with a key.   </li></ul><ul><li>java.util.Enumeration getValues ()           Enumerate the values kept by this tag handler.   </li></ul><ul><li>void setValue (java.lang.String k, java.lang.Object o)           Associate a value with a String key. </li></ul>
  9. 9. Metodi da implementare <ul><li>Per personalizzare la nostra classe è possibile implementare uno dei metodi visti, sapendo che: </li></ul><ul><li>int doAfterBody () </li></ul><ul><li>È il metodo eseguito dopo la lettura del corpo del tag ( tutto deriva comunque dall’interfaccia Tag !!! ). </li></ul><ul><li>int doEndTag () </li></ul><ul><li>È il metodo eseguito al termine degli altri metodi e, generalmente, ritorna il valore int EVAL_PAGE. </li></ul><ul><li>int doStartTag () È il metodo eseguito prima degli altri metodi e ritorna il valore int SKIP_BODY. </li></ul><ul><li>In caso di tag senza corpo questo è, generalmente, il metodo principale da implementare. </li></ul>
  10. 10. Esempio di classe per tag senza corpo <ul><li>Esempio di classe TagSupport: </li></ul><ul><li>package taglib; </li></ul><ul><li>import javax.servlet.jsp.JspException; </li></ul><ul><li>import javax.servlet.jsp.JspTagException; </li></ul><ul><li>import javax.servlet.jsp.tagext.TagSupport; </li></ul><ul><li>public class DateTag extends TagSupport { </li></ul><ul><li>public int doStartTag() throws JspException { </li></ul><ul><li>try { </li></ul><ul><li>pageContext.getOut().print( new java.util.Date()); </li></ul><ul><li>} catch (Exception ex) { </li></ul><ul><li>throw new JspTagException( &quot;DateTag: &quot; + </li></ul><ul><li>ex.getMessage()); </li></ul><ul><li>} </li></ul><ul><li>return SKIP_BODY; </li></ul><ul><li>} </li></ul><ul><li>public int doEndTag() { </li></ul><ul><li>return EVAL_PAGE; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  11. 11. Attributi dichiarativi <ul><li>Gli attributi vengono gestiti tramite i metodi setValue e getValue della classe Tag di implementazione tramite i metodi visti in precedenza: </li></ul><ul><li>java.lang.Object getValue (java.lang.String k)           Get a the value associated with a key.    </li></ul><ul><li>void setValue (java.lang.String k, java.lang.Object o)           Associate a value with a String key. </li></ul><ul><li>java.util.Enumeration getValues ()           Enumerate the values kept by this tag handler. </li></ul>
  12. 12. Attributi dichiarativi <ul><li>Per ogni attributo, così come per le specifiche di JavaBean, devono esistere un metodo set per recuperare il valore del tag dalla pagina JSP e un metodo get se necessario. </li></ul><ul><li>I metodi get e set devono seguire il seguente formato di esempio: </li></ul><ul><li>T attr; </li></ul><ul><li>T getAttr(); </li></ul><ul><li>void setAttr (T attr); </li></ul>
  13. 13. Esempio di recupero attributi <ul><li>package taglib; </li></ul><ul><li>import java.text.SimpleDateFormat; </li></ul><ul><li>import javax.servlet.jsp.JspException; </li></ul><ul><li>import javax.servlet.jsp.JspTagException; </li></ul><ul><li>import javax.servlet.jsp.tagext.TagSupport; </li></ul><ul><li>public class DataFormattataTag extends TagSupport { </li></ul><ul><li>private String formato ; </li></ul><ul><li>public String getFormato() { </li></ul><ul><li>return formato ; </li></ul><ul><li>} </li></ul>
  14. 14. Esempio di recupero attributi <ul><li>public void setFormato(String formato) { </li></ul><ul><li>this . formato = formato; </li></ul><ul><li>} </li></ul><ul><li>public int doStartTag() throws JspException { </li></ul><ul><li>try { </li></ul><ul><li>SimpleDateFormat formatter = new SimpleDateFormat( formato ); </li></ul><ul><li>pageContext.getOut().print(formatter.format( new java.util.Date())); </li></ul><ul><li>} catch (Exception ex) { </li></ul><ul><li>throw new JspTagException( &quot;DateTag: &quot; + ex.getMessage()); </li></ul><ul><li>} </li></ul><ul><li>return SKIP_BODY; </li></ul><ul><li>} </li></ul><ul><li>public int doEndTag() { </li></ul><ul><li>return EVAL_PAGE; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  15. 15. Taglib descriptor <ul><li>E’ un file xml contenente la descrizione di utilizzo della classe tag avente estensione .tld ; </li></ul><ul><li>Segue le regole del DTD: </li></ul><ul><li>http :// java.sun.com/dtd/web-jsptaglibrary_1_2.dtd </li></ul><ul><li>Si trova nella cartella WEB-INF dell’applicazione Web; </li></ul><ul><li>Definisce il comportamento di più tag, per questo di chiama descrittore di libreria. </li></ul>
  16. 16. Principali tag XML nel file taglib: root <ul><li><taglib>: è la root del documento </li></ul><ul><li><tlib-version>: la versione delle specifiche taglib utilizzata </li></ul><ul><li><jsp-version>: la versione delle specifiche jsp utilizzata </li></ul><ul><li><short-name>: un nome descrittivo della libreria </li></ul><ul><li><tag>: inizia la descrizione del comportamento di una classe di tag personalizzata </li></ul>
  17. 17. Principali tag XML nel file taglib: <tag> <ul><li><name>: il nome del tag da utilizzare nella jsp </li></ul><ul><li><tag-class>: la classe che implementa questo tag </li></ul><ul><li><attribute>: descrizione di un attributo del tag che potrebbe essere presente nella dichiarazione nella pagina jsp </li></ul>
  18. 18. Principali tag XML nel file taglib: <attribute> <ul><li><name>: il nome dell’attributo. Deve essere uguale nella dichiarazione in JSP e nella classe implementativa. </li></ul><ul><li><required>: specifica se l’attributo è obbligatorio o meno </li></ul><ul><li><rtexprvalue>: specifica se l’attributo può derivare da un’espressione. In caso questo dato fosse true, l’espressione verrebbe calcolata prima di passarne il valore al metodo set della classe. </li></ul>
  19. 19. Descrittore di tag: esempio <ul><li><? xml version = &quot;1.0&quot; encoding = &quot;ISO-8859-1&quot; ?> </li></ul><ul><li><! DOCTYPE taglib </li></ul><ul><li>PUBLIC &quot;-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN&quot; </li></ul><ul><li>&quot;http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&quot; > </li></ul><ul><li>< taglib > </li></ul><ul><li>< tlib-version > 1.0 </ tlib-version > </li></ul><ul><li>< jsp-version > 1.2 </ jsp-version > </li></ul><ul><li>< short-name > TagLib001 </ short-name > </li></ul><ul><li>< tag > </li></ul><ul><li>< name > data </ name > </li></ul><ul><li>< tag-class > taglib.DateTag </ tag-class > </li></ul><ul><li></ tag > </li></ul><ul><li>< tag > </li></ul><ul><li>< name > dataFormattata </ name > </li></ul><ul><li>< tag-class > taglib.DataFormattataTag </ tag-class > </li></ul><ul><li>< attribute > </li></ul><ul><li>< name > formato </ name > </li></ul><ul><li>< required > true </ required > </li></ul><ul><li>< rtexprvalue > true </ rtexprvalue > </li></ul><ul><li></ attribute > </li></ul><ul><li></ tag > </li></ul><ul><li></ taglib > </li></ul>
  20. 20. Utilizzo dei tag nelle JSP
  21. 21. Esempio di JSP con tag personalizzati (I) <ul><li><%@ taglib uri = &quot;/WEB-INF/taglib001.tld&quot; prefix = &quot;t1&quot; %> </li></ul><ul><li>< html > </li></ul><ul><li>< head >< title > Prima Taglib </ title ></ head > </li></ul><ul><li>< body > </li></ul><ul><li>< t1:data /> </li></ul><ul><li></ body > </li></ul><ul><li></ html > </li></ul>
  22. 22. Esempio di JSP con tag personalizzati (II) <ul><li><%@ taglib uri = &quot;/WEB-INF/taglib001.tld&quot; prefix = &quot;t1&quot; %> </li></ul><ul><li>< html > </li></ul><ul><li>< head >< title > Prima Taglib </ title ></ head > </li></ul><ul><li>< body > </li></ul><ul><li><% if (request.getParameter( &quot;formato&quot; )== null ) { %> </li></ul><ul><li>< form action =&quot; <%= request.getRequestURI() %>&quot; method = &quot;POST&quot; > </li></ul><ul><li>Formato: < input type = &quot;text&quot; name = &quot;formato&quot; />< br /> </li></ul><ul><li>< input type = &quot;submit&quot; value = &quot;Vedi&quot; /> </li></ul><ul><li></ form > </li></ul><ul><li><% } else { %> </li></ul><ul><li>< t1:dataFormattata formato = &quot;dd/MM/yyyy“ /> </li></ul><ul><li><% } %> </li></ul><ul><li></ body > </li></ul><ul><li></ html > </li></ul>
  23. 23. Tag con corpo <ul><li>Rispetto ai tag senza corpo, hanno la possibilità di gestire il testo tra l’apertura e la chiusura del tag </li></ul><ul><li>Estendono la classe BodyTagSupport, che a sua volta estende TagSupport </li></ul><ul><li>Possono anch’essi gestire attributi dichiarativi nella stessa identica maniera dei tag senza corpo </li></ul><ul><li>Poichè le specifiche XHTML limitano il numero di caratteri inseribili in un attributo, è necessario ricorrere a questi tipi di tag per gestire alcuni processi </li></ul>
  24. 24. Altri metodi da implementare <ul><li>La classe BodyTagSupport possiede questi particolari metodi, oltre a quelli della classe TagSupport che estende: </li></ul><ul><li>void doInitBody () </li></ul><ul><li>Prepare for evaluation before the first body evaluation. </li></ul><ul><li>BodyContent getBodyContent () </li></ul><ul><li>Get current bodyContent.   </li></ul><ul><li>JspWriter getPreviousOut () Get surrounding out JspWriter.   </li></ul><ul><li>void setBodyContent ( BodyContent  b) </li></ul><ul><li>Prepare for evaluation of the body. </li></ul>
  25. 25. Esempio di tag con corpo <ul><li>package taglib; </li></ul><ul><li>import java.io.IOException; </li></ul><ul><li>import javax.servlet.jsp.JspTagException; </li></ul><ul><li>import javax.servlet.jsp.tagext.BodyContent; </li></ul><ul><li>import javax.servlet.jsp.tagext.BodyTagSupport; </li></ul><ul><li>public class BodyTag extends BodyTagSupport { </li></ul><ul><li>public int doAfterBody() throws JspTagException { </li></ul><ul><li>BodyContent bc = getBodyContent(); </li></ul><ul><li>String text = bc.getString(); </li></ul><ul><li>try { </li></ul><ul><li>bodyContent.clearBody(); </li></ul><ul><li>bodyContent.println(&quot;Corpo: &quot; + text); </li></ul><ul><li>bodyContent.writeOut(bodyContent.getEnclosingWriter()); </li></ul><ul><li>} catch (IOException e) { </li></ul><ul><li>// TODO Auto-generated catch block </li></ul><ul><li>e.printStackTrace(); </li></ul><ul><li>} </li></ul><ul><li>return SKIP_BODY; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  26. 26. Descrittore del tag con corpo
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×