Основные возможности JSTL

Последнее обновление: 28.09.2018

Рассмотрим некоторые основные возможности JSTL.

Цикл

Вывод в цикле элементов массива или коллекции:

<c:forEach var="user" items="${users}">
	<p>${user}</p>
</c:forEach>

В данном случае параметр "items" указывает на коллекцию, элементы которой выводятся. А параметр "var" задает переменную, через которую доступен текущий перебираемый элемент.

Например, в сервлет передается массив строк:

public class HelloServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
		throws ServletException, IOException {

		String[] users = new String[]{"Tom", "Bob", "Sam"};
		request.setAttribute("users", users);
		getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
	}
}

В jsp мы можем получить и вывести элементы массива следующим образом:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>User Info</title>
    </head>
    <body>
    	<ul>
    		<c:forEach var="user" items="${users}">
          		<li><c:out value="${user}" /></li>
 			</c:forEach>
    	</ul>
    </body>
</html>
Цикл в JSTL в JSP

Еще один пример - вывод в цикле всех куки:

<ul>
<c:forEach var="cook" items="${cookie}">
	<li>
		<p><c:out value="${cook.value.name}" /></p>
		<p><c:out value="${cook.value.value}" /></p>
	</li>
</c:forEach>
</ul>

Условные выражения

Выражение if:

<c:if test="${isVisible == true}">
	<p>Visible</p>
</c:if>

В данном случае если атрибут isVisible равен true, то выводится код, который расположен между тегами <c:if> и </c:if>

Если надо задать альтернативную логику, то можно добавить тег c:if, который проверяет противоположное условие:

<c:if test="${isVisible == true}">
	<p>Visible</p>
</c:if>
<c:if test="${isVisible == false}">
	<p>Invisible</p>
</c:if>

Тег choose

Тег c:choose подобно конструкции switch...case в Java проверяет объект на соответствие одному из значений. Например

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>JSTL in JSP</title>
    </head>
    <body>
    <c:choose>
    <c:when test="${val == 1}">
    	<p>Equals to 1</p>
    </c:when>
    <c:when test="${val == 2}">
    	<p>Equals to 2</p>
    </c:when>
    <c:otherwise>
    	<p>Undefined</p>
    </c:otherwise>
    </c:choose>
    </body>
</html>

В данном случае тег c:choose проверяет значение атрибута "val". Для проверки применяются вложенные теги c:when, которые аналогичны блокам case в конструкции switch..case. С помощью их параметра test значение атрибута сравнивается с определенным значением. И если выражения сравнения истинно, то выводится код, который размещен внутри данного элемента c:when. Таким образом мы можем определить несколько блоков c:when. Дополнительный тег <c:otherwise> выполняется, если условия проверки значения во всех тегах c:when ложно.

Тег url

Тег <c:url> позволяет создать адрес относительно корня приложения. Этот тег может применяться, например, при создании ссылок.

Например,

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>JSTL in JSP</title>
    </head>
    <body>
    <a href='<c:url value="/edit" />'><c:url value="/edit" /></a>
    </body>
</html>

Параметр value содержит часть адреса, которая добавляется к корню приложения.

url in JSTL in JSP

Редирект

С помощью тега redirect можно установить редирект на другой адрес. Например, в случае если атрибут val не определен, то делаем редирект на страницу "notfound.jsp":

<c:if test="${val == null}">
	<c:redirect url="/notfound.jsp" />
</c:if>
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850