Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТАБЛИЦА ТЭГОВ HTML.doc
Скачиваний:
25
Добавлен:
12.05.2015
Размер:
401.41 Кб
Скачать

Использование классов TagExtraInfo

Иногда переменные, которые вы хотите сделать доступными из вашего тэга для автора JSP страницы, могут быть немного сложны в определении в статическом TLD файле. Имена переменных могут зависеть от некоторых условий состояния, или вы можете пожелать подтвердить действительность JSP страницы. Например, вы можете пожелать убедиться, что автор JSP страницы не указал некорректных атрибутов или не поместил дочерний тэг в неверный родительский тэг. Для функциональности такого рода применение тэга <variable> в файле дескриптора библиотеки тэга более не адекватно.

В приведенном выше primenumbertag вместо применения тэга <variable> мы могли бы использовать следующее:

<teiclass>cx2.tags.PrimeNumTagExtraInfo</teiclass>

Этот тэг говорит контейнеру, что у вас есть полностью отдельный класс, описывающий ваши атрибуты за вас.

На самом деле все не так плохо, как это звучит, необходимый вам класс очень прост и вам, чаще всего, не нужно перекрывать более одного метода. В случае класса PrimeNumTag вы можете указать класс, называемый PrimeNumTagExtraInfo, в соответствии с приведенной ниже конвенцией и вот такой реализацией:

package cx2.tags;

import javax.servlet.jsp.tagext.TagExtraInfo;

import javax.servlet.jsp.tagext.TagData;

import javax.servlet.jsp.tagext.VariableInfo;

 

public class PrimeNumTagExtraInfo extends TagExtraInfo {

   public VariableInfo[] getVariableInfo(TagData data) {

      VariableInfo[] vi = new VariableInfo[1];

      vi[0] = new VariableInfo("value",

                              "Integer",

                              true,

                              VariableInfo.AT_BEGIN);

      return vi;

   }

}

Обратите внимание, что класс расширяет класс TagExtraInfo, находящийся в пакете javax.servlet.jsp.tagext. Метод getVariableInfo( ) создает массив объектов VariableInfo, описывающих имя, тип, должна или нет переменная быть декларирована и область видимости переменной. Это все соответствует элементам, перечисленным в тэге <variable>. Массив объектов VariableInfo имеет размер 1 потому, что есть только одна переменная.

Объект TagData используется в качестве параметра для метода getVariableInfo( ), но он разработан для использования в следующих реализациях. Некоторая часть функциональности предназначена для поддержки того, что пока не поддерживается в JSP.

Повторный Обзор Дескриптора Библиотеки

Если вы посмотрите еще раз на дескриптор библиотеки тэга, который мы использовали для приведенных выше тэгов, вы обнаружите, что вы знакомы с первыми двумя строками после прочтения главы об XML из этой книги. Тэг <taglib> понятен сам по себе, он определяет начало библиотеки тэга. Обычно у вас будет один такой тэг на каждый TLD дескриптор. Он имеет несколько вложенных элементов:

  • tlibversion - определяет номер версии, который может помочь программисту применять некоторую проверку во время трансляции, получая возможность читать номер версии.

  • jspversion - определяет номер версии, который помогает контейнеру определить, JSP какой версии предполагается использовать, так что если необходимо, можно отключить большинство дополнительных особенностей или выполнить специальную операцию, которую необходимо выполнить для обратной совместимости.

  • shortname - определяет легкое в использование имя, которое может использоваться в GUI средах в качестве префикса к любому генерируемому тэгу или директиве...

  • uri - определяет уникальный идентификатор для библиотеки тэга. Обычно это полезно определять в форме HTTP URL, как в примере этой главы, но это не значит, что будет найдена соответствующая web страница, не смотря на то что это уникально.

  • displayname - определяет имя, читабельное для человека, которое будет полезно при отображении в панели инструментов в GUI среде разработки.

  • small-icon - определяет не обязательный файл изображения, подходящий для среды разработки при отображении в панели инструментов.

  • large-icon - определяет необязательный файл изображения, подходящий для среды разработки при отображении в панели меню.

  • description - определяет описание библиотеки тэга, которое может использовать GUI среда разработки для описания этой библиотеки в панели инструментов или в меню.

  • validator - определяет не обязательный класс, который может быть использован для проверки истинности тэга путем проверки его параметров и даже других тэгов на этой же JSP странице, чтобы убедиться, что автор JSP использует их корректно.

  • listener - определяет не обязательный класс, который реализует класс слушателя для сервлета, созданного из JSP страницы. Класс должен реализовывать один из интерфейсов для слушателей сервлета, например javax.servlet.http.HttpSessionListener.

Тэг <taglib> должен иметь, как минимум, один вложенный элемент <tag>. Смысл в том, что вы вряд ли захотите иметь библиотеку тэга без тэгов. Она не будет полезной.

Сам элемент tag имеет несколько влеженных элементов, некоторые из них вы уже видели раньше в этой главе:

  • name - определяет уникальное имя для этого тэга или действия.

  • tagclass - определяет полностью квалифицированное имя класса, который реализует интерфейс обработчика тэга javax.servlet.jsp.tagext.Tag.

  • teiclass - определяет не обязательный класс дополнительной информации, который содержит информацию для проверки действительности переменных этого тэга. Класс обязан реализовывать интерфейс javax.servlet.jsp.tagext.TagExtraInfo.

  • bodycontent - Тип содержимого, находящегося в теле тэга, допустимы: пустое значение, JSP и tagdependant. Елси указан tagdependant, то содержимое будет передаваться без интерпретаций в обработчик тэга. Это может быть полезно при встраивании других языков, например SQL запросов.

  • displayname - Короткое, понятное человеку имя, которое может быть отображено в GUI среде разработки.

  • small-icon - определяет графический файл, подходящий для среды разработки при оторбажении в панели инструментов.

  • large-icon - определяет графический файл, подходящий для среды разработки при отображении в панели меню.

  • description - определяет дополнительную, не обязательную информацию, специфичную для тэга, и как он может быть использован с другими тэгами. Это выполняется путем предоставления класса, который может применять ограничения. Класс должен быть подклассом одной из реализаций тэга.

  • example - определяет не обязательный пример использования тэга, подходящий для среды разработки при отображении в меню помощи.

Последние два субэлемента тэга <tag> могут сами иметь вложенные элементы.

variable - определяет информацию для переменной скрипта, определенной в этом тэге. Может быть заменено тэгом teiclass и предоставлено классом дополнительной информации тэга.

Вложенные элементы для variable:

  • name-given - определяет имя переменной, как константу

  • name-from-attribute - определяет имя атрибута, который даст имя переменной во время трансляции.

  • variable-class - определяет тип переменной. Значение по умолчанию java.lang.String.

  • declare - должна быть переменная задекларирована или нет. Значение по умолчанию True.

  • scope - область видимости переменной. NESTED, AT_BEGIN или AT_END.

  • attribute - определяет информацию для атрибута, используемого этим произвольным тэгом.

Вложенными элементами для attribute являются:

  • name - определяет имя атрибута.

  • required - определяет является ли атрибут обязательным или нет.

  • rtexprevalue - определяет может или нет атрибут передаваться, как выражение, которое будет вычисляться во время выполнения.

  • type - определяет тип атрибута. Значение по умолчанию - String, что наиболее полезно.

  • description - не обязательное описание атрибута.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]