JSF - Tag personalizzato
JSF fornisce allo sviluppatore una potente capacità di definire i propri tag personalizzati, che possono essere utilizzati per il rendering di contenuti personalizzati.
La definizione di un tag personalizzato in JSF è un processo in tre fasi.
Passo | Descrizione |
---|---|
1a | Crea un file xhtml e definisci i contenuti in esso utilizzando ui:composition etichetta |
1b | Crea un descrittore della libreria di tag (file .taglib.xml) e dichiara il tag personalizzato sopra in esso. |
1c | Registra il tag libray descrittore in web.xml |
Passaggio 1a: definizione del contenuto del tag personalizzato: buttonPanel.xhtml
<h:body>
<ui:composition>
<h:commandButton type = "submit" value = "#{okLabel}" />
<h:commandButton type = "reset" value = "#{cancelLabel}" />
</ui:composition>
</h:body>
Passaggio 1b: definire una libreria di tag: tutorialspoint.taglib.xml
Come cita il nome, una libreria di tag è una libreria di tag. La tabella seguente descrive gli attributi importanti di una libreria di tag.
S.No | Nodo e descrizione |
---|---|
1 | facelet-taglib Contiene tutti i tag. |
2 | namespace Spazio dei nomi della libreria di tag e dovrebbe essere univoco. |
3 | tag Contiene un singolo tag |
4 | tag-name Nome del tag |
5 | source Implementazione dei tag |
<facelet-taglib>
<namespace>http://tutorialspoint.com/facelets</namespace>
<tag>
<tag-name>buttonPanel</tag-name>
<source>com/tutorialspoint/buttonPanel.xhtml</source>
</tag>
</facelet-taglib>
Passaggio 1c: registra la libreria di tag: web.xml
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/tutorialspoint.taglib.xml</param-value>
</context-param>
L'utilizzo di un tag personalizzato in JSF è un processo in due fasi.
Passo | Descrizione |
---|---|
2a | Crea un file xhtml e usa lo spazio dei nomi della libreria di tag personalizzati |
2b | Utilizza il tag personalizzato come normali tag JSF |
Passaggio 2a: utilizza lo spazio dei nomi personalizzato: home.xhtml
<html xmlns = "http://www.w3.org/1999/xhtml"
xmlns:h = "http://java.sun.com/jsf/html"
xmlns:ui = "http://java.sun.com/jsf/facelets">
xmlns:tp = "http://tutorialspoint.com/facelets">
Passaggio 2b: utilizza il tag personalizzato: home.xhtml
<h:body>
<tp:buttonPanel okLabel = "Ok" cancelLabel = "Cancel" />
</h:body>
Applicazione di esempio
Creiamo un'applicazione JSF di prova per testare i tag del modello in JSF.
Passo | Descrizione |
---|---|
1 | Creare un progetto con un nome helloworld sotto un pacchetto com.tutorialspoint.test come spiegato nel capitolo JSF - Prima applicazione . |
2 | Crea la cartella com nella directory WEB-INF . |
3 | Crea la cartella tutorialspoint in WEB-INF> directory com . |
4 | Crea il file buttonPanel.xhtml in WEB-INF> com> cartella tutorialspoint . Modificalo come spiegato di seguito. |
5 | Crea il file tutorialspoint.taglib.xml nella cartella WEB-INF . Modificalo come spiegato di seguito. |
6 | Modificare il file web.xml nella cartella WEB-INF come spiegato di seguito. |
7 | Modifica home.xhtml come spiegato di seguito. Mantieni invariato il resto dei file. |
8 | Compilare ed eseguire l'applicazione per assicurarsi che la logica aziendale funzioni secondo i requisiti. |
9 | Infine, crea l'applicazione sotto forma di file war e distribuiscila in Apache Tomcat Webserver. |
10 | Avvia la tua applicazione web utilizzando l'URL appropriato come spiegato di seguito nell'ultimo passaggio. |
buttonPanel.xhtml
<?xml version = "1.0" encoding = "UTF-8"?>
<!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"
xmlns:h = "http://java.sun.com/jsf/html"
xmlns:ui = "http://java.sun.com/jsf/facelets">
<h:body>
<ui:composition>
<h:commandButton type = "submit" value = "#{okLabel}" />
<h:commandButton type = "reset" value = "#{cancelLabel}" />
</ui:composition>
</h:body>
</html>
tutorialspoint.taglib.xml
<?xml version = "1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://tutorialspoint.com/facelets</namespace>
<tag>
<tag-name>buttonPanel</tag-name>
<source>com/tutorialspoint/buttonPanel.xhtml</source>
</tag>
</facelet-taglib>
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/tutorialspoint.taglib.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-app>
home.xhtml
<?xml version = "1.0" encoding = "UTF-8"?>
<!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"
xmlns:h = "http://java.sun.com/jsf/html"
xmlns:ui = "http://java.sun.com/jsf/facelets"
xmlns:tp = "http://tutorialspoint.com/facelets">
<h:head>
<title>JSF tutorial</title>
</h:head>
<h:body>
<h1>Custom Tags Example</h1>
<tp:buttonPanel okLabel = "Ok" cancelLabel = "Cancel" />
</h:body>
</html>
Una volta che sei pronto con tutte le modifiche apportate, compiliamo ed eseguiamo l'applicazione come abbiamo fatto nel capitolo JSF - Prima applicazione. Se tutto va bene con la tua applicazione, questo produrrà il seguente risultato.