Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LectBL_DB_Theme3.doc
Скачиваний:
4
Добавлен:
15.08.2019
Размер:
103.94 Кб
Скачать

Додаткові набори тегів

Такі протоколи розмітки текстових документів, як HTML, мають строго регламентований набір тегів. Разом з тим, в ході розробки документів часто виникає потреба використовувати додаткові, спеціальні теги, які хоч і не були заявлені у відповідні специфікації, зате більшою мірою відповідають предметній області програми. З одного боку, подібні додаткові або custom теги можна розглядати як своєрідні макроси, які перед передачею документа клієнту будуть замінені еквівалентною комбінацією стандартних тегів. У іншому варіанті, за custom тегом може стояти певний фрагмент програмного коду. Наприклад, цілком звичайний одинарний тег може виявитися лічильником відвідин або меню, вміст якого залежить від тієї ролі, яку даний клієнт грає в бізнес-процесі.

Побудова custom тегів пов'язана з написанням певного програмного коду. Технологія JSP передбачає розміщення цього коду в окремому програмному модулі - бібліотеці custom тегів. Розробка подібних бібліотек може бути доручена стороннім компаніям. Підключення JSP сторінки до тієї або іншої бібліотеки custom тегів здійснюється за допомогою раніше описаної директиви taglib. Вказана директива пов'язує дескриптор відповідної бібліотеки з певним префіксом, який, у свою чергу, ідентифікує в тілі JSP сторінки всі custom теги з даної бібліотеки. Так, директива

<%@ taglib uri="/exttags.tld" prefix="dscat" %>

оголошує, що в JSP сторінці використовується бібліотека додаткових тегів, назва кожного з яких починається з префікса dscat. Наприклад:

<dscat:pageheader>All Customers</dscat:pageheader>

Програмний код даної бібліотеки описується дескриптором exttags.tld. Ми не зупинятимемося на правилах написання дескриптора бібліотеки, а розглянемо лише один з можливих прикладів його реалізації:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE taglib

PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

<tlib-version>1.0</tlib-version>

<jsp-version>1.2</jsp-version>

<shortname>dscat</shortname>

<tag>

<name>pageheader</name>

<tag-class>ru.view.tag.PageHeader</tag-class>

</tag>

</taglib>

Створення бібліотеки custom тегів Custom теги без обробки вмісту

Програмний код для підтримки custom тега - це спеціальним чином написаний екземпляр Java класу, який викликається web контейнером всякий раз, коли потрібно обробити JSP сторінку, що містить відповідний тег.

У простому випадку, для підтримки custom тега можна узяти який-небудь з класів програми і доповнити його методами, що відповідають інтерфейсу Tag. Якщо ж зовнішніх об'єктів використовувати не потрібно, то як базовий клас можна використовувати TagSupport. Ці та інші стандартні класи і інтерфейси знаходяться в пакеті javax.servlet.jsp.tagext.

Приклад класу, що здійснює підтримку custom тега:

public CopyrightTag extends TagSupport {

public int doStartTag() throws Exception {

pageContext.getOut().print("<small>© Copyright, 2001</small>");

return SKIP_BODY;

}

public int doEndTag() {

return EVAL_PAGE;

}

}

Методи класу, який здійснює обробку custom тега, викликаються в певній послідовності. Коли в JSP сторінці обробка доходить до відкриваючого custom тега, для його обробки викликається метод doStartTag(). Коли обробка доходить до відповідного закриваючого тега, викликається метод doEndTag(). Для обробки тієї частини JSP сторінки, яка поміщена між цими двома тегами, використовуються методи doInitBody() і doAfterBody().

Крім того, що метод doStartTag() може здійснювати яку-небудь обробку запиту, велике значення має значення, що повертається ним. Якщо це SKIP_BODY, то інформація, поміщена між відповідними відкриваючим і закриваючим тегами, ігноруватиметься, а обробка JSP сторінки відразу перейде на закриваючий тег. Щоб вміст custom тега все ж таки оброблявся, медот повинен повернути EVAL_BODY_INCLUDE. Аналогічно, якщо метод doEndTag() поверне значення SKIP_PAGE, то частина JSP сторінки, що залишилася, після закриваючого тега буде проігнорована. Щоб не допустити цього, метод повинен повернути значення EVAL_PAGE.

В деяких випадках буває необхідно показати вміст custom тега не один, а кілька разів. В цьому випадку, клас, що здійснює обробку тега, повинен реалізовувати інтерфейс IterationTag, або використовувати як батька клас TagSupport. Щоб повторити виведення вмісту custom тега ще раз, необхідно, щоб методи doStartTag і doAfterBody повертали EVAL_BODY_AGAIN.

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