Zur Übersicht

Die Java Standard Tag Library

Tag-Libraries bieten die Möglichkeit, JSPs frei von Java-Code zu halten. Dabei übernehmen Tags Aufgaben der Darstellungslogik wie bspw.. Formatierungen, Iterationen über Arrays und Listen oder ähnliche Aufgaben in der View. Seit Java EE 5 sind die JSTL Bestandteil des Standard.

Die JSTL bringt insgesamt fünf Tag-Libraries mit:

Name präfix URI für Taglib Direktive Aufgabe
core c http://java.sun.com/jsp/jstl/core Basistags, die vor allem Programmablauf-Tags wie Schleifenkonstrukte oder Verzweigungen enthalten
fmt fmt http://java.sun.com/jsp/jstl/fmt Tags zur Formatierung von Datums-, Währungs- und Zahlwerten und zur Internationalisierung
xml x http://java.sun.com/jsp/jstl/xml Geeignet zur Bearbeitung von XML-Dokumenten. Enthält u.a. wie core Schleifen- und Verzweigungstags. Der Unterschied zu den core-Tags liegt darin, dass XPath-Ausdrücke zur Bedingungsentscheidung bzw. zur Feststellung der Menge dienen, über die iteriert werden soll
sql sql http://java.sun.com/jsp/jstl/sql Tag-Bibliothek zum Ansprechen einer Datenbank direkt aus der JSP heraus
functions fn http://java.sun.com/jsp/jstl/functions Die Tags dieser Bibliothek wenden Funktionen auf Expression Language-Ausdrücke an. Es handelt sich mit einer Ausnahme durchweg um String-Manipulationen

Eine JSTL Bibliothek bindet man mit der Taglib Direktive in eine JSP ein:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Im obigen Beispiel wurde die core-Bibliothek unter dem Präfix „c“ eingebunden. Core-Tags können damit wie folgt genutzt werden:

<c:out value="Hallo World" />

Hier wird das out-Tag aus der core Bibliothek genutzt. Das „c“ am Anfang des Tags entspricht dem Präfix. Dieses ist frei wählbar, doch empfiehlt es sich, die von der JSTL-Spezifikation empfohlenen Präfixe s.o Tabelle zu verwenden. Folgt man dieser Konvention, wissen alle Projektbeteiligten direkt bei einem Blick auf die JSP, welche Tag-Library jeweils verwendet wird.
Braucht man mehrere Bibliotheken muss man auch alle – wie hier gezeigt – in der JSP einbinden. Wir zeigen eine JSP, einmal klassisch mit Skriptlets und einmal mit der JSTL und der Expression Language, um zu zeigen, dass erstens Skriptlets durch die EL und die JSTL überflüssig gemacht wurden und dass zweitens dadurch eine JSP deutlich übersichtlicher wird. Außerdem kann man in diesem Beispiel die Einbindung der JSTL und deren Zusammenspiel mit der Expression Language sehen. Gerade dieses Zusammenspiel von EL und JSTL bringt beide Technologien richtig zur Geltung.

JSP mit Skriptlets:

<%-- ... --%> <% if (pageContext.findAttribute("answers") != null && 
((List)pageContext.findAttribute("answers")).size() != 0) 
{ List<VocabAnswer> allAnswers = (List<VocabAnswer>)pageContext.findAttribute("answers"); %>
 <table id="resultsTable" cellpadding="0" cellspacing="0" border="0"> 
   <tr> <th><fmt:message key="showResultsPage.th.orig" /></th> 
        <th><fmt:message key="showResultsPage.th.translation" /></th> 
        <th><fmt:message key="showResultsPage.th.answerGiven" /></th> 
   </tr> <% for (VocabAnswer answer: allAnswers) { %> 
   <tr class="isCorrect_<%= Boolean.toString(answer.getIsCorrect()) %>"> 
       <td><%= answer.getOrig().getOrig() %></td> 
       <td><%= answer.getOrig().getTranslation() %></td> 
       <td><%= answer.getAnswerText() %></td> </tr> <% } %> </table> <% } %>

JSP mit EL und JSTL:

<c:if test="${not empty answers}">       <table id="resultsTable" cellpadding="0" cellspacing="0" border="0">
    <tr> <th><fmt:message key="showResultsPage.th.orig" /></th>
       <th><fmt:message key="showResultsPage.th.translation" /></th>
       <th><fmt:message key="showResultsPage.th.answerGiven" /></th> </tr> <c:forEach items="${answers}" var="answer"> <tr class="isCorrect_${answer.isCorrect}">
   <td>${answer.orig.orig}</td> <td>${answer.orig.translation}</td>           <td>${answer.answerText}</td> </tr> </c:forEach> </table> </c:if>          

In den jeweiligen Unterkapiteln stellen wir die einzelnen Bibliotheken kurz vor. Dabei beschreiben wir jeweils alle Tags der jeweiligen Bibliothek und geben vereinzelt Beispiele für die Verwendung. Allerdings werden wir einige Verwendungsarten oder Attribut-Kombinationen nicht erwähnen. Dies sind durchweg Nutzungsmöglichkeiten, die in der Praxis so gut wie keine Rolle spielen. Wer wirklich alle Verwendungsarten kennen lernen möchte, sei auf die Spezifikation verwiesen.
Allgemein gilt für alle vorgestellten Tags, dass sie versuchen, soweit vernünftig möglich, mit Sonder- und Fehlerfällen umzugehen und keine Exceptions zu werfen. Dies ist daher im Einzelnen nicht gesondert erwähnt. Dennoch gibt es Fälle, bei denen eine Exception unumgänglich ist.


0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.