Javax.servlet.jsp.tagext Интерфейс BodyTag
Все Известные Реализующие Классы:
public abstract interface BodyTagextends
Интерфейс 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().
Поле. Резюме. | |
staticint | Запрашивается создание нового буфера, BodyContent, в котором вычисляется тело этого тэга. |
static int | Не рекомендуется. Как и в Java JSP API 1.2, использовать BodyTag.EVAL_BODY_BUFFERED или IterationTag.EVAL_BODY_AGAIN. |
Поля, унаследованные из класса javax.servlet.jsp.tagext. |
Поля, унаследованные из класса javax.servlet.jsp.tagext. |
, , , |
Метод. Резюме. | |
void | () Подготавливает вычисление тела. |
void | ( b) Устанавливает свойство bodyContent. |
Методы, унаследованные из интерфейса javax.servlet.jsp.tagext. |
Методы, унаследованные из интерфейса javax.servlet.jsp.tagext. |
, , , , , |
Поле. Детали. |