$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.