Inhalt | Abbildung | Source | SCWCD | |||
|< | < | > | >| | Generated by CoCoDiL |
Describe the semantics of the Tag File model; describe the web application structure for tag files; write a tag file; and explain the constraints on the JSP content in the body of the tag. |
Es gibt seit JSP 2.0 ein Verfahren ohne Java-Kenntnisse eigene Tags für JSP zu entwickeln. Dem Tag werden keine Java Klassen zugeordnet, sondern direkt JSP Codefragmente.
Diese Codefragmente werden in sogenannten .tag Dateien abgelegt. Sind diese Tag-Dateien in XML Syntax geschrieben, so wird die Endung .tagx benutzt. TagDateien können wiederum aus Fragmenten von tag-Dateien zusammengesetzt sein. Solche Fragmente haben die Endung .tagf
Tag Dateien können entweder als jar-File gepackt, oder ungepackt abgelegt werden.
TagFiles ungepackt ablegen
Es wird innerhalb des WEB-INF Ordners ein Ordner tags angelegt. Die tag-Dateien werden einfach ungepackt in dieses Verzeichnis abgelegt.
Werden die TagFiles ungepackt verwendet, muss in der Taglib Direktive der JSP statt des Attributs uri das Attribut tagdir verwenden.
Man muss keinen TagFileDescriptor (tld Datei) anlegen, da dies der Container selber macht.
Tag Dateien gepackt ablegen
Wenn die Tag Dateien als jar-Files gespeichert werden, sollten diese innerhalb des Verzeichnisses /WEB-INF/LIB abgelegt werden. Das packen der Tag Dateien erleichtert das Deployment, erfordert aber einen zusätzlichen höheren Aufwand
Beispiel:
Vor dem Packen werden die oben genannten Tags folgendermassen abgelegt
Die Dateien im META-INF Verzeichnis sollten vor dem Deployment gepackt werden.
Die erhaltene Datei myTags.jar kann bei der Ausführung in das Verzeichnis WEB-INF/TAG
Es fehlt noch den Aufbau der tagLib Descriptor Datei:
Mit der tag Direktive und ihrem Attribut body-content wird die Art des Bodys des Tags festgelegt.
Folgende Werte kann das Attribut body-content annehmen
empty | Der Tag darf kein Body haben, ansonsten gibt es einen Syntaxfehler |
scriptless | Dies ist der Standard. Ein Body ist erlaubt, darf aber keine Skripts enthalten |
tagdependent | Hier werden bei Auswertung des Bodys die EL Ausdrücke oder die Aktionen nicht ausgewertet, sondern als reinen Text gewertet |
Innerhalb eines Tags kann man mit der Aktion
Hier ein Beispiel greet.tag:
So kann greet in einer Jsp aufgerufen werden:
Die Aktion
Die Aktion <jsp:doBody> hat folgende optionale Attribute
Attribut | Beschreibung |
scope | Der Scope der Variable. Standard ist page |
var | Name der Variable in der die Auswertung des Bodys geschrieben wird |
varReader | Ein Reader Objekt mit der man auf die Auswertung des Bodys zugreifen kann |
Mit der Direktive attribute werden von der aufrufenden Seite Attribute mit übergeben. Die Direktive attribute hat selbst folgende Attribute
name | Eindeutiger Name für das Attribut |
required | false falls Attribut optional ist |
fragment | true falls der Wert des Attributs nicht ausgewertet wird. So kann man auch JSP Elemente übergeben |
rtexprvalue | Kann der Wert des Attributs dynamisch berechnet werden. Falls true ist z.B ein EL Ausdruck erlaubt |
type | Laufzeittyp des Attributwerts. Standard ist String |
description | Beschreibung des Attributs |
Beispiel:
Eine weitere Möglichkeit der Ausgabe ist die Aktion <jsp:invoke>. Diese Aktion wertet ein Fragment aus
Beispiel:
Die Direktive variable, die nur innerhalb Tag Dateien erlaubt sind, ermöglicht dass die aufrufende Seite auf Variable zugreifen können, die innerhalb der Tag Dateien gesetzt werden.
Eine Direktive variable hat folgenden Attribute:
name-given | Definiert eine Variable die von der aufrufenden Seite verwendet werden kann |
name-from-attribute | Nur im Zusammenhang mit dem Attribut alias möglich. Es ist der Name eines Attributs das die aufrufende Seite verwendet, um den in der Tag-Datei gesetzten Wert auszulesen. In der Tag-Datei selber wird der gesetzte Wert an die in <alias> gebundene Variable weitergegeben. Das Attribut alias In diesem Attribut wird d |
alias | Dies ist der Name der Variable innerhalb des Tags dessen Wert der aufrufende Seite übergeben wird. Dieser Wert wird in die Variable kopiert, die im Attribut name-from-attibute spezifiziert ist. |
variable-class | Klassenname der Variable. Vorgabe String |
declare | gibt an ob die Variable deklariert ist oder nicht. Vorgabe true |
scope | Eine der Wert AT_END, AT_BEGIN oder NESTED, Vorgabe NESTED |
description | Beschreibung |
Die Attribute variable-class,declare,scope und description sind optional. Ansonsten gibt es 2 Formen der Verwendung der Direktive variable.
Das Attribut sope hat nichts mit den Sopes wie page,application usw. zu tun. Es difiniert die Sichtbarkeit der auszulesenden Variablen in der aufrufenden Seite. scope kann folgende Werte annehmen:
AT_BEGIN | Die Variable ist gleich nach dem StartTag sichtbar |
AT_END | Die Variable ist erst nach Abarbeitung des Tags sichtbar |
NESTED | Die Variable ist im TagBody sichtbar. Nach dem Tag nicht mehr |
Die meisten direktiven einer JSP Seite, sind auch in einer Tag Datei nutzbar. Nicht möglich in Tags ist die page Direktive, als Ersatz gibt es dafür die tag-Direktive
Direkive | Bedeutung |
taglib | wie bei JSP |
include | wie bei JSP, die includierten Dateien muessen der Syntax der Tag-Dateien entsprechen |
tag | Ersatz für die page-Direktive bei JSP |
attribute | Nur für Tags, handelt die Attributübergabe eines Tags |
variable | Nur für Tags, dient dazu Werte von innen (Bearbeitung des Tags) nach aussen (Aufrufende JSP Seite) zu geben. |
Ein Tag kann auf folgende impliziten Variablen zugreifen:
Object | Type |
request | javax.servlet.http.HttpServletRequest |
response | javax.servlet.http.HttpServletResponse |
out | javax.servlet.jsp.JspWriter |
session | javax.servlet.http.HttpSession |
application | javax.servlet.ServletContext |
config | javax.servlet.ServletConfig |
jspContext | javax.servlet.jsp.JspContext |
Beachte das es innerhalb von Tags kein Zugriff auf eine pageContext Variable gibt, sondern auf die allgemeinere jspContext Variable. Es gibt auch kein Zugriff auf das page und das exception Objekt.
Inhalt | Abbildung | Source | SCWCD | |||
|< | < | > | >| | Generated by CoCoDiL |