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-разработку и статическую типизацию!