Спецификация Java Server Pages 1.2


JSP.10.5 Классы Времени Трансляции - часть 2


TagLibraryValidator является дополнением к спецификации JSP 1.2 и заканчивается очень открыто, будучи значительно более мощным, чем механизм TagExtraInfo. JSP-страница представляется через объект PageData, который абстрагирует XML-просмотр JSP-страницы. Экземпляр PageData будет предоставлять InputStream (только для чтения) в странице. Последующие спецификации могут добавить другие просмотры страницы (DOM, SAX, JDOM являются кандидатами). В настоящее время эти просмотры могут генерироваться из InputStream и, возможно, кэшироваться для повышения производительности (вызов просмотра страницы делается "только для чтения").


JSP-контейнер может по выбору поддерживать атрибут jsp:id для более качественной проверки ошибок. Если атрибут поддерживается, контейнер будет отслеживать JSP-страницы по мере передачи контейнеру и назначать каждому элементу уникальный идентификатор “id”, который передаётся как значение атрибута jsp:id. Каждый XML-элемент, доступный в XML-просмотре, будет расширен этим атрибутом. TagLibraryValidator может затем использовать этот атрибут в одном или более объектах ValidationMessage. Затем контейнер, в свою очередь, может использовать эти значения для предоставления более точной информации о местонахождении ошибки.


Детали Проверки


Более детально, проверка выполняется так:


Во-первых, JSP-страница разбирается с использованием информации в TLD. На этом этапе проверяются атрибуты - мандатные и по выбору/optional.


Во-вторых, для всех директив taglib страницы, в лексическом порядке их появления, вызывается класс их ассоциированного проверщика (если имеется). Это вызывает выполнение нескольких дополнительных шагов.

Первый шаг выполняется для получения инициализированного экземпляра проверщика путём, либо:

  • конструирования нового экземпляра и вызова в нём setInitParameters(), либо

  • получения существующего объекта, который не используется, вызова в нём release() и вызова следом в нём же setInitParameters(), либо

  • локализации существующего объекта, который не используется, в котором необходимый setInitParameters() уже вызван.

Имя класса - такое, какое указано в элементе <validator-class>, а Map, переданный в setInitParameters() - такой, как описано в элементе <init-params>. Предполагается, что все классы TagLibraryValidator сохраняют свои initParameters до тех пор, пока не будут установлены новые или пока release() не будет в них вызван.


Второй дополнительный шаг выполняет реальную проверку. Это делается через вызов метода validate() с префиксом, uri и PageData, которые соответствуют проверяемому экземпляру директивы taglib и PageData, представляющему эту страницу.


Последний дополнительный шаг вызывает метод release() в тэге проверщика, когда он уже больше не нужен.

Этот метод освобождает все ресурсы.


Наконец, после проверки всех классов проверщика библиотеки тэгов, классы TagExtraInfo для всех тэгов будут проверяться вызовом их метода isValid. Порядок вызова этого метода не определён.




Начало  Назад  Вперед