русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Тэги внутри Тэгов


Дата добавления: 2015-07-09; просмотров: 463; Нарушение авторских прав


Тэги также могут помещаться внутри других тэгов, что дает нам мощную структурную функциональность, а также возможность создавать вывод при условии, когда дочерние тэги вычисляются только при определенных условиях, устанавливаемых в их родительских тэгах. JSTL, Java Standard Tag Libraries, в полной мере использует это, но давайте взглянем на то, как мы можем создать подобный тэг самостоятельно.

Теперь, когда вы чувствуете себя немного более комфортно с исключениями в тэгах с помощью API JSP, нам необходимо только рассмотреть ключевые моменты следующего тэга. Предположим, что вы используете тэг генерации простых чисел, и вы хотите проверить каждое простое число, чтобы убедиться, что это простое число типа "Ферма" и показать его в браузере. Числа Ферма - это такие числа, которые могут быть представлены, как "2 в степени 2 в степени n плюс 1", где n - целое число. Если ваши глаза тускнеют от математических описаний, не беспокойтесь. Достаточно сказать, что некоторые простые числа являются простыми числами Ферма, а другие нет. Фактически, только числа 3, 5, 17, 257, 65537 являются известными простыми числами Ферма.

Так как тэг проверки простых чисел Ферма предназначен, чтобы выполнять проверку каждого числа, сгенерированного тэгом простых чисел, очевидно, что нет смысла, чтобы тэг fermatprimetag существовал вне тэга primenumtag. Это значит, что он должен быть определен, как дочерний тэг, что помешает пользователям библиотеки тэгов, содержащей этот тэг, совершить ошибку и означает, что вы можете сделать определенные допущения. Это можно проиллюстрировать в следующем коде. Вот класс тэга:

public class FermatPrimeTag extends BodyTagSupport {

public int doStartTag() throws JspException {

PrimeNumTag parentTag =(PrimeNumTag)findAncestorWithClass(this,



PrimeNumTag.class);

if (parentTag == null) {

throw new JspException("Tag should be nested in

\"primenumtag\" Tag");

}

return EVAL_BODY_TAG;

}

 

public int doAfterBody() throws JspException {

 

Integer prime =(Integer)pageContext.getAttribute("value");

String s = bodyContent.getString();

try

{

if (PrimeUtilities.isFermatPrime(prime.intValue())) {

bodyContent.clearBody();

bodyContent.println(s + " (is a Fermat Prime Number) ");

}

bodyContent.writeOut(bodyContent.getEnclosingWriter());

} catch(IOException ioe) {

throw new JspException(ioe.getMessage());

}

return SKIP_BODY;

}

}


Обратите внимание на метод findAncestorWithClass( ). Он рекурсивно проходит всю иерархию тэгов в поисках родителей до тех пор, пока не найдет того, кто соответствует классу, который вы ищите. Этот метод работает посредством рекурсивного вызова метода getParent( ). Это еще одна часть управления тэгом, которую мы наследуем от класса BodyTagSupport. Если вы не будете наследовать от этого класса, вам необходимо реализовать методы setParent( ) и getParent( ) самостоятельно. Формирователь вызывается контейнером и передает вам ссылку на родительский тэг. Вы должны были бы сохранять эту ссылку для обработки запроса метода getParent( ).

Возможны случаи, когда все это необходимо выполнять самостоятельно, к счастью они бывают редко. Теперь же вы можете быть уверены в мудрости при создании своих собственных тэгов посредством наследования от BodyTagSupport.

Если метод findAncestorWithClass( ) не найдет родительский тэг подходящего типа, будет выброшено исключение, которое появится в окне клиентского браузера. Это скажет пользователю JSP библиотеки, что он использует тэг неправильно.

Другая важная вещь, которую необходимо заметить, это то, что этот тэг вызывает метод getAttribute( ) для объекта pageContext, чтобы получить значение атрибута с именем value. Это тот атрибут, который добавляется в контекст страницы родительским тэгом primenumtag. Мы получаем доступ к нему по той причине, что наш дочерний тэг fermatprimetag и наш родительский тэг primenumtag находятся на одной странице и поэтому разделяют один и тот же объект pageContext. Помните, что вы все еще должны очищать содержимое тела и получать вложенный writer. Реально здесь вы заменяете существующее простое число на строку, отображающую простое число и сообщение, гласящее ".. is a Fermat Prime Number.".

Этот тэг намного проще, чем его родитель по той причине, что ему нет необходимости определять какой-либо механизм цикла. Этот тэг будет трактоваться, как совершенно новый тэг каждый раз, когда родительский тэг будет совершать итерацию, так что метод doAfterBody( ) и другие методы будут вызываться повторно.



<== предыдущая лекция | следующая лекция ==>
Итеративные тэги | Классы Тэгов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.001 сек.