English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
I tag personalizzati sono elementi del linguaggio JSP definiti dall'utente. Quando una pagina JSP contiene un tag personalizzato, viene trasformata in un servlet, e il tag viene trasformato in una chiamata al Le operazioni dell'oggetto chiamato tag handler, ossia quando il servlet esegue, il web container chiama queste operazioni.
L'estensione dei tag JSP ti permette di creare nuovi tag che possono essere inseriti direttamente in una pagina JSP. La specifica JSP 2.0 ha introdotto Simple Tag Handlers per scrivere questi tag personalizzati.
Puoi ereditare la classe SimpleTagSupport e sovrascrivere il metodo doTag() per sviluppare un tag personalizzato semplice.
Quindi, vogliamo creare un tag personalizzato chiamato <ex:Hello>, il formato del tag è come segue:
<ex:Hello />
Per creare un tag JSP personalizzato, devi prima creare la classe Java che gestisce il tag. Quindi, creiamo una classe HelloTag come segue:
package com.w3codebox; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport {}} public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!"); } }
Il codice seguente sovrascrive il metodo doTag(), che utilizza il metodo getJspContext() per ottenere l'oggetto JspContext corrente e passare "Hello Custom Tag!" all'oggetto JspWriter.
Compila i classi sopra, copialo nella directory CLASSPATH dell'ambiente variabile. Infine, crea la libreria di tag come segue: <Tomcat install directory>webapps\ROOT\WEB-INF\custom.tld.
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD</short-name> <tag> <name>Hello</name> <tag-class>com.w3codebox.HelloTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
Poi, possiamo utilizzare il tag Hello nel file JSP:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld" %> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello/> </body> </html>
Il risultato di esecuzione del programma sopra è come segue:
Hello Custom Tag!
Puoi includere il contenuto del messaggio nel tag come la libreria di tag standard. Se vogliamo includere il contenuto nel nostro tag personalizzato Hello, il formato è come segue:
<ex:Hello> This is message body </ex:Hello>
Possiamo modificare il file della classe del gestore del tag, il codice è come segue:
package com.w3codebox; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport {}} StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } }
Quindi, dobbiamo modificare il file TLD, come segue:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD with Body</short-name> <tag> <name>Hello</name> <tag-class>com.w3codebox.HelloTag</tag-class> <body-content>scriptless</body-content> </tag> </taglib>
Ora possiamo utilizzare il tag modificato nel JSP, come segue:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld" %> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello> This is message body </ex:Hello> </body> </html>
Il risultato di esecuzione del programma sopra è come segue:
This is message body
Puoi impostare vari attributi in un modo personalizzato, per ricevere attributi, la classe del tag personalizzato deve implementare il metodo setter, i metodi setter nel JavaBean sono come segue:
package com.w3codebox; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport {}} private String message; public void setMessage(String msg) { this.message = msg; } StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { if (message != null) { /* Usa il messaggio dall'attributo */ JspWriter out = getJspContext().getOut(); out.println(message); } else { /* Usa il messaggio dal corpo del contenuto */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } }
Il nome dell'attributo è "message", quindi il metodo setter è setMessage(). Ora aggiungiamo questo attributo all'elemento <attribute> del file TLD:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD with Body</short-name> <tag> <name>Hello</name> <tag-class>com.w3codebox.HelloTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>message</name> </attribute> </tag> </taglib>
Ora possiamo utilizzare l'attributo message nei file JSP, come segue:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld" %> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello message="This is custom tag" /> </body> </html>
Il risultato dell'esempio di dati sopra è:
This is custom tag
Puoi anche includere i seguenti attributi:
Attributo | Descrizione |
---|---|
name | Definisce il nome dell'attributo. Ogni attributo di un tag deve avere un nome univoco. |
required | Specifica se l'attributo è obbligatorio o opzionale. Se impostato su false è opzionale. |
rtexprvalue | Declara se l'attributo è valido durante l'esecuzione dell'espressione. |
type | Definisce il tipo di classe Java dell'attributo. Il valore predefinito è String |
description | informazioni descrittive |
fragment | Se è stato dichiarato questo attributo, il valore dell'attributo sarà considerato un JspFragment。 |
Ecco un esempio di attributi specificati:
..... <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute> .....
Se hai utilizzato due attributi, modifica il file TLD come segue:
..... <attribute> <name>attribute_name1</name> <required>false</required> <type>java.util.Boolean</type> <fragment>false</fragment> </attribute> <attribute> <name>attribute_name2</name> <required>true</required> <type>java.util.Date</type> </attribute> .....