Главная » Java, Web » Ярлыки описания переменных сценариев Обработчики ярлыков

0

Обработчик ярлыков используются также и для того, чтобы создавать объекты, доступные из JSP-страницы, к которым можно передавать переменные сценариев. При этом часто используется метод pageContext.setAttribute (name, value, scope) или метод pageContext.setAttribute(name, value). Атрибут, передаваемый ярлыку, содержит имя переменной объекта. Это имя может быть получено при помощи метода get. Значение переменной объекта может зависеть от самого содержимого, которое можно получить при помощи метода pageContext .getAttribute (name, scope). Иными словами, обработчик ярлыка получает значение переменной и обрабатывает ее определенным образом. А затем задает значение переменной с использованием метода pageContext.setAttribute(name, object). В табл. 3.4 приведены поля доступности переменных для различных объектов.

Таблица 3.4. Области видимости объектов

Имя

Откуда доступно

Срок жизни

Page

текущая страница

пока не отправлен ответ пользователю или не отправлен запрос на новую страницу

Request

текущая страница, а также страницы, на которые есть ссылки, как на вставки, или страницы, на которые производится переадресация

пока не отправлен ответ пользователю

Session

текущий запрос или подзапрос из того же браузера

пока не истек срок действия пользовательской сессии

Application

текущий и последующий запрос из того же самого Web-приложения

в течение срока жизни приложения

Информация о переменных сценария

Приведем пример, в котором используется переменная сценария

peremennaya:

<yarlyk:whatever id="реremannaya" name="реremennayaName" property="pe remennaya Property"

type="database.PeremannayaProchee"/>

<font color="red" size="+2">

<%=messages.getString("Imya")%> <strongxjsp:getProperty name="peremennaya" p rope rt y="t i11e"/></st rong> <br>&nbsp;<br> </font>

Если во время трансляции JSP-страницы встречается созданный выше ярлык, то генерируется код, в котором синхронизируется переменная сценария с объектом, на который она ссылается. Для этого необходима информация о переменной, а именно:

?       имя переменной;

?       класс переменной;

?       ссылается переменная на существующий объект или на новый объект;

?       доступность переменной.

Эта информация может быть задана двумя способами. Можно создать элемент variable в файле TLD либо создать дополнительный класс для описания ярлыка, указав его в ярлыке tei-ciass в файле TLD. Использование элемента variable гораздо проще, но этот способ предоставляет значительно менее гибкие возможности.

Элемент variable

Элемент variable содержит дочерние элементы:

?       name-given: имя переменной (константа);

?       name-from-attribute: имя атрибута, значение этого атрибута, которое будет получено во время трансляции, станет именем переменной.

Необходимо задать один из этих элементов. Прочие элементы являются необязательными:

?       variable-class: полное имя класса переменной, по умолчанию

j ava.lang.String;

?       declare: ссылается ли переменная на новый объект, по умолчанию true;

?       scope: область доступности переменной, по умолчанию nested. Области доступности для переменных приведены в табл. 3.5.

Таблица 3.5. Переменные сценариев, области доступности

Значение

Доступность

Методы

NESTED

от открывающего до закрывающего ярлыка

в методах doinitBody и doAfterBody при имплементации

BodyTag;или в doStartTag

Таблица 3.5 (окончание)

Значение

Доступность

Методы

AT BEGIN

от открывающего ярлыка

в методах doInitBody, doAfterBody,

 

до конца страницы

doEndTag при имплементации

 

 

BodyTag; или в doStartTag и

 

 

doEndTag

AT END

после закрывающего яр

в методе doEndTag

 

лыка до конца страницы

 

Еще один пример с ярлыком:

<tag>

<variable>

<name-from-attribute>id</name-from-attribute> <variable-class>database.peremennayaProchee</variable-class> <declare>true</declare> <scope>AT_BEGIN</s cope> </variable> </tag>

Класс TagExtralnfo

Класс дополнительной информации о ярлыке создается на основе класса javax.servlet.jsp.TagExtralnfo. В нем должна содержаться имплементация метода getvariablelnfo, который возвращает массив объектов variablelnfo со следующей информацией:

?       переменная класса;

?       ссылается ли переменная на новый объект;

?       доступность переменной.

В приведенном ниже примере (листинг 3.21) мы создали класс описания ярлыка, а затем вставили ссылку на него в файле TLD.

Листинг 3.21. Класс дополнительного описания ярлыка                                                         I

public class ZadaemTei extends TagExtralnfo {

public Variablelnfo[] getvariablelnfo(TagData data) { String tip = data.getAttributeString("type"); if (tip == null)

tip = "java.lang.Object"; return new Variablelnfo[] {

new Variablelnfo(data.getAttributeString("id"), tip, true,

Variablelnfo.AT_BEGIN)

} ;

}

}

Следующий фрагмент описывает ярлык с учетом того, что существует класс дополнительного описания ярлыка, класс zadaemTei: <tei-class>put’_k_klassu.ZadaemTei </tei-class>

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии