Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 444

Ильдар Шаукатович Хабибуллин

Например:

Здравствуйте, уважаемый <c:out value="${name}" default=,,господин,, />!

Тег <c:set> устанавливает значение переменной, имя которой задается атрибутом var, а область действия — атрибутом scope. Например:

<c:set var="name" scope="session" value="${param.name}"/>

или, что то же самое:

<c:set var="name" scope="session">

${param.name}

</c:set>

Тег <c:remove> удаляет ранее определенные переменные, например:

<c:remove var="name" scope="session"/>

Тег <c:url> тоже устанавливает переменную, но ее значение должно быть адресом, записанным в форме URL. Например:

или, что то же самое:

После этого переменную bhv можно использовать для создания сеанса связи с пользователем, как это делалось в предыдущей главе, или записывать в гиперссылках HTML:

<a href="${bhv}">Издательство</a>

К создаваемому адресу URL можно добавить параметры вложенным тегом <c:param>, например:

<c:param name="author" value="${book.author}"/>

</c:url>

Тег <c:if> проверяет условие, записанное в его атрибуте test логическим выражением. Если условие истинно, то выполняется тело тега. Например:

<c:if test="${age <= 0}">

Уважаемый ${name}! Укажите, пожалуйста, свой возраст.

</c:if>

Как видите, этот тег не реализует полностью условие "if-then-else". Такое разветвление можно организовать тегом <c:choose>.

Тег <c:choose> со вложенными в него элементами <c:when> и <c:otherwise> реализует выбор одного из вариантов.

Например:

<c:choose>

<c:when test="${balance < 0}" >

На вашем счету отрицательный остаток.

</c:when>

<c:when test="${balance == 0}" >

На вашем счету нулевой остаток.

</c:when>

<c:when test="${balance > 0}" >

На вашем счету положительный остаток.

</c:when>

<c:otherwise>

Нет сведений о вашем остатке.

</c:otherwise>

</c:choose>

В примере листинга 27.11 показано, как можно организовать разветвление с помощью тега <c:choose>. В нем проверяется, известны ли уже сведения о клиенте. Если они известны, клиенту посылается приветствие, если нет — форма для ввода имени и пароля.

Листинг 27.11. Ответ, сформированный с помощью JSTL

<%@ taglib uri="" prefix="c" %>

<html>

<head><title>Проверка ввода имени</title></head>

<body>

<c:choose>

<c:when test="${user != null}">

Здравствуйте, ${user.name}!

</c:when>

<c:otherwise>

form method="POST" action="/sdo/jsp/user.jsp">

Имя: <input type="text" name="name">

Пароль: <input type="password" name="pswd">

<input type="submit" name="ok" value="Отправить">

</form>

</c:otherwise>

</c:choose>

</body>

</html>

У тега <c:forEach> две формы. Первая создает цикл, пробегающий коллекцию типа Collection или Map, указанную атрибутом items. Ссылка на текущий элемент коллекции заносится в переменную, определенную атрибутом var. Ее можно использовать в теле тега.