Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Дейтел Х.М. -> "Технологии профаммирования на Java 2 Книга 3" -> 76

Технологии профаммирования на Java 2 Книга 3 - Дейтел Х.М.

Дейтел Х.М. , Дейтел П.Дж., Сантри С.И. Технологии профаммирования на Java 2 Книга 3 — М.: Бином-Пресс, 2003. — 672 c.
ISBN 5-9518-0051-Х
Скачать (прямая ссылка): tehprogrammjava220033.pdf
Предыдущая << 1 .. 70 71 72 73 74 75 < 76 > 77 78 79 80 81 82 .. 271 >> Следующая

Метод doAfterBody (строки 55-77) выполняет циклическую обработку тела тега guestlist. Контейнер JSP определяет, следует ли вызывать метод doAfterBody, на основе возвращаемого методом значення. Если doAfterBody возвращает EVAL_BODY_TAG, контейнер вызывает метод doAfterBody снова. Если doAfterBody возвращает SKIP-BODY1 контейнер прекращает обработку тела и вызывает метод doEndTag обработчика нестандартного тега для завершения собственной обработки. В строке 59 вызывается метод writeOut для переменной body Con tent (унаследованной от класса BodyTagSupport), чтобы обработать данные для первого клиента (сохраненные при вызове метода doStartTag). Переменная bodyContent
JavaServer Pages (JSP)
167
ссылается на объект класса BodyContent из пакета javax.servlet.jsp.tagext. Параметр, передаваемый методу writeOut, является результатом выполнения метода getPreviousOut (унаследованного от класса BodyTagSupport), который возвращает объект JspWriter для JSP-страницы, вызывающей нестандартный тег. Это позволяет нестандартному тегу формировать ответ клиенту с помощью того же потока вывода, который использует JSP-страница. Далее, в строке 68 вызывается метод clearBody для переменной bodyContent, чтобы гарантировать, что выведенное содержимое тега не будет обрабатываться как часть следующего вызова doAfter-Body. В строках 70-76 определяется, имеются ли еще в гостевой книге записи, подлежащие обработке. Если да, метод doAfterBody вызывает частный метод processNextGuest для получения данных для следующего гостя и возвращает значение EVAL_BODY_TAG, указывающее, что контейнер должен снова вызвать метод doAfterBody. В противном случае doAfterBody возвращает значение SKIP-BODY, чтобы завершить обработку тела.
Контейнер JSP не может создавать переменные в контексте страницы Page-Context, если ему не известны имена и типы этих переменных. Эта информация определяется классом, который носит то же имя, что и обработчик нестандартного тега, но заканчивается на Extrainfo (GuestBookTagExtralnfo на рис. 3.38). Классы Extrainfo расширяют класс TagExtralnfo (пакет javax.servlet.jsp.tagext). Контейнер использует информацию, задаваемую подклассом класса TagExtralnfo, для определения, какие переменные следует создать (или использовать) в контексте PageContext. Чтобы задать информацию о переменной, следует переопределить метод getVariablelnfo. Этот метод возвращает массив объектов Variableinfo, которые контейнер использует либо для создания новых переменных в контексте страницы PageContext, либо для того, чтобы дать возможность нестандартному тегу использовать существующие переменные в контексте страницы PageContext. Конструктор Variableinfo принимает четыре параметра: строку, представляющую имя переменной, строку, представляющую имя класса переменной, булево значение, указывающее, следует ли контейнеру создавать переменную (true, если да) и статическую целочисленную константу, задающую область видимости переменной на JSP-странице. В классе Variablelnfo определены константы NESTED, AT-BEGIN и AT-END. Константа NESTED указывает, что переменная может быть использована только в теле нестандартного тега. Константа AT-BEGIN указывает, что переменная может быть использована в любом месте JSP-страницы после начального тега нестандартного тега. Константа AT-END указывает, что переменная может использоваться в любом месте JSP-страницы после конечного тега нестандартного тега.
Прежде, чем использовать тег guestlist на JSP-странице, необходимо сообщить контейнеру JSP о теге, добавив его в библиотеку тегов. Для этого следует добавить элемент tag (см. рис. 3.39) в качестве дочернего элемента для элемента taglib в дескриптор advjhtpl-taglib.tld библиотеки тегов. Как и в предыдущем примере, элемент tag содержит элементы name, tagclass, bodycontent и info. В строках 10-12 вводится элемент teiclass для задания класса Extrainfo нестандартного тега.
Чтобы протестировать JSP-страницу customTagBody.jsp в Tomcat, скопируйте файл customTagBody.jsp и модифицированный файл advjhtpl-taglib.tld в каталог jsp, созданный в разделе 3.3. Скопируйте файлы GuestBookTag.class и GuestBookTagExtralnfo.class в каталог WEB-INF\classes Web-приложения advjhtpl на сервере Tomcat. [Замечание. Этот пример будет работать только в том случае, если в каталоге classes определена надлежащая структура каталогов пакета для классов GuestBookTag GuestBookTagExtralnfo.] Откройте Web-браузер и введите следующий URL, чтобы протестировать JSP-страницу customTagBody.jsp:
http://localhost:8080/advjhtpl/jsp/customTagBody.jsp
168
Глава З
1 Il Рис.3.38. GuestBookTagExtralnfo.Java
2// Класс, который определяет имена и типы переменных,
3 // создаваемых нестандартным обработчиком тегов GuestBookTag.
4 package com.deitel.advjhtpl.jsp.taglibrary; 5
6// Набор базовых пакетов Java
7 import javax.servlet.jsp.tagext. *;
8
9 public class GuestBookTagExtralnfo extends TagExtralnfo {
10
11 If метод, который возвращает информацию о переменных
12 // GuestBookTag, созданных для использования их на JSP-странице
Предыдущая << 1 .. 70 71 72 73 74 75 < 76 > 77 78 79 80 81 82 .. 271 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100