<jsptutorial />

Die etwas andere Bibliothek: JSTL-functions


Die functions-Bibliothek unterscheidet sich von den anderen Bibliotheken schon in ihrer Syntax. Sie wird zwar wie eine normale Tag-Bibliothek definiert, allerdings dient die functions-Bibliothek ausschließlich zur Bildung von Expression Language-Ausdrücken und nicht zur Verwendung in eigenen Tags.
Bspw. kann man die Funktion fn:toLowerCase(string) wie folgt nutzen:

<c:if test="${fn:toLowerCase(answer) eq vocab}">

Es ist allerdings nicht möglich, diese Funktion als Tag zu nutzen:
<fn:toLowerCase>${param}</fn:toLowerCase>

Mit einer Ausnahme sind alle Funktionen ausschließlich auf Strings oder auf zu Strings konvertierbare Werte anwendbar und ähneln daher zumeist Methoden, die in der Klasse java.lang.String zu finden sind. Die Funktionen dieser Bibliothek sind gegenüber möglichen Fehlern weitgehend geschützt. Es wird nie null zurück gegeben, sondern ggf. stattdessen ein Leerstring. Und auch übergebene Null-Strings werden wie Leerstrings behandelt und führen zu keinem Fehler.
Zunächst wieder eine Übersicht aller Funktionen:

FunktionSignaturBedeutung
fn:containsboolean contains(java.lang.String, java.lang.String)Prüft, ob ein Eingabestring einen anderen String enthält
fn:containsIgnoreCaseboolean containsIgnoreCase(java.lang.String, java.lang.String)Prüft, ob ein Eingabestring einen anderen String unabhängig von der Groß-/Kleinschreibung enthält
fn:endsWithboolean endsWith(java.lang.String, java.lang.String)Prüft, ob eine String mit dem angegebenen Suffix endet
fn:escapeXmljava.lang.String escapeXml(java.lang.String)Ersetzt XML-Markup-Zeichen durch geeignete Escape-Zeichen
fn:indexOfint indexOf(java.lang.String, java.lang.String)Gibt den Index zurück, an dem ein Teilstring im Eingabestring zu finden ist
fn:joinjava.lang.String join(java.lang.String[], java.lang.String)Verbindet alle Elemente eines Arrays zu einem String
fn:lengthint length(java.lang.Object)Gibt die Länge des Strings oder die Anzahl der Elemente einer Collection zurück
fn:replacejava.lang.String replace(java.lang.String, java.lang.String, java.lang.String)Ersetzt in einem String jedes Vorkommen eines Teilstrings durch einen neuen Teilstring
fn:splitjava.lang.String[] split(java.lang.String, java.lang.String)Zerteilt einen String in ein Array von Teilstrings
fn:startsWithboolean startsWith(java.lang.String, java.lang.String)Prüft, ob ein String mit dem angegebenen Präfix beginnt
fn:substringjava.lang.String substring(java.lang.String, int, int)Gibt einen Teilstring des Eingabestrings zurück
fn:substringAfterjava.lang.String substringAfter(java.lang.String, java.lang.String)Gibt den Teilstring des Eingabestrings zurück, der hinter einem weiteren Teilstring gefunden wurde
fn:substringBeforejava.lang.String substringBefore(java.lang.String, java.lang.String)Gibt den Teilstring des Eingabestrings zurück, der vor einem weiteren Teilstring gefunden wurde
fn:toLowerCasejava.lang.String toLowerCase(java.lang.String)Wandelt alle Buchstaben des Eingabestrings in Kleinbuchstaben um
fn:toUpperCasejava.lang.String toUpperCase(java.lang.String)Wandelt alle Buchstaben des Eingabestrings in Großbuchstaben um
fn:trimjava.lang.String trim(java.lang.String)Entfernt alle Whitespace-Zeichen vom Anfang und Ende des Strings


Aufgrund des anderen Aufbaus der Bibliothek und der Tatsache, dass die Attribute aufgrund ihrer Ähnlichkeit zu Methoden der java.lang.String-Klasse selbsterklärend sind, nutzen wir für die functions-Bibliothek eine andere Darstellungsweise. Bei dieser Bibliothek sind übrigens alle Attribute stets Pflichtattribute.

Zum SeitenanfangZum Seitenanfang

fn:length(input)

Die einzige Funktion, die nicht unbedingt einen String voraussetzt. Sie gibt die Größe von Arrays oder Listen bzw. die Länge von Strings zurück.

Zum SeitenanfangZum Seitenanfang

fn:contains(string, substring)

Diese Funktion nimmt zwei Strings als Parameter entgegen und prüft, ob der zweite String in dem ersten enthalten ist. Gibt einen boolschen Wert zurück und wird daher hauptsächlich in <c:if> oder <c:when>-Tags verwendet.

Zum SeitenanfangZum Seitenanfang

fn:containsIgnoreCase(string, substring)

Entspricht der vorhergehenden Funktion, nur dass bei dem Vergleich in dieser Funktion die Groß-/Kleinschreibung nicht berücksichtigt wird.

Zum SeitenanfangZum Seitenanfang

fn:endsWith(string, suffix)

Auch diese Funktion nimmt zwei Strings als Parameter entgegen und prüft, ob das Ende des ersten Strings dem zweiten String entspricht. Es gibt für diese Funktion keinen Gegenpart, der die Groß-/Kleinschreibung ignoriert. Man kann allerdings Funktionen schachteln und könnte sich daher wie in dem folgenden Beispiel behelfen. Hier wird geprüft, ob ein Dateiname, der im Request-Attribut "fileName" abgelegt ist, die Dateiendung ".xml" hat:

<c:if test="${fn:endsWith(fn:toLowerCase(requestScope.fileName), '.xml')}">

Zum SeitenanfangZum Seitenanfang

fn:escapeXml(string)

Diese Funktion wandelt Zeichen des übergebenen Strings, die in XML eine besondere Bedeutung haben (doppelte und einfache Anführungsstriche, "&", "<", ">"), in ihre XML-Entitäten um (bspw. "&amp;" für "&").

Zum SeitenanfangZum Seitenanfang

fn:indexOf(string, substring)

Gibt den Index an, ab dem der Text des zweiten Parameters im ersten Parameter enthalten ist. Wie in der entsprechenden Methode der Klasse java.lang.String wird "-1" zurückgegeben, wenn der zweite String nicht im ersten enthalten ist.

Zum SeitenanfangZum Seitenanfang

fn:join(array, separator)

Mit dieser Funktion kann man mehrere Elemente eines Arrays zu einem String zusammen fügen (das Gegenstück zur Funktion "fn:split()"). Dabei nimmt die Funktion als ersten Parameter das Array entgegen und als zweiten einen String, der zwischen die einzelnen Elemente des Arrays eingefügt wird. Ist der zweite Parameter vom Wert null, werden die Elemente direkt aufeinanderfolgend zusammengefügt. Ein Beispiel soll dies kurz verdeutlichen:

${fn:join(answers, ", ")}

Wenn das Request-Attribut "answers" nun "felsig" und "steinig" enthält, würde durch die Funktion der String "felsig, steinig" zurückgegeben.

Zum SeitenanfangZum Seitenanfang

fn:split(string, delimiters)

Fügt "fn:join()" ein Array zusammen, so trennt "fn:split" einen String auf. Allerdings ist die Bedeutung des zweiten Parameters anders. In dieser Funktion wird ein String überall dort, wo einer der Delimiter vorkommt, aufgetrennt. Dabei sind alle Zeichen des zweiten übergebenen Strings ein Delimiter. Die Delimiter werden dabei nicht übernommen. Eine Trennung von "felsig, steinig" mit ", " würde somit die beiden Strings "felsig" und "steinig" ergeben. Eine Trennung von "felsig - steinig" mit ", " würde ein Array mit den drei Elementen "felsig", "-" und "steinig" ergeben. Folgen wie im ersten Beispiel direkt zwei oder mehrere Delimiter im aufzutrennenden String direkt hintereinander, so wird kein Leerstring ins Array eingefügt.

Zum SeitenanfangZum Seitenanfang

fn:replace(inputString, beforeSubstring, afterSubstring)

Ersetzt innerhalb des Strings "inputString" jedes Vorkommen von "beforeSubstring" durch den angegebenen "afterSubstring".

Zum SeitenanfangZum Seitenanfang

fn:startsWith(string, prefix)

Prüft, ob der übergebene String mit dem angegebenen Präfix anfängt und gibt entsprechend true oder false zurück.

Zum SeitenanfangZum Seitenanfang

fn:substring(string, beginIndex, endIndex)

Liefert einen Teil des gesamten Strings, der als erster Parameter übergeben wird. Es müssen sowohl Anfangs- als auch Endindex angegeben werden. Diese Funktion ist weitestgehend fehlertolerant. Sowohl falsche Grenzen als auch Null-Werte werden entsprechend vernünftiger Angaben angepasst. Eine Fehlersituation kann praktisch nicht vorkommen. Bspw. wird ein Endindex, der grösser ist als die Länge des Strings, auf die Länge des Ausgangsstrings abgeändert.
Eine Funktion, die einem Aufruf von someString.substring(beginIndex) entspricht. gibt es in der JSTL nicht. Allerdings existieren die beiden folgenden Funktionen, die es in der Klasse java.lang.String nicht gibt.

Zum SeitenanfangZum Seitenanfang

fn:substringAfter(string, substring)

Diese Funktion liefert den String innerhalb des ersten übergebenen Parameters, der hinter dem Substring beginnt, der als zweiter Parameter übergeben wurde.

Zum SeitenanfangZum Seitenanfang

fn:substringBefore(string, substring)

Analog zur vorhergehenden Funktion liefert diese den String zurück, der vor dem ersten Auftreten des übergebenen Parameters "substring" vorkommt.

Zum SeitenanfangZum Seitenanfang

fn:toLowerCase(string)

Wandelt einen String in einen String um, bei dem alle Großbuchstaben des übergebenen Strings durch Kleinbuchstaben ersetzt werden.

Zum SeitenanfangZum Seitenanfang

fn:toUpperCase(string)

Analog zur vorhergehenden Funktion wandelt diese Funktion einen String in einen String um, bei dem alle Kleinbuchstaben des übergebenen Strings durch Großbuchstaben ersetzt werden.

Zum SeitenanfangZum Seitenanfang

fn:trim(string)

Mit der Funktion fn:trim(string) werden sämtliche führende und abschließende Whitespace-Zeichen (Leerzeichen, Tabulatoren etc.) abgeschnitten.

Zum SeitenanfangZum Seitenanfang


www.jsptutorial.org
© 2005, 2006, 2007