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

11 Tag Libraries

11.1 Deklaration einer TagLib in JSP

For a custom tag library or a library of Tag Files, create the 'taglib' directive for a JSP page.

TagLib Direktiven wurden im Kapitel über Direktiven ausführlich behandelt.

Hier die Syntax zur Deklaration einer TagLib Direktive

AttributBeschreibung
prefixDer Prefix mappt eine Aktion zu einer TagLib Library
uriEntweder ein eindeutiges Symbol das eine TLD spezifiziert oder ein relativer Pfad zu einer TLD Datei bzw Jar File
tagdirKontextrelativer Pfad zu einem Ordner mit Tag-Dateien. Der Pfad startet mit /WEBINF/tags

Beispiele:

11.2 Finden der richtigen TagStruktur

Given a design goal, create the custom tag structure in a JSP page to support that goal.

Für diese Objective kann man sich nur schwer vorbereiten. Hilfreich ist sicherlich das Studium der existierenden Library, wie die Core Standard Library.

So zeigt die Aktion <c:choose> <c:when> <c:otherwise> wie man durch Verschachtelungen von Tags komplexe Strukturen aufbauen kann.

Einem Tag kann man Attribute mitgeben, deren Werte je nach TLD Datei fest sind oder durch Auswertung eines Ausdrucks ausgewertet werden. (siehe z.B. die Aktion <c:if>).

Das Ergebnis der Auswertung des Body eines Tags wird zur Ausgabe verwendet. Je nachdem wie man den Tag Handler schliesslich programmiert, wird die Auswertung des Bodys unterdrückt, (siehe Aktion <c:if>) oder mehrfach ausgewertet (siehe Aktion <c:forEach>)).

Beachte dass Ergebnis der Auswertung des Bodys, für die nächste Iteration wieder verwendet werden kann. Mehr dazu im Kapitel über die Programmierung der Tag Libraries.

11.3 Die Core Standard Tag Library

Given a design goal, use an appropriate JSP Standard Tag Library (JSTL v1.1) tag from the "core" tag library.

11.3.1 Überblick

Die Core Library teil sich in 3 Bereiche auf:

  1. Allgemeinen Aktionen
  2. Bedingungen und Schleifen
  3. URL-bezogene Aktionen

Allgemeine Aktionen

Core-TagsBedeutung
<c:out>Ausgabe von Daten in die Antwort
<c:set>Setzt Variable in einen Scope
<c:remove>löscht Daten aus einem Scope
<c:catch>Abfangen von Fehlern

Bedingungen und Schleifen

Core-TagsBedeutung
<c:if>Bedingungen
<c:choose>Auswahl
<c:when>Alternativen in Auswahl
<c:otherwise>Letzte Alternative in einer Auswahl
<c:forEach>Iterationen über eine Sammlung von Elementen
<c:forTokens>Iterationen über Token, die durch Delimiter getrennt sind

URL-bezogene Aktionen

Core-TagsBedeutung
<c:import>Inklusion von Texten
<c:url>Umschreiben von URLs
<c:redirect>Umleitung zu anderen Seiten
<c:param>Übergabe von Parametern

11.3.2 Allgemeine Aktionen

Die Aktion <c:out>

Die <c:out> Aktion wertet einen Ausdruck aus und übergibt das Ergebnis an das aktuelle JspWriter-Objekt.

Da EL-Ausdrücke direkt innerhalb von Template-Daten eingefügt werden dürfen, wird diese Funktion selten verwendet, und ist vor allem mit den Attributen interessant.

AttributJava TypDynamikdefault-WertBeschreibung
valueObjectJasiehe Attribut defaultAusdruck der ausgewertet wird
escapeXmlbooleanJatrueBei true werden xml Sonderzeichen in die XML Entity Codes übersetzt
defaultObjectJa--Ausdruck der ausgegeben wird falls die Auswertung von value null ergibt

Die Beispiele zeigen, dass der default Wert als Attribut, oder als Body angegeben werden kann.

Die Aktion <c:set>

Diese Aktion setzt Variablen in einem bestimmten Scope, oder setzt eine Property einer Bean.

AttributJava TypDynamikBeschreibung
valueStringJaAusdruck der ausgewertetund als Wert genommen wird
varStringNeinName der Variablen die die neue URL enthält
scopeStringNeinScope in der var abgelegt wird, Standard ist page
targetObjectJaZielobjekt dem eine Property zugewiesen wird. Eine Bean oder Map
propertyStringJaProperty von target

Die Aktion <c:remove>

Diese Aktion entfernt eine Variable aus einem Gültigkeitsbereich

AttributJava TypDynamikBeschreibung
varStringNeinName der Variable, die entfernt werden soll
scopeStringNeinScope in der var abgelegt wird, Standard ist page

Beispiel:

Die Aktion <c:catch>

Diese Aktion fängt Fehler ab, es ist möglich die ausgelöste Exception an eine Variable im PageScope zuzuordnen.

Die Aktion <c:catch> hat nur ein einziges optionales Attribut var. Diese Variable liegt automatisch im pageScope.

11.3.3 Bedingungen und Schleifen

Die Aktion <c:if>

Die Auswertung des Bodys eine Aktion <c:if> erfolgt nur dann, falls die der im Attribut test angegebene Ausdruck true ergibt.

AttributJava TypDynamikBeschreibung
testbooleanJaAusdruck der ausgewertet wird
varStringNeinVariablenname
scopeStringNeinScope von var

Statt Auswertung eines Bodys kann man auch das Ergebnis der Auswertung in einer Variablen abspeichern.

Die Aktionen <c:choose> <c:when> <c:otherwise>

Diese Aktionen entspricht dem Java switch() Statement. Die Aktionen <c:when> und <c:otherwise> sind Kindelemente der Aktion<c:choose>. Das Vorhandensein einer Aktion <c:otherwise> ist optional.

Die Aktion <c:when> ist die einzigste die ein Attribut besitzt. Ergibt die Auswertung des Ausdruck vom test den Wert true so wird der Body ausgewertet. Innerhalb der Aktion cc:choose> können mehrere <c:when> Ausdrücke sein. Es wird der Body der ersten <c:when> Aktion ausgeführt, die true ergibt. Ansonsten wird der Body der <c:otherwise> Aktion ausgeführt.

Die Aktion <c:forEach>

Es gibt 2 Arten diese Aktion zu verwenden.

  1. Iteration über eine feste Anzahl von Iterationen
  2. Iteration über eine Collection

Iteration über eine feste Anzahl von Iterationen

Beispiel:

Das Attribut begin und end sind wenn man über eine feste Anzahl von Iterationen iteriert Pflichtattribute.

Iteration über eine Collection

Beispiel:

AttributJava TypDynamikBeschreibung
beginintJaIndex für Anfang der Iteration
endintJaIndex für das Ende der Iteration
itemsCollection, Iterator, Enumeration , Map oder ein ArrayJaDarüber wird iteriert
stepintJaSchrittweite der Schleife, Standard ist 1.
varStringNeinVariable das das aktuelle Element der Iteration hält
varStatusStringNeinVariable enthält interne Informationen über die Schleifenduchlauf Ist vom Interface LoopTagStatus

varStatus kann man nur innerhalb einer forEach bzw forToken Aktion verwenden. Das Objekt das varStatus hält ist vom Interface LoopTagStatus und hat folgende Methoden:

Die Aktion <c:forTokens>

Diese Aktion iteriert für jeden Token innerhalb eines String. Die Token werden über sogenannte Trennzeichen (delimiters) getrennt.

Beispiel:

AttributJava TypDynamikBeschreibung
beginintJaIndex für Anfang der Iteration
endintJaIndex für das Ende der Iteration
itemsCollection, Iterator, Enumeration , Map oder ein ArrayJaDarüber wird iteriert
delimsStringJaListe aller Trennzeichen
stepintJaSchrittweite der Schleife, Standard ist 1.
varStringNeinVariable das das aktuelle Element der Iteration hält
varStatusStringNeinVariable enthält interne Informationen über die Schleifenduchlauf Ist vom Interface LoopTagStatus

11.3.4 URL-bezogene Aktionen

Die Aktion <c:url>

Diese Aktion wird für URL-Rewriting genommen. Ist der Aufruf Teil einer Sitzung, so wird die Session-ID der URL hinzugefügt.

AttributJava TypDynamikBeschreibung
valueStringJaPflichattribut - Eine absolute oder relative URL
contextStringJaOptional - Falls die Umleitung zu einer anderen Applikation gehört, brauchen wir den Context Pfad der Zielapplikation
varStringNeinOptional - Name der Variablen die die neue URL enthält
scopeStringNeinOptional - Scope in der var abgelegt wird, Standard ist page

Werden in der URL-Parameter mitgegeben, so können diese als Unterelemente mit der Aktion <c:param> mitgegeben werden.

Die Aktion <c:import>

Im Gegensatz zur include-Direktive und die <jsp:include> Standardaktion, kann man mit der Aktion <c:import> auch Ressourcen aus einer anderen Webanwendung einbinden. Es können auch Parameter mitgegeben werden.

Es ist auch möglich Ressourcen über ftp einzubinden.

Die eingelesene Ressource muss nicht sofort eingebunden werden, sondern kann mit dem Attribut var und scope einer Variablen zugewiesen werden.

Eine andere Möglichkeit ist es, sich über das Attribut varReader eine Instanz von java.io.Reader geben zu lassen. Diese Instanz gibt Methoden wie read(),skip usw. zur Verfügung. Ist ein varReader definiert, so wird im Body der <c:import> Aktion darauf zugegriffen.

AttributJava TypDynamikBeschreibung
urlStringJaPflicht - Die URL der Ressource die importiert wird
contextStringJaOptional - Context-Path für eine Webanwendung im selben Container. Startet mit einem Slash
varStringNeinOptional - Variable die den Inhalt der Ressource hält
scopeStringNeinOptional - Scope der Variable. Standard ist page
varReaderStringNeinOptional - Variable die einen java.io.Reader hält
charEncodingStringJaOptional - Zeichensatz der Ressource

Beispiel:

Die Aktion <c:redirect>

Diese Aktion dient zur Umleitung der aktuellen URL. Es gibt dem Browser die Antwort, er solle die Anfrage mit der neuen URL betätigen.

AttributJava TypDynamikBeschreibung
urlStringJaPflicht - Ein relativer Pfad, oder eine absolute URL
contextStringJaOptional - Context-Path für eine Webanwendung im selben Container. Startet mit einem Slash

Beispiel:

Die Aktion <c:param>

Dient der Paramterübergabe in den Aktionen <c:redirect>, <c:import> und <c:url>.

Es gibt 2 syntaktische Schreibweisen. Einmal wird der Wert des Paramters als Attribut value mitgegeben. Das andereMal wird er über den Body mitgegeben.

Die Aktion <c:param> hat nur als Kindelement einen Sinn.

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