$K(Tag Libraries) $KK(Deklaration einer TagLib in JSP) $R(Objective) For a custom tag library or a library of Tag Files, create the 'taglib' directive for a JSP page. $R\ TagLib Direktiven wurden im Kapitel über Direktiven ausführlich behandelt. Hier die Syntax zur Deklaration einer TagLib Direktive $S() <%@ taglib prefix="prefix" [uri="taglibURI" | tagdir="contextRelativePath"]%> $S\ $T(caption,ll,30.70) Attribut | Beschreibung || prefix | Der Prefix mappt eine Aktion zu einer TagLib Library || uri | Entweder ein eindeutiges Symbol das eine TLD spezifiziert oder ein relativer Pfad zu einer TLD Datei bzw Jar File || tagdir | Kontextrelativer Pfad zu einem Ordner mit Tag-Dateien. Der Pfad startet mit /WEBINF/tags || $T\ Beispiele: $S() <%@ taglib prefix="ora" uri="orataglib" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="mylib" tagdir="/WEB-INF/tags/mylib" %> $S\ $KK(Finden der richtigen TagStruktur) $R(Objective) Given a design goal, create the custom tag structure in a JSP page to support that goal. $R\ 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 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 ). 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 ) oder mehrfach ausgewertet (siehe Aktion )). 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. $KK(Die Core Standard Tag Library) $R(Objective) Given a design goal, use an appropriate JSP Standard Tag Library (JSTL v1.1) tag from the "core" tag library. $R\ $KKK(Überblick) Die Core Library teil sich in 3 Bereiche auf: # Allgemeinen Aktionen # Bedingungen und Schleifen # URL-bezogene Aktionen Allgemeine Aktionen $T(caption,ll,30.70) Core-Tags | Bedeutung || | Ausgabe von Daten in die Antwort || | Setzt Variable in einen Scope || | löscht Daten aus einem Scope || | Abfangen von Fehlern || $T\ Bedingungen und Schleifen $T(caption,ll,30.70) Core-Tags | Bedeutung || | Bedingungen || | Auswahl || | Alternativen in Auswahl || | Letzte Alternative in einer Auswahl || | Iterationen über eine Sammlung von Elementen || | Iterationen über Token, die durch Delimiter getrennt sind || $T\ URL-bezogene Aktionen $T(caption,ll,30.70) Core-Tags | Bedeutung || | Inklusion von Texten || | Umschreiben von URLs || | Umleitung zu anderen Seiten || | Übergabe von Parametern || $T\ $KKK(Allgemeine Aktionen) Die Aktion Die 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. $T(caption,lllll,15.10.12.15.48) Attribut | Java Typ | Dynamik | default-Wert | Beschreibung || value | Object | Ja | siehe Attribut default | Ausdruck der ausgewertet wird || escapeXml | boolean | Ja | true | Bei true werden xml Sonderzeichen in die XML Entity Codes übersetzt || default | Object | Ja | -- | Ausdruck der ausgegeben wird falls die Auswertung von value null ergibt || $T\ Die Beispiele zeigen, dass der default Wert als Attribut, oder als Body angegeben werden kann. $S() $S\ Die Aktion Diese Aktion setzt Variablen in einem bestimmten Scope, oder setzt eine Property einer Bean. $T(caption,llll,15.15.15.55) Attribut | Java Typ | Dynamik | Beschreibung || value | String | Ja | Ausdruck der ausgewertetund als Wert genommen wird || var | String | Nein | Name der Variablen die die neue URL enthält || scope | String | Nein | Scope in der var abgelegt wird, Standard ist page || target | Object | Ja | Zielobjekt dem eine Property zugewiesen wird. Eine Bean oder Map || property | String | Ja | Property von target || $T\ $S() <%-- Beispiel: Setzen einer Variable ohne Body --%> <%-- Beispiel: Setzen einer Variable mit Body --%> ${user.name} <%-- Beispiel: Property einer Bean setzen --%> <%-- Beispiel: Property einer Bean setzen --%> $S\ Die Aktion Diese Aktion entfernt eine Variable aus einem Gültigkeitsbereich $T(caption,llll,15.15.15.55) Attribut | Java Typ | Dynamik | Beschreibung || var| String | Nein | Name der Variable, die entfernt werden soll || scope | String | Nein | Scope in der var abgelegt wird, Standard ist page || $T\ Beispiel: $S() $S\ Die Aktion Diese Aktion fängt Fehler ab, es ist möglich die ausgelöste Exception an eine Variable im PageScope zuzuordnen. $S() $S\ Die Aktion hat nur ein einziges optionales Attribut var. Diese Variable liegt automatisch im pageScope. $KKK(Bedingungen und Schleifen) Die Aktion Die Auswertung des Bodys eine Aktion erfolgt nur dann, falls die der im Attribut test angegebene Ausdruck true ergibt. $S() JSPElements $S\ $T(caption,llll,15.15.15.55) Attribut | Java Typ | Dynamik | Beschreibung || test | boolean | Ja | Ausdruck der ausgewertet wird || var | String | Nein | Variablenname || scope | String | Nein | Scope von var || $T\ Statt Auswertung eines Bodys kann man auch das Ergebnis der Auswertung in einer Variablen abspeichern. $S() $S\ Die Aktionen Diese Aktionen entspricht dem Java switch() Statement. Die Aktionen und sind Kindelemente der Aktion. Das Vorhandensein einer Aktion ist optional. $S() ${product.salesPrice} On sale ! ${product.price} $S\ Die Aktion 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 Ausdrücke sein. Es wird der Body der ersten Aktion ausgeführt, die true ergibt. Ansonsten wird der Body der Aktion ausgeführt. Die Aktion Es gibt 2 Arten diese Aktion zu verwenden. # Iteration über eine feste Anzahl von Iterationen # Iteration über eine Collection Iteration über eine feste Anzahl von Iterationen Beispiel: $S() <%-- Iterate five times, writing 0,2,4,6 --%> ${current} $S\ Das Attribut begin und end sind wenn man über eine feste Anzahl von Iterationen iteriert Pflichtattribute. Iteration über eine Collection Beispiel: $S() <%-- Iterate over all request parameters --%> Name: ${current.key} Vorname: ${current.value} $S\ $T(caption,llll,15.15.15.55) Attribut | Java Typ | Dynamik | Beschreibung || begin | int | Ja | Index für Anfang der Iteration || end | int | Ja | Index für das Ende der Iteration || items | Collection, Iterator, Enumeration , Map oder ein Array | Ja | Darüber wird iteriert || step | int | Ja | Schrittweite der Schleife, Standard ist 1. || var | String | Nein | Variable das das aktuelle Element der Iteration hält || varStatus | String | Nein | Variable enthält interne Informationen über die Schleifenduchlauf Ist vom Interface LoopTagStatus || $T\ 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: $S() public Integer getBegin() // begin Wert oder null public Integer getCount() // Aktuelle Iteration beginnend bei 1 public Object getCurrent() // Aktuelle Variable der Iteration public int getIndex() // Index aktueller Variable beginned bei 0 public Integer getStart() // start Wert oder null public Integer getStep() // step Wert oder null public boolean isFirst() // Gibt true für den ersten Durchlauf public boolean isLast() // Gibt true für den letzten Durchlauf $S\ Die Aktion Diese Aktion iteriert für jeden Token innerhalb eines String. Die Token werden über sogenannte Trennzeichen (delimiters) getrennt. Beispiel: $S() <%-- Iteriert über Tokens die durch Vertikalstrich getrennt sind --%> $S\ $T(caption,llll,15.15.15.55) Attribut | Java Typ | Dynamik | Beschreibung || begin | int | Ja | Index für Anfang der Iteration || end | int | Ja | Index für das Ende der Iteration || items | Collection, Iterator, Enumeration , Map oder ein Array | Ja | Darüber wird iteriert || delims | String | Ja | Liste aller Trennzeichen || step | int | Ja | Schrittweite der Schleife, Standard ist 1. || var | String | Nein | Variable das das aktuelle Element der Iteration hält || varStatus | String | Nein | Variable enthält interne Informationen über die Schleifenduchlauf Ist vom Interface LoopTagStatus || $T\ $KKK(URL-bezogene Aktionen) Die Aktion Diese Aktion wird für URL-Rewriting genommen. Ist der Aufruf Teil einer Sitzung, so wird die Session-ID der URL hinzugefügt. $T(caption,llll,15.15.15.55) Attribut | Java Typ | Dynamik | Beschreibung || value | String | Ja | Pflichattribut - Eine absolute oder relative URL || context | String | Ja | Optional - Falls die Umleitung zu einer anderen Applikation gehört, brauchen wir den Context Pfad der Zielapplikation || var | String | Nein | Optional - Name der Variablen die die neue URL enthält || scope | String | Nein | Optional - Scope in der var abgelegt wird, Standard ist page || $T\ Werden in der URL-Parameter mitgegeben, so können diese als Unterelemente mit der Aktion mitgegeben werden. $S() $S\ Die Aktion Im Gegensatz zur include-Direktive und die Standardaktion, kann man mit der Aktion auch Ressourcen aus einer anderen Webanwendung einbinden. Es können auch Parameter mitgegeben werden. $S() $S\ 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 Aktion darauf zugegriffen. $T(caption,llll,17.13.15.55) Attribut | Java Typ | Dynamik | Beschreibung || url | String | Ja | Pflicht - Die URL der Ressource die importiert wird || context | String | Ja | Optional - Context-Path für eine Webanwendung im selben Container. Startet mit einem Slash || var | String | Nein | Optional - Variable die den Inhalt der Ressource hält || scope | String | Nein | Optional - Scope der Variable. Standard ist page || varReader | String | Nein | Optional - Variable die einen java.io.Reader hält || charEncoding | String | Ja | Optional - Zeichensatz der Ressource || $T\ Beispiel: $S() $S\ Die Aktion Diese Aktion dient zur Umleitung der aktuellen URL. Es gibt dem Browser die Antwort, er solle die Anfrage mit der neuen URL betätigen. $T(caption,llll,15.15.15.55) Attribut | Java Typ | Dynamik | Beschreibung || url| String | Ja | Pflicht - Ein relativer Pfad, oder eine absolute URL || context | String | Ja | Optional - Context-Path für eine Webanwendung im selben Container. Startet mit einem Slash || $T\ Beispiel: $S() $S\ Die Aktion Dient der Paramterübergabe in den Aktionen , und . Es gibt 2 syntaktische Schreibweisen. Einmal wird der Wert des Paramters als Attribut value mitgegeben. Das andereMal wird er über den Body mitgegeben. $S() "paramterWert" $S\ Die Aktion hat nur als Kindelement einen Sinn.