Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Герц Д.М. -> "Java Server Pages. Библиотека профессионала" -> 9

Java Server Pages. Библиотека профессионала - Герц Д.М.

Герц Д.М. Java Server Pages. Библиотека профессионала — М.: Вильяме, 2002. — 448 c.
ISBN 5-8459-0290-8
Скачать (прямая ссылка): javaserverpages2002.pdf
Предыдущая << 1 .. 3 4 5 6 7 8 < 9 > 10 11 12 13 14 15 .. 147 >> Следующая


Организация взаимодействия потоков

Относительно времени жизни экземпляров класса Tag в спецификации JSF 1.1 сказано следующее.

На зшапе выполнения реализацияjSP-дакумента применяет доступные экземпляры класса

Tag... если они уже не используются _ По окончании работы экземпляр класса освобождается

с тем, чтобы он был доступен для последующего применения.

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

Поскольку контейнер сервлетов может повторно обращаться к классу поддержки дескриптора, необходимо уделять внимание методу release и инициализации переменных в методе doStartTag. Например, класс поддержки, приведенный ниже, работает корректно.

public class TagHandler extends TagSupport (

private Hashtable hashtable;

public irit doStartTag (} throws JspException { hashtable = new Hashtable 0;

J ” '

public void released { hashtable = null;

I

I
28 Глава 1. Основы построения пользовательских дескрипторов

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

public class TagHandler extends TagSupport ( private Hashtable hashtable;

public TagHandler() {

hashtable - new Hashtable();

}

public void release() { hashtable - null;

і

)

Пользовательские дескрипторы с атрибутами

Пользовательский дескриптор может содержать любое число атрибутов, как обязательных, так и необязательных. Атрибуты задаются с помощью выражения имл_атри6ута=знаценг1е_в_кавычках. Например, дескриптор с одним атрибутом выглядит следующим образом:

<util:iterate times='4'>

Значения атрибутов могут вычисляться в момент запроса. Пример такого атрибута приведен ниже.

<utilliterate collectionA<fc= aCollection %>'>

Здесь атрибуту collection присваивается значение переменной.

Для того чтобы пользовательский дескриптор поддерживал некоторый атрибут, надо выполнить три дополнительных действия.

1. Добавитьтребуемый атр ибут к дес кр и пто ру в JSP-файле.

2. Добавить элемент, соответствующий этому атрибуту, к TLD.

3. Реализовать метод setAttra классе поддержки дескриптора. Здесь Лиг— имя атрибута, соответствующее соглашениям JavaBeans.

Обычно в классе поддержки реализуют также метод qetAttr, таким образом, вложенные дескрипторы получают доступ ксвойствам.

Чтобы продемонстрировать выполнение перечисленных выше действий, создадим простой пользовательский дескриптор с одним атрибутом.

Если на Web-странице содержится форма с полями редактирования, то при очередном отображении формы желательно сохранять в полях редактирования текст, заданный пользователем ранее. На рис. 1.3 показана Web-страница с регистрационной формой, которая отображается повторно, если пользователь некорректно ввел данные. В окис, расположенном слева, показана форма, в которой пользователь не заполнил одно из полей. В правом окне показана та же форма с сообщением об ошибке. В полях редактирования сохраняются данные, введенные ранее, поэтому пользователю не надо повторно заполнять поля.
Пользовательские дескрипторы с атрибутами 29

щш

If Hi ЕЛ

|_fi> Cd* yi»* Fj. ці Щя Xoqi» ЦіЬ ИЗ^ЛвїоЛвіїАСТОЬ

Please Register

| raph

Ftrat N»me:

La«l Name: МіУітчн

E-mail Address:]

±-

3 [шцніт<и|« M<i tuMrnulJ tuliuar SEsiOl
І - **:¦ "fe С»* :ЕЯ* ' ’ ¦-v^ia
9DWVEHHVC«nl«tSan»l it m
Please Register і
First Name: |rmph Last Mams: E-mail Address:|
'•«"•'J
I Please fill in all of the fields above M

|ЩГ«~

іч і1 1ЙЙ>^

Рис. 1.З. При повторном отображении формы данные 8 полях редактирования сохраняются

Первоначально появляется соблазн решить эту задачу следующим образом:

<input type = 'text' size=15 Hame=TirstName1

value = '<% = request,getParameter("firstName")%> • >

Атрибут value HTML-дескриптора inpflit устанавливается равным значению параметра в составе запроса, который соответствует данному полю редактирования Теперь, если документ, показанный на рис. 1.3, будет отображен повторно, содержимое полей редактирования сохранится.

Однако описанное решение имеет существенный недостаток. Если параметр запроса, соответствующий полю редактирования, отсутствует (такая ситуация возникает при первом обращении к форме), метод Serviet Re quest. get Parameter вернет значение null, которое и отобразится в поле.

Разрешить эту проблему можно, реализовав пользовательский дескриптор, который возвращал бы параметр запроса, а при его отсутствии — пустую строку. Фрагмент JSP-документа, в котором применяется такой дескриптор, показан в листинге 1.3,а Пользовательский дескриптор requestParameter содержит один обязательный атрибут, определяющий имя параметра запроса. Are. 1,4. Недостаток непосредственного вызова
Предыдущая << 1 .. 3 4 5 6 7 8 < 9 > 10 11 12 13 14 15 .. 147 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.