Спецификация Java Server Pages 1.2

       

JSP.10.2.2 BodyTag



Синтаксис

public interface BodyTag extends IterationTag

Все Суперинтерфейсы: IterationTag, Tag

Все Известные Реализующие Классы: BodyTagSupport


Описание

Интерфейс BodyTag расширяет IterationTag путём определения дополнительных методов, позволяющих обработчику тэга манипулировать содержимым, обсчитывая его тела.

Обработчик тэга отвечает за обработку содержимого body. Например, обработчик тэга может взять содержимое тела, конвертировать его в 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(), doInit-Body(), 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() не вызывается, тело обсчитывается и “передаётся” текущему out, затем вызывается doAfterBody() и, после 0 или более итераций, вызывается doEndTag().

Если возвращено EVAL_BODY_BUFFERED, setBodyContent() вызывается, doInit-Body()

вызывается, тело обсчитывается, вызывается doAfterBody() и, после 0 или более итераций, вызывается doEndTag().

JSP.10.2.2.11 Поля


public static final int EVAL_BODY_BUFFERED

Запрашивается создание нового буфера, bodyContent, в котором происходит обсчёт тела данного тэга.

Возвращается из doStartTag, если класс реализует BodyTag.

Неверным является значение doStartTag, если класс не реализует BodyTag.

public static final int EVAL_BODY_TAG

Не рекомендуется. Так как Java JSP API 1.2 использует BodyTag.EVAL_BODY_BUFFERED или IterationTag.EVAL_BODY_AGAIN.

Не рекомендуемая для использования константа, которая имеет то же значение, что и EVAL_BODY_BUFFERED и EVAL_BODY_AGAIN. Помечена как не рекомендуемая с целью продвижения этих двух различных терминов, которые являются более описательными.

JSP.10.2.2.12 Методы


public void doInitBody()

Подготавливает обсчёт/вычисление тела/body. Этот метод вызывается объектом реализации JSP-страницы после setBodyContent и до первого вычисления тела. Этот метод не вызывается для пустых тэгов или непустых тэгов, чей метод doStartTag() возвращает SKIP_BODY или EVAL_BODY_INCLUDE.




JSP- контейнер будет ресинхронизировать любые значения переменных, которые обозначены как таковые в TagExtraInfo, после вызова doInitBody().

Вызывает:JspException

public void setBodyContent(bodyContent b)

Устанавливает свойство bodyContent. Этот метод вызывается объектом реализации JSP-страницы максимум один раз на один вызов акции. Этот метод будет вызван до doInitBody. Этот метод не будет вызван для пустых тэгов и для непустых тэгов, чей метод doStartTag() возвращает SKIP_BODY или EVAL_BODY_INCLUDE.

Если setBodyContent вызывается, значение неявного объекта out уже было изменено в объекте pageContext. Передаваемый объект bodyContent не будет содержать данных, но может использоваться повторно (и очищаться) после некоторого предыдущего вызова.

Объект bodyContent доступен с соответствующим содержимым, пока не вызван метод doEndTag, после чего он может быть использован повторно.

Параметры:

b - bodyContent


Содержание раздела