7.1 c:if, c:forEach
Код с использованием тегов вместо Java-кода всем понравился, поэтому область применения решили расширить. Но ведь созданием объектов и чтением их свойств программирование не ограничивается. Нужно вызывать методы объектов, работать с базой данных и другими сервисами. Что делать?
Нужно просто каждый оператор Java представить в виде тега. Был if
, станет <if>
, был for
, станет <for>
и так далее. Ладно, ладно, шучу, не было такого. Ну не может быть так, чтобы люди реально решили так делать. А нет, может!
Программисты разрешили добавлять в код любые теги. Тут в принципе ничего страшного – JSP стандарт расширяемый. Но они пошли дальше и выпустили JSP Standard Tag Library – JSTL. Страница с его использованием выглядит так:
<%@ 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>
Вполне возможно ты встретишь такой код в своих будущих проектах, так что дам некоторые пояснения.
7.2 Функции JSTL
Функции JSTL делятся на 5 категорий:
- Основные теги;
- Теги форматирования;
- SQL-теги;
- XML-теги;
- Вызов функций.
Все приводить я не буду, но самые популярные укажу. Начнем с основных тегов:
1 | <c:out> |
Выводит указанное выражение – аналог <%= %> |
2 | <c:set> |
Записывает результат выражения в переменную |
3 | <c:remove> |
Удаляет переменную |
4 | <c:catch> |
Захватывает исключения |
5 | <c:if> |
Аналог if |
6 | <c:choose> |
Аналог switch |
7 | <c:when> |
Используется вместе с choose |
8 | <c:otherwise> |
Используется вместе с choose |
9 | <c:import> |
Позволяет включить в код контент (эквивалентен директиве import) |
10 | <c:forEach> |
Цикл for each |
11 | <c:param> |
Позволяет задать параметры для import |
12 | <c:redirect> |
Редирект |
13 | <c:url> |
Создает URL с параметрами |
Приведу всего один пример и закончим с этим. В принципе, читать такой код после некоторой сноровки вполне себе можно. А писать все же не советую:
<%@ 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>
Вдумайтесь, мы записываем Java-код в виде тегов, чтобы потом JSP-парсер преобразовал эти теги в Java-код. Что-то в этом мире пошло не так.
Кстати, можно писать свои собственные библиотеки тегов. Я даже когда-то работал в проекте, где они были. Шикарный опыт. Как только в библиотеку вносятся какие-нибудь изменения, тут же ломается весь jsp.
А что вы хотели? Компилятор такие изменения не отслеживает. Их можно найти только визуально при просмотре сгенерированных HTML-страниц. А если это какие-нибудь редкие сценарии, которые возникают в нетривиальных ситуациях… Господи, благослови backend-разработку и статическую типизацию!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ