Главная » Java, Web » Элементы, содержащие тело элемента Обработчики ярлыков

0

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

Обработчики ярлыков без взаимодействия с телом

Если обработчик ярлыка не взаимодействует с телом элемента, описываемого при помощи этого ярлыка, то обработчик создается на основе интерфейса Tag или как класс, производный от TagSupport. Когда необходимо взаимодействие с телом элемента, то метод doStartTag должен возвращать значение eval_body_include. Если обработка тела не требуется, этот метод возвращает значение skip_body.

При необходимости итеративной обработки содержимого элемента, обработчик имплементирует интерфейс iterationTag или же создается на основе TagSupport. Если в процессе обработки тела элемента будет установлено, что требуется повторная обработка тела, то методы doStartTag

и doAfterBody должны возвратить значение eval_body_again.

Обработчики ярлыков со взаимодействием с телом

Если существует необходимость осуществлять взаимодействие между обработчиком ярлыка и телом элемента, то обработчик ярлыка имплементирует BodyTag или создается на основе BodyTagSupport. При этом имплементиру- ются методы doinitBody и doAfterBody. Эти методы осуществляют взаимодействие с телом элемента. Для работы с телом элемента используется несколько методов, например, методы getstring и getReader. С помощью этих методов можно извлечь информацию из тела элемента, а метод writeOut (out) будет полезен тогда, когда необходимо вывести полученную информацию в поток вывода. Вместе с методом writeOut удобно использовать метод getPreviousOut (для определения аргумента, передаваемого методу writeOut). Важно иметь в виду, что тогда, когда необходимо производить обработку тела элемента, метод doStartTag должен возвратить значение eval_body_buffered. (Если обработка тела не требуется, то этот метод возвращает skip_body.)

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

?       Метод doinitBody.

Метод doinitBody вызывается до того, как тело элемента будет проанализировано. Метод используется для инициализации всех необходимых параметров.

?       Метод doAfterBody.

Метод doAfterBody вызывается после того, как будет проанализировано тело элемента. Этот метод возвращает значение, которое информирует о том, требуется ли последующая обработка. При необходимости повторной обработки тела элемента (например, если мы используем ярлык- итератор), этот метод возвращает значение eval_body_buffered. Если же повторная обработка не нужна, то метод должен возвращать значение skip body.

? Метод release.

Обработчик ярлыка должен после работы высвободить все ресурсы. Это делается с использованием метода release.

Ниже приводится пример обработчика ярлыка (листинг 3.20), описывающего элемент, содержащий тело. Обработчик читает содержимое тела элемента (в нашем случае тело содержит SQL-запрос) и передает то, что было прочитано, объекту (этот объект может, например, выполнить данный запрос). После того как запрос прочитан, повторное чтение тела не потребуется, поэтому метод doAfterBody возвращает значение skip_body.

Листинг 3.20. Пример обработчика ярлыка со взаимодействием с телом элемента

public class QueryTag extends BodyTagSupport {

public int doAfterBody() throws JspTagException { BodyContent telo = getBodyContent(); // получаем тело telo в виде строки String strokazaprosa = telo.getString(); // очистка telo.clearBody() ; try {

Statement zapros = connection.createStatement(); result = zapros.executeQuery(strokazaprosa); } catch (SQLException e) { throw new JspTagException("QueryTag: " + e.getMessage());

}

return SKIP_BODY;

}

Элемент body-content

Если элемент содержит тело элемента, то в файле описания библиотеки необходимо указать тип содержимого этого элемента с использованием ярлыка body-content:

<body-content>JSPItagdependent</body-content>

Если содержимое элемента состоит из пользовательских ярлыков, заранее определенных ярлыков и HTML-текста, то такое содержимое считается содержимым JSP. Прочее содержимое, в том числе SQL-запросы, представляет собой содержимое, описание которого зависит от конкретного вида ярлыка, то есть является tagdependent. Этот ярлык не влияет на то, как будет обработано содержимое. Он служит для отображения типа содержимого элемента.

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии