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

         

JSP.10.2 Обработчики Тэгов, которые хотят получить Доступ к Содержимому своего Body/Тела


Вычисление тела передаётся в объект bodyContent, который затем становится доступным обработчикам тэгов, реализующим интерфейс BodyTag. Класс BodyTag-Support даёт базовый класс, упрощающий написание этих обработчиков. Если обработчик Tag хочет иметь доступ к содержимому его тела, то он обязан реализовывать интерфейс BodyTag. Этот интерфейс расширяет IterationTag, предоставляя два дополнительных метода setBodyContent(bodyContent) и doInitBody() и ссылаясь на объект типа bodyContent.

bodyContent это подкласс JspWriter'а, имеющий несколько дополнительных методов для конвертации его содержимого в String, вставки этого содержимого в другой JspWriter, получения Reader в его содержимое и очистки содержимого. Его семантика гарантирует, что размер буфера никогда не будет превышен.


Реализация JSP-страницы создаст bodyContent, если метод doStartTag() возвращает EVAL_BODY_BUFFERED. Этот объект будет передан методу doInitBody(); затем тело тэга будет обсчитано, и в ходе этого вычисления out будет привязан к bodyContent, только что переданному обработчику BodyTag.


Затем doAfterBody() будет обсчитан. Если этот метод вернёт SKIP_BODY, больше никаких вычислений тела выполнено не будет; если метод вернёт EVAL_BODY_AGAIN, тогда тело будет обсчитано, а doAfterBody() будет вызван вновь.


Содержимое экземпляра bodyContent остаётся доступным, пока не будет вызван его ассоциированный метод doEndBody().

Обычно bodyContent используется для извлечения его содержимого в String и последующего использования этой String в качестве значения для некоторой операции. Другой обычный способ использования - взять его содержимое и поместить его в поток вывода/out Stream, который был верным/действующим/valid в момент обнаружения тэга (который доступен из объекта PageContext, переданного обработчику в setPageContext).
 



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