| |
|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЭЙМЫ БЕЗ ФРЭЙМОВ | ||||||||
РЕЗЮМЕ: ВНУТРЕННИЙ | ПОЛЕ | КОНСТРУКТОР | МЕТОД | ДЕТАЛИ: ПОЛЕ | КОНСТРУКТОР | МЕТОД |
Интерфейс BodyTag расширяет IterationTag путём определения дополнительных методов, которые дают обработчику тэга возможность манипулировать содержимым, вычисляя его тело.
Обработчик тэга отвечает за манипуляции с содержимым тела. Например, обработчик тэга может взять содержимое тела, конвертировать его в String с помощью метода bodyContent.getString и затем использовать его (содержимое). Ил обработчик тэга может взять содержимое тела и записать его в содержащий JspWriter, используя метод bodyContent.writeOut.
Обработчик тэга, реализующий BodyTag, рассматривается как обработчик, реализующий IterationTag, за исключением того, что метод doStartTag может возвратить SKIP_BODY, EVAL_BODY_INCLUDE или EVAL_BODY_BUFFERED.
Если возвращено EVAL_BODY_INCLUDE, вычисление происходит, как в IterationTag.
Если возвращено EVAL_BODY_BUFFERED, будет создан BodyContent-объект (кодом, сгенерированным JSP-компилятором) для захвата вычисления тела. Код, сгенерированный JSP-компилятором, получает BodyContent-объект с помощью вызова метода pushBody текущего pageContext'а, который дополнительно сохраняет предыдущее значение out. Компилятор страницы возвращает этот объект через вызов метода popBody класса PageContext; этот вызов также восстанавливает значение out.
Этот интерфейс предоставляет одно новое свойство с setter-методом один новый метод акции.
Свойства
Имеется новое свойство, bodyContent, для получения BodyContent-объекта, в котором объект реализации JSP-страницы будет размещать результат вычисления (и повторного вычисления, если нужно) тела. Setter-метод (setBodyContent) будет вызываться только в том случае, если doStartTag() возвращает EVAL_BODY_BUFFERED.
Методы
В дополнение к setter-методу для свойства bodyContent имеется новый метод акции: doInitBody(), который вызывается сразу после setBodyContent() и перед вычислением тела. Этот метод будет вызываться только в том случае, если doStartTag() возвращает EVAL_BODY_BUFFERED.
Жизненный цикл
Детали жизненного цикла показаны на диаграмме переноса. Исключения, вызываемые при вычислении doStartTag(), setBodyContent(), doInitBody(), BODY, doAfterBody(), прерывают выполнение и помещаются на верх стэка, если только обработчик тэга не реализует интерфейс TryCatchFinally; см. детали об этом интерфейсе.
Пустая и Непустая Акция
Если TagLibraryDescriptor-файл указывает, что акция обязана всегда иметь пустую акцию, через вхождение <body-content> - "empty", то метод doStartTag() обязан возвратить SKIP_BODY. В ином случае, метод doStartTag() может возвратить SKIP_BODY, EVAL_BODY_INCLUDE или EVAL_BODY_BUFFERED.
Если возвращено SKIP_BODY, тело не вычисляется и вызывается doEndTag().
Если возвращено EVAL_BODY_INCLUDE, setBodyContent() не вызывается, doInitBody() не вызывается, тело вычисляется и "передаётся/passed through" текущему out, doAfterBody() вызывается, а затем, после 0 или более итераций, вызывается doEndTag().
Если возвращено EVAL_BODY_BUFFERED, вызывается setBodyContent(), вызывается doInitBody(), тело вычисляется, вызывается doAfterBody(), а затем, после 0 или более итераций, вызывается doEndTag().
Поле. Резюме. | |
static int
|
EVAL_BODY_BUFFERED
Запрашивается создание нового буфера, BodyContent, в котором вычисляется тело этого тэга. |
static int
|
EVAL_BODY_TAG
Не рекомендуется. Как и в Java JSP API 1.2, использовать BodyTag.EVAL_BODY_BUFFERED или IterationTag.EVAL_BODY_AGAIN. |
Поля, унаследованные из класса javax.servlet.jsp.tagext.IterationTag |
EVAL_BODY_AGAIN
|
Поля, унаследованные из класса javax.servlet.jsp.tagext.Tag |
EVAL_BODY_INCLUDE,
EVAL_PAGE,
SKIP_BODY,
SKIP_PAGE
|
Метод. Резюме. | |
void
|
doInitBody
()
Подготавливает вычисление тела. |
void
|
setBodyContent
(BodyContent b)
Устанавливает свойство bodyContent. |
Методы, унаследованные из интерфейса javax.servlet.jsp.tagext.IterationTag |
doAfterBody
|
Методы, унаследованные из интерфейса javax.servlet.jsp.tagext.Tag |
doEndTag,
doStartTag,
getParent,
release,
setPageContext,
setParent
|
Поле. Детали. |
public static final int EVAL_BODY_TAG
public static final int EVAL_BODY_BUFFERED
Метод. Детали. |
public void setBodyContent(BodyContent b)
Если setBodyContent вызывается, значение неявного объекта out уже было изменено в pageContext-объекте. Передаваемый BodyContent-объект не будет содержать в себе данных, но может быть использован повторно (и зачищен) после некоторого предыдущего вызова.
BodyContent-объект является доступным и имеет соответствующее содержимое до момента сразу после вызова метода doEndTag - в этом случае он может быть снова использован повторно.
b
- BodyContentpublic void doInitBody() throws JspException
JSP-контейнер будет ресинхронизировать любые значения переменных, которые обозначены как таковые в TagExtraInfo, после вызова doInitBody().
|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЭЙМЫ БЕЗ ФРЭЙМОВ | ||||||||
РЕЗЮМЕ: ВНУТРЕННИЙ | ПОЛЕ | КОНСТРУКТОР | МЕТОД | ДЕТАЛИ: ПОЛЕ | КОНСТРУКТОР | МЕТОД |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |