Перед тем, как начать описывать тэги думаю не лишним будет еще раз напомнить как же подключается сам JSTL. А подключается он следующей строчкой:
Используется для вывода данных на экран. Лучше, чем вывод типа ${pageContext.parameter} тем, что позволяет контролировать специальные символы html, такие как <, >, &, ‘ и “. За то будут ли они обработаны как html или просто показаны на экране отвечает свойство escapeXml, которое по умолчанию стоит в true. Пример:
Или можно написать так:
Тэг <c:forEach>
Позволяет, как это ни странно, сделать цикл. Пример использования:
Помимо свойства count есть еще много замечательных, например begin, end, step и т.п. Их можно посмотреть в спецификации.
Тэг <c:if>
Форвардинг страничек можно написать так:
Тэг <c:choose>
В нормальной джаве это называется switch. Синтаксис такой:
Используется чтобы задать переменную вместо <jsp:setProperty>. Используется так:
Можно указывать значение переменных в теле тэга:
С помощью тэга <c:set> можно устанавливать свойства бинов или значение Map. Можно добавлять значения к листам и массивам, для этого используется параметр target. Например:
Удалять переменные через <c:set> не интуитивно очевидно, для этого используется тэг <c:remove>. Например:
Используется чтобы вложить одну страницу в другую. Синтаксис:
Если вы хотите передать какой-то параметр удаленной странице, то можно использовать тэг <c:param>. Пример:
Тэг используется вместо response.encodeURL(“/test.do”). К примеру, если у клиента отключены cookies, то правильно указывать линки так:
1. Неправильный:
Тэг <c:catch>
Если вы хотите обрабатывать исключения в теле JSP, то это можно сделать используя тэг <c:catch>. Синтаксис такой:
Тэги JSTL 1.1 делятся на 4 категории:
1. Основные:
o Общего назначения: <c:out>, <c:set>, <c:remove>, <c:catch>
o Условия: <c:if>, <c:choose>, <c:when>, <c:otherwise>
o Относящиеся к URL: <c:import>, <c:url>, <c:redirect>, <c:param>
o Итерации: <c:forEach>, <c:forTokens>
2. Библиотеки форматирования:
o Интернационализация: <fmt:message>, <fmt:setLocale>, <fmt:bundle>, <fmt:setBundle>, <fmt:param>, <fmt:requestEncoding>
o Форматирование: <fmt:timeZone>, <fmt:setTimeZone>, <fmt:formatNumber>, <fmt:parseNumber>, <fmt:parseDate>
3. Библиотеки «SQL»:
o Работа с БД: <sql:query>, <sql:update>, <sql:setDataSource>, <sql:param>, <sql:dateParam>
4. Библиотеки XML:
o Общие XML операции: <x:parse>, <x:out>, <x:set>
o XML-контроль: <x:if>, <x:choose>, <x:when>, <x:otherwise>, <x:forEach>
o Трансформации: <x:transform>, <x:param>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>Тэг <c:out>
Используется для вывода данных на экран. Лучше, чем вывод типа ${pageContext.parameter} тем, что позволяет контролировать специальные символы html, такие как <, >, &, ‘ и “. За то будут ли они обработаны как html или просто показаны на экране отвечает свойство escapeXml, которое по умолчанию стоит в true. Пример:
<c:out value=’${pageContext.parameter}’ escapeXml=’false’ />Если в value будет null, то c:out выведет на экран пустое место, но если задать значение аттрибута по-умолчанию, то выведется оно. Например:
<c:out value=’${user}’ default=’guest’ />напечатает имя пользователя, если оно есть или guest, если пользователь не задан.
Или можно написать так:
<c:out value=’${user}’>guest</c:out>
Тэг <c:forEach>
Позволяет, как это ни странно, сделать цикл. Пример использования:
<table> <c:forEach var=”movie” items=”${movieList}” > <tr> <td>${movie}</td> </tr> </c:forEach> </table>У тэга <c:forEach> есть опциональный параметр varStatus, с помощью которого, к примеру, можно реализовать счетчик (как “i” в обыкновенном цикле)
<c:forEach var=”movie” items=”${movieList}” varStatus=”movieLoopCount” > <tr> <td>count: ${movieLoopCount.count} </td> </tr> <tr><td>${movie}</td></tr> </c:forEach>Если у вас есть коллекция коллекций, то можно прогнать её через двойной <c:forEach>.
Помимо свойства count есть еще много замечательных, например begin, end, step и т.п. Их можно посмотреть в спецификации.
Тэг <c:if>
Форвардинг страничек можно написать так:
<%@ taglib prefix=”c” uri=http://java.sun.com/jsp/jstl/core %> <c:if test=”${empty param.userName}” > <jsp:forward page=”LoginScreen.jsp” /> </c:if>Тэг <c:if> не предпологает наличие else, таким образом можно сделать несколько вариантов поведения, нельзя сделать некоторое значение по-умолчанию.
Тэг <c:choose>
В нормальной джаве это называется switch. Синтаксис такой:
<c:choose> <c:when test=”${userPref == ‘something1’}”> Blah-blah. </c:when> <c:when test=”${userPref === ‘something2’}”> Another blah-blah. </c:when> <c:otherwise> Omg! Not blah-blah! </c:otherwise> </c:choose>Тэг <c:set>
Используется чтобы задать переменную вместо <jsp:setProperty>. Используется так:
<c:set var=”userValue” scope=”session” value=”Cowboy” />Параметр scope не обязательный, по-умолчанию используется scope=”page”.
Можно указывать значение переменных в теле тэга:
<c:set var=”userValue” >Cowgirl</c:set>Если value равно null, то переменная удаляется.
С помощью тэга <c:set> можно устанавливать свойства бинов или значение Map. Можно добавлять значения к листам и массивам, для этого используется параметр target. Например:
<c:set target=”${PetMap}” property=”dogName” value=”Fido” />Тэг <c:remove>
Удалять переменные через <c:set> не интуитивно очевидно, для этого используется тэг <c:remove>. Например:
<c:remove var=”userStatus” scope=”request” />Тэг <c:import>
Используется чтобы вложить одну страницу в другую. Синтаксис:
<c:import url=http://www.mysite/home.html />Страница загружается динамически на этапе запроса. В качестве url может использоваться страница за пределами контейнера.
Если вы хотите передать какой-то параметр удаленной странице, то можно использовать тэг <c:param>. Пример:
<c:import url=”Header.jsp” >Тэг <c:url>
<c:param name=”subtitle” value=”My title” />
</c:import>
Тэг используется вместо response.encodeURL(“/test.do”). К примеру, если у клиента отключены cookies, то правильно указывать линки так:
<a href=”<c:url value=’/inputComments.jsp’ />”>Click here</a>Если вы хотите передать удаленной страничке параметры, то есть два способа:
1. Неправильный:
<c:url value=”/inputComments.jsp?first=${first}&last=${last}” var=”inputURL” />2. Правильный:
<c:url value=”/inputComments.jsp” var=”inputURL” > <c:param name=”first” value=”${first}” /> <c:param name=”second” value=”${second}” /> </c:url>Первый неправильный потому, что в значении параметров могут быть пробелы, что сделает запрос нерабочим.
Тэг <c:catch>
Если вы хотите обрабатывать исключения в теле JSP, то это можно сделать используя тэг <c:catch>. Синтаксис такой:
<c:catch> <% int x = 10/0; %> </c:catch>Чтобы иметь возможность просмотреть информацию об исключении нужно использовать следующий синтаксис:
<c:catch var=”myException”> <% int x = 10/0; %> </c:catch> <c:if test=”%{myException != null}”> There was an exception: %{myException.message} </c:if>Все тэги
Тэги JSTL 1.1 делятся на 4 категории:
1. Основные:
o Общего назначения: <c:out>, <c:set>, <c:remove>, <c:catch>
o Условия: <c:if>, <c:choose>, <c:when>, <c:otherwise>
o Относящиеся к URL: <c:import>, <c:url>, <c:redirect>, <c:param>
o Итерации: <c:forEach>, <c:forTokens>
2. Библиотеки форматирования:
o Интернационализация: <fmt:message>, <fmt:setLocale>, <fmt:bundle>, <fmt:setBundle>, <fmt:param>, <fmt:requestEncoding>
o Форматирование: <fmt:timeZone>, <fmt:setTimeZone>, <fmt:formatNumber>, <fmt:parseNumber>, <fmt:parseDate>
3. Библиотеки «SQL»:
o Работа с БД: <sql:query>, <sql:update>, <sql:setDataSource>, <sql:param>, <sql:dateParam>
4. Библиотеки XML:
o Общие XML операции: <x:parse>, <x:out>, <x:set>
o XML-контроль: <x:if>, <x:choose>, <x:when>, <x:otherwise>, <x:forEach>
o Трансформации: <x:transform>, <x:param>
Спасибо за пост, помог быстро разобраться с JSTL, а не читать "JSTL. Практическое руководство для JSP-программистов" Сью Шпильмана, которое безусловно полезно прочитать, но на это нужно время)
ОтветитьУдалитьСпасибо
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьпример для c:import, значение аттрибута url нужно обнести кавычками. Поправьте
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьПочему же c:out "лучше, чем вывод типа ${pageContext.parameter} тем, что позволяет контролировать специальные символы html, такие как <, >, &, ‘ и “"? Ведь и функция fn:escapeXml позволяет делать то же самое в выводе чез знак "$" и фигурные скобки: ${fn:escapeXml(pageContext.parameter)}. Так что здесь в зависимости от ситуации и предпочтений.
ОтветитьУдалить