Читать «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. Ее можно использовать в теле тега.