|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЭЙМЫ БЕЗ ФРЭЙМОВ | ||||||||
РЕЗЮМЕ: ВНУТРЕННИЙ | ПОЛЕ | КОНСТРУКТОР | МЕТОД | ДЕТАЛИ: ПОЛЕ | КОНСТРУКТОР | МЕТОД |
Интерфейс IterationTag расширяет Tag, определяя один дополнительный метод, управляющий повторяющимися вычислениями тела.
Обработчик тэга, реализующий IterationTag, рассматривается как обработчик,
реализующий Tag, с учётом методов doStartTag() и doEndTag().
IterationTag предоставляет новый метод: doAfterBody()
.
Метод doAfterBody() вызывается после каждого обсчёта тела для управления
повторными вычислениями тела. Если doAfterBody()
возвращает IterationTag.EVAL_BODY_AGAIN, то тело будет вычисляться ещё раз.
Если doAfterBody() возвращает Tag.SKIP_BODY, тело будет пропущено, и вместо
этого будет вычислен doEndTag().
Свойства
Нет новых свойств, дополняющих свойства Tag'а.
Методы
Есть один новый метод: doAfterBody().
Жизненный цикл
Детали жизненного цикла показаны на диаграмме. Исключения, вызываемые в процессе вычисления doStartTag(), BODY и doAfterBody() прерывают выполнение и помещаются на верх стэка, если только обработчик тэга не реализует интерфейс TryCatchFinally; см. детали об этом интерфейсе.
Пустая и Непустая Акция
Если TagLibraryDescriptor-файл указывает, что акция всегда обязана иметь пустую акцию, через вхождение <body-content> - "empty", то метод doStartTag() обязан возвратить SKIP_BODY. Иначе, метод doStartTag() может возвратить SKIP_BODY или EVAL_BODY_INCLUDE.
Если возвращено SKIP_BODY, тело не вычисляется и вызывается doEndTag().
Если возвращено EVAL_BODY_INCLUDE, тело вычисляется и "передаётся" текущему out, затем вызывается doAfterBody() и, после 0 или более итераций, вызывается doEndTag().
Поле. Резюме. | |
static int
|
EVAL_BODY_AGAIN
Запрос на вычисление тела. |
Поля, унаследованные из класса javax.servlet.jsp.tagext.Tag |
EVAL_BODY_INCLUDE,
EVAL_PAGE,
SKIP_BODY,
SKIP_PAGE
|
Метод. Резюме. | |
int
|
doAfterBody
()
Производит (повторное) вычисление тела. |
Методы, унаследованные из интерфейса javax.servlet.jsp.tagext.Tag |
doEndTag,
doStartTag,
getParent,
release,
setPageContext,
setParent
|
Поле. Детали. |
public static final int EVAL_BODY_AGAIN
Метод. Детали. |
public int doAfterBody()
throws JspException
Если doAfterBody возвращает EVAL_BODY_AGAIN, происходит новое вычисление тела (с
последующим новым вызовом doAfterBody).
Если doAfterBody возвращает SKIP_BODY, больше вычисление тела не производится,
значение out будет восстановлено методом popBody в pageContext и будет затем
вызван doEndTag.
Повторные вызовы метода могут привести к различным действиям, поскольку могут происходить изменения разделяемого статуса, или из-за внешних вычислений.
JSP-контейнер будет ресинхронизировать любые значения переменных, которые обозначены как таковые в TagExtraInfo, после вызова doAfterBody().
|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЭЙМЫ БЕЗ ФРЭЙМОВ | ||||||||
РЕЗЮМЕ: ВНУТРЕННИЙ | ПОЛЕ | КОНСТРУКТОР | МЕТОД | ДЕТАЛИ: ПОЛЕ | КОНСТРУКТОР | МЕТОД |