JSP.10.5.9 VariableInfo
Синтаксис
public class VariableInfo
Описание
Информация о переменных скриптинга, которые создаются/модифицируются тэгом (на этапе прогона). Эта информация предоставляется классами TagExtraInfo и используется фазой трансляции JSP.
Переменные скриптинга, генерируемые специальной акцией, могут иметь значения области видимости page, request, session и application.
Имя класса (VariableInfo.getClassName) в возвращаемых объектах может использоваться для определения типов переменных скриптинга. В связи с этим специальная акция не может создавать переменную скриптинга примитивного/базового типа. Чтобы обойти это, используйте “boxed/боксовые” типы.
Имя класса может быть Полным Квалифицированным Именем Класса, или кратким именем класса.
Если предоставляется Полное Квалифицированное Имя Класса, оно должно ссылаться на класс, находящийся в CLASSPATH для Web-Приложения (см. спецификацию Servlet 2.3 - как правило это WEB-INF/lib и WEB-INF/classes). Невыполнение этого приводит к ошибке времени трансляции.
Если дано краткое имя класса в объектах VariableInfo, тогда имя класса обязано быть именем public-класса в контексте директив import страницы, на которой специальная акция появилась (будет проверяться, имеется ли словоблудие JLS для ссылки на него). Класс обязан также быть в CLASSPATH для Web-Приложения (см. спецификацию Servlet 2.3 - как правило это WEB-INF/lib и WEB-INF/classes). Невыполнение этого приводит к ошибке времени трансляции.
Использование Комментариев
Часто полное квалифицированное имя класса ссылается на класс, который известен библиотеке тэгов и, следовательно, находится в том же JAR-файле, что и обработчики тэгов. В большинстве других случаев оно ссылается на класс, который находится на платформе, на которой построен JSP-процессор (типа J2EE).
Употребление полных квалифицированных имён в такой манере делает их использование относительно устойчивым к ошибкам конфигурации.
Краткое имя обычно генерируется библиотекой тэгов на базе некоторых атрибутов, передаваемых от пользователя специальной акции (автора), и это, соответственно, менее надёжно: например, отсутствие директивы import в ссылающейся JSP-странице приведёт к неверному краткому имени класса и к ошибке трансляции.
Протокол Синхронизации
Результатом вызова getVariableInfo является массив объектов VariableInfo. Каждый такой объект описывает переменную скриптинга, предоставляя её имя, тип, указывая, является ли переменная новой или нет, и какова её область видимости. Область видимости лучше видна на рисунке:
Спецификация JSP 1.2 определяет интерпретацию трёх значений:
NESTED, если переменная скриптинга доступна между начальным и конечным тэгами акции, которая определяет её.
AT_BEGIN, если переменная скриптинга доступна из начального тэга акции, которая определяет её, до достижения предела видимости.
AT_END, если переменная скриптинга доступна после конечного тэга акции, которая определяет её, до достижения предела видимости.
Значение области видимости переменной предполагает, какие методы влияют на значение и, следовательно, где нужна синхронизация:
для NESTED, после doInitBody и doAfterBody для обработчика тэга, реализующего BodyTag, и после doStartTag - в противном случае.
для AT_BEGIN, после doInitBody, doAfterBody и doEndTag для обработчика тэга, реализующего BodyTag, и doStartTag и doEndTag - в противном случае.
для AT_END, после метода doEndTag.
Информация о Переменной в TLD
Информация переменной скриптинга может быть также непосредственно кодирована для большинства случаев в Tag Library Descriptor путём использования субэлемента <variable> элемента <tag>. См. спецификацию JSP.
JSP.10.5.9.36 Поля
public static final int AT_BEGIN
Информация области видимости о том, что переменная скриптинга видна после начального тэга.
public static final int AT_END
Информация области видимости о том, что переменная скриптинга видна после конечного тэга.
public static final int NESTED
Информация области видимости о том, что переменная скриптинга видна только между начальным/конечным тэгами.
JSP.10.5.9.37 Конструкторы
public VariableInfo(java.lang.String varName, java.lang.String className, boolean declare, int scope)
Конструктор. Эти объекты могут быть созданы (на этапе трансляции) экземплярами TagExtraInfo.
Параметры:
id - имя переменной скриптинга.
className - имя переменной скриптинга (наверное, класса??).
declare - если true, это новая переменная (в некоторых языках это требует объявления).
scope - обозначение лексической области видимости переменной.
JSP.10.5.9.38 Методы
public java.lang.String getClassName()
public boolean getDeclare()
public int getScope()
public java.lang.String getVarName()