7.1 c:jeśli, c:dla każdego
Wszystkim spodobał się kod wykorzystujący tagi zamiast kodu Java, więc postanowili rozszerzyć zakres. Ale programowanie nie ogranicza się do tworzenia obiektów i odczytywania ich właściwości. Musisz wywoływać metody obiektów, pracować z bazą danych i innymi usługami. Co robić?
Musisz tylko przedstawić każdą instrukcję Java jako tag. Było if
, będzie <if>
, było for
, będzie <for>
i tak dalej. Dobra, dobra, żartowałem, to nie tak. Cóż, nie może być tak, że ludzie naprawdę decydują się na to. Ale nie, może!
Programiści mogli dodawać dowolne znaczniki do kodu. W zasadzie nie ma się czym martwić – JSP jest standardem rozszerzalnym. Ale poszli dalej i wydali standardową bibliotekę znaczników JSP - JSTL. Strona z nim wygląda tak:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<html>
<head>
<title> JSTL Example</title>
</head>
<body>
<c:set var = "salary" scope = "session" value = "${2000*5}"/>
<c:if test = "${ salary > 2000}">
<p>My salary is: <c:out value = "${salary}"/><p>
</c:if>
</body>
</html>
Jest całkiem możliwe, że natkniesz się na taki kod w swoich przyszłych projektach, tam dam kilka wyjaśnień.
7.2 Funkcje JSTL
Funkcje JSTL można podzielić na 5 kategorii:
- Główne tagi;
- formatowanie znaczników;
- znaczniki SQL;
- znaczniki XML;
- Funkcje wywołujące.
Nie wymienię ich wszystkich, ale wymienię te najpopularniejsze. Zacznijmy od głównych tagów:
1 | <c:out> |
Wyprowadza określone wyrażenie - odpowiednik <%= %> |
2 | <c:set> |
Zapisuje wynik wyrażenia do zmiennej |
3 | <c:remove> |
Usuwa zmienną |
4 | <c:catch> |
Łapie wyjątki |
5 | <c:if> |
odpowiednik if |
6 | <c:choose> |
przełącznik analogowy |
7 | <c:when> |
Używany razem z wyborem |
8 | <c:otherwise> |
Używany razem z wyborem |
9 | <c:import> |
Pozwala na włączenie treści do kodu (odpowiednik dyrektywy importowej) |
10 | <c:forEach> |
dla każdej pętli |
jedenaście | <c:param> |
Umożliwia ustawienie opcji importu |
12 | <c:redirect> |
Przeadresować |
13 | <c:url> |
Tworzy adres URL z parametrami |
Podam tylko jeden przykład i na tym zakończę. W zasadzie całkiem możliwe jest odczytanie takiego kodu po pewnej wprawie. Ale nie polecam pisania.
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<html>
<head>
<title> Each Tag Example&</title>
</head>
<body>
<c:forEach var = "i" begin = "1" end = "5">
Item <c:out value = "${i}"/><p>
</c:forEach>
</body>
</html>
Pomyśl o tym, piszemy kod Java w postaci tagów, aby parser JSP przekonwertował te tagi na kod Java. Coś na tym świecie poszło nie tak.
Nawiasem mówiąc, możesz pisać własne biblioteki znaczników. Kiedyś nawet pracowałem w projekcie, w którym były. Niesamowite przeżycie. Gdy tylko w bibliotece zostaną wprowadzone jakiekolwiek zmiany, cały plik jsp natychmiast się psuje.
Co chcesz? Kompilator nie śledzi takich zmian. Można je znaleźć tylko wizualnie podczas przeglądania wygenerowanych stron HTML. A jeśli są to rzadkie scenariusze, które pojawiają się w nietrywialnych sytuacjach… Bóg zapłać za rozwój backendu i typowanie statyczne!