Inhalt Abbildung PDF Source SCWCD
 |<    <     >    >|  Generated by CoCoDiL

12.5 Das Tag File Model

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.

12.5.1 Tag Dateien

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

12.5.2 Tag Dateien in der Web Application Structure

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:

12.5.3 Aufbau der Tag Dateien

12.5.3.1 Zugriff auf Body und Attributübergabe

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

emptyDer Tag darf kein Body haben, ansonsten gibt es einen Syntaxfehler
scriptlessDies ist der Standard. Ein Body ist erlaubt, darf aber keine Skripts enthalten
tagdependentHier 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 veranlassen dass der Body des Tags von der aufrufenden Seite ausgewertet wird.

Hier ein Beispiel greet.tag:

So kann greet in einer Jsp aufgerufen werden:

Die Aktion ohne Attribut gibt den Body der aufrufenden Seite aus. Ansonsten wird der Body der aufrufenden Seite in die Variable var gespeichert. Die Ausgabe erfolgt erst bei expliziter Auswertung der Variable var. Ist der auszulesender Body gross, so kann man auch einen varReader benutzen.

Die Aktion <jsp:doBody> hat folgende optionale Attribute

AttributBeschreibung
scopeDer Scope der Variable. Standard ist page
varName der Variable in der die Auswertung des Bodys geschrieben wird
varReaderEin 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

nameEindeutiger Name für das Attribut
requiredfalse falls Attribut optional ist
fragmenttrue falls der Wert des Attributs nicht ausgewertet wird. So kann man auch JSP Elemente übergeben
rtexprvalueKann der Wert des Attributs dynamisch berechnet werden. Falls true ist z.B ein EL Ausdruck erlaubt
typeLaufzeittyp des Attributwerts. Standard ist String
descriptionBeschreibung des Attributs

Beispiel:

Eine weitere Möglichkeit der Ausgabe ist die Aktion <jsp:invoke>. Diese Aktion wertet ein Fragment aus

Beispiel:

12.5.3.2 Outputparamter

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-givenDefiniert eine Variable die von der aufrufenden Seite verwendet werden kann
name-from-attributeNur 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
aliasDies 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-classKlassenname der Variable. Vorgabe String
declaregibt an ob die Variable deklariert ist oder nicht. Vorgabe true
scopeEine der Wert AT_END, AT_BEGIN oder NESTED, Vorgabe NESTED
descriptionBeschreibung

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_BEGINDie Variable ist gleich nach dem StartTag sichtbar
AT_ENDDie Variable ist erst nach Abarbeitung des Tags sichtbar
NESTEDDie Variable ist im TagBody sichtbar. Nach dem Tag nicht mehr

12.5.3.3 Erlaubte Direktiven innerhalb einer Tag Datei

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

DirekiveBedeutung
taglibwie bei JSP
includewie bei JSP, die includierten Dateien muessen der Syntax der Tag-Dateien entsprechen
tagErsatz für die page-Direktive bei JSP
attributeNur für Tags, handelt die Attributübergabe eines Tags
variableNur für Tags, dient dazu Werte von innen (Bearbeitung des Tags) nach aussen (Aufrufende JSP Seite) zu geben.

12.5.3.4 Implizite Variablen in einer Tag Datei

Ein Tag kann auf folgende impliziten Variablen zugreifen:

ObjectType
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
outjavax.servlet.jsp.JspWriter
sessionjavax.servlet.http.HttpSession
applicationjavax.servlet.ServletContext
configjavax.servlet.ServletConfig
jspContextjavax.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 PDF Source SCWCD
 |<    <     >    >|  Generated by CoCoDiL