Иногда переменные, которые вы хотите сделать доступными из вашего тэга для автора JSP страницы, могут быть немного сложны в определении в статическом TLD файле. Имена переменных могут зависеть от некоторых условий состояния, или вы можете пожелать подтвердить действительность JSP страницы. Например, вы можете пожелать убедиться, что автор JSP страницы не указал некорректных атрибутов или не поместил дочерний тэг в неверный родительский тэг. Для функциональности такого рода применение тэга <variable> в файле дескриптора библиотеки тэга более не адекватно.
В приведенном выше primenumbertag вместо применения тэга <variable> мы могли бы использовать следующее:
Этот тэг говорит контейнеру, что у вас есть полностью отдельный класс, описывающий ваши атрибуты за вас.
На самом деле все не так плохо, как это звучит, необходимый вам класс очень прост и вам, чаще всего, не нужно перекрывать более одного метода. В случае класса 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.
← | Классы Тэгов | Повторный Обзор Дескриптора Библиотеки | → |