Изменение фона документа

Афиширование и выяснение интерфейсов


В среде JavaBeans существуют способы динамического (то есть не по исходным текстам) выяснения характеристик компонентов. К таким характеристикам относятся:

  • методы, доступные для вызова другими компонентами и инструментальным окружением;
  • свойства, которые можно опрашивать и/или изменять;
  • события, порождаемые данным компонентом.

Подобное выяснение в терминологии JavaBeans называется интроспекцией*.
Интроспекция используется прежде всего на этапе разработки, в рамках инструментального окружения, позволяя увидеть афишируемые характеристики и с их помощью настроить компонент и связать его с другими элементами приложения.
Принципиальная возможность интроспекции была изначально заложена в Java-технологии. Файлы классов содержат достаточно информации для выяснения всех необходимых характеристик объектов. Воспользоваться этой информацией можно с помощью класса Class, пакета java.lang.reflect и некоторых других средств, которые будут рассмотрены далее. Чтобы оценить полноту сведений, предоставляемых Java-средой, целесообразно рассмотреть фрагменты описаний класса Class (листинг ), а также класса Method из пакета java.lang.reflect (листинг ).
Таким образом, разработчики и пользователи компонентов ведут работу исключительно Java-средствами. Более того, в большинстве случаев разработчику, чтобы сделать класс полноценным элементом среды JavaBeans, достаточно придерживаться определенной дисциплины описания методов, не прибегая к явному афишированию характеристик. Например, по умолчанию в число афишируемых попадают все public-методы компонента.
Способность компонента среды JavaBeans по существу без дополнительных усилий со стороны разработчика предоставлять информацию о своем интерфейсе называется рефлексией. Рефлексия базируется на дисциплине определения методов. Эта дисциплина состоит в следовании заданным шаблонам при выборе имен методов, а также типов формальных параметров и результатов. Далее, по ходу изложения, мы будем приводить эти шаблоны.
Среда JavaBeans проектировалась таким образом, чтобы в типичных случаях и действия разработчиков, и внутренняя реализация оставались простыми; дополнительные усилия и утяжеление компонентов должны требоваться только тогда, когда этого желает сам программист. В данном случае, если разработчику не хватает выразительной силы рефлексии, он может реализовать интерфейс BeanInfo, явным образом описывающий афишируемые характеристики компонента.
Интерфейс BeanInfo содержит методы, позволяющие получить объекты-описатели характеристик компонента. В число этих методов входят getBeanDescriptor, getMethodDescriptors и т.д. (см. листинги и ). Поскольку реализация методов может быть сколь угодно изощренной, у разработчика появляется возможность ассоциировать с компонентом ресурсы (например, файлы), содержащие описательную информацию. Класс SimpleBeanInfo, входящий в пакет java.beans, является "пустой" реализацией интерфейса BeanInfo, отрицающей наличие у компонента каких-либо афишируемых методов, свойств и событий. Разработчик может создать производный класс и выборочно переопределить методы класса SimpleBeanInfo.
Класс Introspector реализует процесс интроспекции. По заданному компоненту он конструирует объект класса BeanInfo (см. листинг ). Действует Introspector следующим образом. Сначала он пытается найти класс, имя которого получается из имени класса компонента приписыванием текста "BeanInfo". Если такой класс находится, а его методы возвращают непустые дескрипторы, соответствующая информация используется при конструировании результирующего объекта BeanInfo. В противном случае Introspector полагается на механизм рефлексии и анализирует имена и типы параметров public-методов класса компонента и его предшественников.
Характерная особенность Java-технологии состоит в наличии стройной модели безопасности. Применительно к интроспекции действуют два защитных рубежа:

  • Получение объектов Field, Method и Constructor возможно только путем применения методов класса Class, которые вызывают системный менеджер безопасности.
  • Доступ к полям и методам объектов производится с применением стандартных правил языка Java.

Кроме того, аплеты подвергаются дополнительному контролю.
Детальный анализ модели безопасности Java выходит за рамки данной статьи. Здесь мы отметим лишь, что компонентная объектная среда не привносит каких-либо новых, специфических угроз, поскольку она полностью описывается в терминах языка Java.


Агрегирование интерфейсов


В разных ситуациях компонент объектной среды должен поворачиваться к пользователю разными гранями. Например, в инструментальном окружении необходимо получать информацию об афишируемых характеристиках объекта. В настоящее время такую информацию предоставляет специальный информационной объект, косвенно (по имени класса) ассоциированный с исследуемым и реализующий интерфейс BeanInfo. Однако более естественной была бы не косвенная, а прямая ассоциация, позволяющая единообразно осуществлять доступ к разным "проявлениям" объектов.
Решению сформулированной задачи служит очень важная в концептуальном плане спецификация [4]. Центральное место в ней занимает понятие агрегата - сущности, обладающей "многогранным" поведением, динамически унаследованным у совокупности классов (интерфейсов). В агрегат входят представители соответствующих классов, а также координатор, способный по запросу выдавать нужного представителя.
Спецификации не предусматривают внесения каких-либо изменений в язык Java. Агрегат и входящий в него координатор представлены интерфейсом Aggregate (см. листинг ). Интерфейс Aggregate содержит методы, позволяющие получить ссылку на объект требуемого класса и опросить поддерживаемый агрегатом набор классов.
Формально каждый представитель является самостоятельным объектом, принадлежащим своему классу, однако с идейной точки зрения более правильно считать, что метод getInstanceOf () возвращает разные проявления одного (агрегатного) объекта.


Бегущая строка


Бегущая строка в строке статуса


Бегущая строка




Бегущая строка в поле form.


Бегущая строка











Comments:

Copyright ©


Действия, выполняемые источником события


Источник события по своему выбору назначает имя метода, вызываемого в компонентах-подписчиках при распространении события. Чтобы сделать возможной автоматическую интроспекцию компонентов на предмет распространяемых ими событий (то есть для поддержки рефлексии), данный метод описывается в расширении пустого интерфейса java.util.EventListener, играющего роль этикетки. Пример расширения приведен на листинге .
По соглашению, опять-таки направленному на поддержку рефлексии, имя интерфейса-расширения должно оканчиваться цепочкой символов "Listener".
Если источник желает распространять несколько различных событий, допускается описание в одном интерфейсе соответствующего числа методов их обработки.
Метод обработки события должен иметь один аргумент, которым является так называемый событийный объект - преемник класса java.util. EventObject. Посредством этого объекта подписчику передается информация об источнике и другие характеристики события. Определение класса EventObject приведено на листинге . Листинг содержит возможное описание класса KeyPressedEvent (окончание "Event" - еще одно требование рефлексии).
Реализация методов регистрации подписчиков, аннулирования регистрации, а также собственно распространения события может быть выполнена способом, приведенным на листинге . Отметим, что при распространении события вызов методов подписчиков производится синхронным образом, в рамках потока источника события.
Обратим внимание на два аспекта программного текста, приведенного на листинге . Во-первых, в источнике необходимо обеспечить безопасность работы в многопотоковой среде. Методы add/remove выполняются в рамках потоков подписчиков, поэтому они нуждаются в синхронизации. В методе fire также следует учитывать возможность регистрационных действий параллельно с распространением события. Отсюда три вхождения ключевого слова synchronized.
Во-вторых, регистрационные методы должны поддерживать рефлексию и определяться по следующим шаблонам:
public void add ( подписчик); public void remove ( подписчик);
Определение метода fire - внутреннее дело источника события.


Действия, выполняемые подписчиком события


Реализация интерфейса события - основное действие, выполняемое подписчиком. Его содержательная сторона зависит от специфики подписчика. Чисто технические моменты отражены на листинге .
Регистрация подписки производится обращением к соответствующему add-методу источника события.
Общая схема взаимодействия источника и подписчиков события представлена на рис. 2. Если проводить аналогию с обычной подпиской на газеты и журналы, то базовый механизм, описанный в спецификациях JavaBeans, соответствует оформлению подписки в редакции каждого издания (а не в отделении связи). В спецификациях упоминается также о возможности реализации адаптеров - посредников, берущих на себя централизованное оформление подписки и реализацию определенной дисциплины распространения событий. При наличии адаптера схема взаимодействия источников и подписчиков событий может выглядеть так, как показано на рис. 3. Очевидно, подобная схема облегчает жизнь всем взаимодействующим сторонам (не считая адаптера, который необходимо реализовать).
Действия, выполняемые подписчиком события

Действия, выполняемые подписчиком события

При установлении взаимодействия между источниками и подписчиками событий значительная часть работы может быть выполнена инструментальной средой. Эта среда может сгенерировать код, содержащий обращение к add-методам, обеспечить согласованность названий методов обработки событий, сгенерировав при необходимости вспомогательные классы, и т.п.


Функция escape


Возвращает ASCII значение аргумента, закодированного в ISO Latin-1.


Функция eval


Функция eval выполняет строку-аргумент и подставлает полученное значение вместо себя.


Функция isNaN


Изменена в Navigator 3.0.
На UNIX платформах проверяет аргумент, является ли он "NaN" (не числом).


Функция parseFloat


Анализирует строковый аргумент и возвращает число с плавающей точкой.


Функция parseInt


Анализирует строковый аргумент и возвращает целое число, определенное как основание.


Графические часы


Первый пример - это часы, отображающие время загрузки страницы (т.е. момент вызова скрипта). Используются методы объекта Date (getHours, getMinutes) и графические файлы, отображающие полученное время (имена этих файлов соответствуют цифрам - 0-9).
Во втором примере, отображающем текущую дату, также используются методы объекта Date (getDate, getMnth, getYear) и графические файлы, отображающие полученную дату (имена этих файлов соответствуют цифрам - 0-9).


1.
2.
Comments:

Copyright ©


Идущие часики


Идущие часики можно поместить в строке статуса и в поле form. (Реализация объекта Date в Netscape Navigator 2.0 содержит ошибки)
Первый пример - скрипта, создающего часики в строке статуса при загрузке документа:


Clock in status bar





Второй пример - скрипта, создающего часики (в сокращенном варианте) в поле form


Clock










Третий пример - еще один вариант отображения часиков. Причем обратите внимание, что функция вызывается в теле документа, а не в HTML-теге как в предыдущем примере.


Clock full











В четвертом примере часики с "P.M." и "A.M."


Clock









Comments:

Copyright ©


Информация о броузере.


Существуют броузеры, не поддерживающие некоторых возможностей JavaScript. Поэтому, чтобы не возникало ситуаций, когда броузер пользователя не видит чего-либо в вашем документе, можно использовать свойства объекта Navigator: appName и appVersion, которые определяют имя и версию броузера. В зависимости от версии броузера можно осуществлять вызов того или иного документа.
Например, на платформах с 16-разрядной Windows обращение к функции eval() приводит к краху Netscape Navigator 2.0. Поэтому, если мы посмотрим , где используется эта функция, то в нем как раз анализируется имя и версия броузера.
Пример:


Броузер







Имя броузера
Версия броузера
Кодовое название броузера
Заголовок пользовательского
агента




Comments:

Copyright ©


Информация о дате последнего изменения документа.


Для этого в HTML-теге используется свойство lastModified объекта Document. В данном примере такая информация выводится в строку статуса.
Comments:

Copyright ©


Информация о документе.


Такая информация может быть помещена в строке статуса при загрузке документа. Для этого в HTML-тэг добавлен атрибут onLoad="status='Примеры скриптов. Центр Информационных Технологий'"
Также при попадании указателя мыши в область ссылки вместо имени файла, появляющегося в строке статуса, можно поместить информацию об этом документе.

Обратите внимание, что при загрузке документа в строке статуса одна информация, при попадании указателя мыши в область ссылки - другая, а после выхода указателя мыши из области ссылки - третья. Для этого в HTML-теге добавлены обработчики событий onMouseOver и onMouseOut и свойство status объекта Window:
onMouseOver="status='Примеры скриптов' ;return true" onMouseOut="status='Центр Информационных Технологий' ;return true"
Информацию также можно выводить в диалоговое окно, при этом выполнение программы не прерывается. Для этого используется метод alert() объекта Window и обработчик событий onMouseOver, включенные в HTML-тег
. В окне есть кнопка "OK", которая закрывает диалоговое окно.
Например, при попадании указателя мыши в область ссылки открывается диалоговое окно с каким-либо сообщением (лучше, если оно будет не на русском языке).
onMouseOver="alert('Server for Information Technologies')"
Comments:

Copyright ©


Источники информации:


  • "Справочник Web-мастера", Стивен Спейнаур и Валери Куэрсиа,

  • Comments:

    Copyright ©


    История посещений.


    Использование объекта History предоставляет возможность возвращаться на URL, который был посещен перед этим (что эквивалентно щелчку на кнопке BACK), и переходить на URL, посещенный перед этим (что эквивалентно щелчку на кнопке FORWARD). Список посещенных URL содержится в меню GO броузера Netscape Navigator.
    Делается это, используя методы объекта History: back() и forward(). Для этого в HTML-тег
    включается следующая строка:
    или
    Если необходимо вернуться на несколько позиций списка меню GO, то используется метод go(), в скобках указывается целочисленный аргумент (отрицательное значение которого соответствует количеству шагов НАЗАД, положительное -ВПЕРЕД). Например, для возврата на три позиции назад указывается go(-3), вперед - go(3).
    Обратите внимание: если нет посещенных перед этим URL, то это не будет работать.
    Comments:

    Copyright ©


    Изменение фона документа.


    Изменение фона документа при выборе кнопки с названием цвета. При этом используется свойство bgColor объекта Document.Свойство bgColor в Netscape Navigator 2.0 содержит ошибки.


    bgcolor













    Документ с изменяющимся фоном.


    Изменение фона документа





    Comments:

    Copyright ©


    Изменение картинки


    В данном примере для этого используется свойство images[ ] объекта Document.








    В предыдущем примере изменение происходило при попадании курсора мыши в область картинки и при выходе курсора из нее. В данном примере это организовано в цикле для двух картинок с использованием метода setTimeout.
    Работает только в Netscape Navigator 3.0 и выше!


    Баннер






    Изменение картинки при загрузке документа в зависимости от текущего времени осуществляется с использованием объекта Date.
    Работает во всех броузерах, поддерживающих JavaScript.


    Баннер






    Comments:

    Copyright ©


    Компоненты и контейнеры


    Представляется удивительным, что спецификация [3], регламентирующая фундаментальное отношение компоненты/контейнер, не вошла в число первоочередных и дорабатывается только сейчас, в рамках новой версии JavaBeans с рабочим названием Glasgow.
    Механизм контейнеров необходим для достижения по крайней мере двух целей:

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

    Первый пункт означает, в частности, инкапсуляцию совокупности компонентов, так что с точки зрения окружения она выглядит как единое целое с набором методов, предоставляемых контейнером. Кроме того, применительно к иерархической структуре возможен систематический обход и обработка ее элементов.
    Второй пункт имеет противоположное назначение - инкапсуляцию окружения. Контейнер выступает в роли оболочки, скрывающей от компонентов особенности внешней среды и предоставляющей им свой контекст.
    Чтобы избежать употребления перегруженного в Java-среде термина "контейнер", авторы спецификации употребляют сочетание "BeanContext". Мы не будем этого делать, поскольку, помимо предоставления общего контекста, у контейнера есть и другие функции; надеемся, что к путанице это не приведет.
    Реализация механизма контейнеров использует служебный интерфейс java.util.Collection, который предполагается включить в одну из ближайших версий Java-среды. Фрагмент описания этого интерфейса, содержащий типичные методы для работы с наборами, приведен на листинге .
    Интерфейс java.beans.BeanContextChild содержит описания методов, позволяющих ассоциировать с компонентом объемлющий контейнер и опрашивать эту ассоциацию (см. листинг ). Таким образом, связи, ведущие вниз (от контейнера к компоненту), обслуживает интерфейс Collection, а связи, ведущие вверх, - интерфейс BeanContextChild.
    С отношением компоненты/контейнер ассоциировано событие beanContextChanged. Соответствующий интерфейс (BeanContextListener) описан на листинге .
    Вообще говоря, распространение этого события может происходить в несколько приемов: контейнер, получив извещение от компонента, передает его своим подписчикам, в число которых, вероятно, входит объемлющий контейнер, и т.д. Чтобы распознать подобные "вторичные" события и определить первоисточник, предусмотрены соответствующие методы событийного объекта BeanContextEvent (см. листинг ).
    Изменения совокупности компонентов, входящих в контейнер, обслуживает событийный объект BeanContextMembershipEvent. Он содержит информацию о разности ("дельте") между старым и новым составом контейнера, то есть о том, какие компоненты были добавлены или, напротив, удалены (листинг ).
    Интегрирующим элементом рассматриваемой спецификации является интерфейс java.beans.BeanContext, описывающий связи, идущие как вверх, так и вниз (за счет расширения интерфейсов BeanContextChild и Collection соответственно). Интерфейс BeanContext позволяет также опросить предоставляемые контейнером сервисы и ресурсы. Содержит он и методы для регистрации подписчиков событий (см. листинг ).
    Разумеется, кроме синтаксиса специфицируется семантика методов интерфейса BeanContext.
    При добавлении компонента методом add (), унаследованным у интерфейса Collection, контейнер "привязывает" этот компонент к себе, вызывая в нем метод setBeanContext с аргументом this (полноценные компоненты должны реализовывать интерфейс BeanContextChild). В свою очередь, компонент может протестовать против включения в контейнер, возбуждая исключительную ситуацию PropertyVetoException. Если это случится, контейнер обязан отменить добавление, возбудив исключительную ситуацию IllegalArgumentException. При успешном добавлении компонента контейнер распространяет подписчикам событие beanContextChanged с соответствующим объектом-параметром. Контейнер должен подписаться у нового компонента на события, связанные со свойствами последнего, чтобы отслеживать по крайней мере свойство beanContext и не допустить нарушения целостности иерархической структуры. Кроме того, компонент регистрируется как подписчик событий, возбуждаемых контейнером.
    При удалении объекта из контейнера производятся обратные действия. В частности, вызывается метод setBeanContext с аргументом null. Если компонент находится в состоянии, не позволяющем произвести удаление, он возбуждает исключительную ситуацию PropertyVetoException, заставляя тем самым контейнер отказаться от удаления.
    Отметим, что контейнерная реализация методов интерфейса Collection должна быть безопасной в многопотоковой среде.
    Рассмотренная спецификация заполняет очень важную методологическую брешь в JavaBeans. Хотелось бы надеяться, что переход к новой версии прикладного программного интерфейса Java, включающей интерфейс BeanContext, произойдет в ближайшее время.


    Коротко о языке Java


    Мы позволим себе коротко напомнить читателям некоторые сведения о языке Java, которые понадобятся нам для дальнейшего изложения. Более полное описание языка и ассоциированной технологии можно найти, например, в статье [6].
    Java - объектно-ориентированный язык. В его основе лежит понятие класса. Класс является шаблоном для создания объектов; он может содержать данные и методы. Существуют различные режимы доступа к элементам класса - private, protected, public.
    Java - полностью объектно-ориентированный язык, каждому понятию которого (класс, объект, метод и т.п.) соответствует класс, поддерживающий программную обработку соответствующих "понятийных" объектов.
    Классы в языке Java объединяются в пакеты. Каждый пакет определяет отдельное пространство имен. Все классы, входящие в один пакет, являются дружественными по отношению друг к другу, то есть имеют взаимный доступ к переменным и методам, если противное не оговорено явно посредством спецификаторов private или protected.
    Для обозначения наследования используется ключевое слово extends. Класс Object - это корень дерева наследования. Имеется предопределенная иерархия классов, описанная в пакете java.lang.
    В языке Java отсутствует множественное наследование, однако наличие понятия интерфейса позволяет смягчить это ограничение. Интерфейс представляет собой набор описаний методов. Классы могут реализовывать интерфейсы. Этот факт обозначается ключевым словом implements в заголовке класса.
    Класс Class используется для получения во время выполнения информации о "классовых" свойствах объектов. Типичные методы этого класса - forName (получение объекта класса Class по текстовому имени), newInstance (порождение нового объекта данного класса), getMethods (получение массива объектов, описывающих public-методы класса, в том числе унаследованные).
    Java-классы могут быть абстрактными, то есть не до конца конкретизированными. Это означает, что в классе описаны методы, определения которых отсутствуют. Такие методы (как и сам класс) должны снабжаться описателем abstract и конкретизироваться в производных классах.
    Для обработки исключительных ситуаций, возникающих во время выполнения программы, в языке Java используется конструкция try/catch/finally. Для передачи информации об исключительной ситуации используются объекты классов - наследников класса Throwable.
    Механизм потоков - обязательная черта современных операционных сред. В языке Java потоки представлены посредством класса Thread, интерфейса Runnable, спецификатора метода synchronized и методов класса Object wait и notify.
    Java-программы подразделяются на два вида - самостоятельные приложения и аплеты. Последние выполняются в среде Web-навигатора и могут поступать по сети. Приложения и аплеты существенно различаются по мерам безопасности, принимаемым в процессе их работы (аплеты контролируются значительно жестче).
    Java-компилятор транслирует исходные тексты программ в коды виртуальной Java-машины. Компилятор порождает файлы классов, содержащие интерпретируемые коды и дополнительную информацию, используемую на этапе выполнения. Спецификации Java-машины обеспечивают независимость скомпилированных программ от поддерживающей аппаратно-программной платформы.


    public final class Class extends


    public final class Class extends Object implements Serializable { // Информация о классе или интерфейсе
    public native Class getSuperclass ();
    // Возвращает класс-предшественник данного класса
    public native Class [] getInterfaces ();
    // Возвращает интерфейсы, реализуемые классом
    public Field [] getFields () throws SecurityException; // Возвращает public-поля данного класса, в том числе // унаследованные. Возбуждает исключительную ситуацию, // если доступ к этой информации запрещен политикой // безопасности.
    public Constructor [] getConstructors () throws SecurityException; // Возвращает public-конструкторы данного класса. // Возбуждает исключительную ситуацию, если доступ // к этой информации запрещен политикой безопасности.
    public Method [] getMethods () throws SecurityException; // Возвращает public-методы данного класса, в том числе // унаследованные. Возбуждает исключительную ситуацию, // если доступ к этой информации запрещен политикой // безопасности.
    public Method getMethod (String name, Class parameterTypes []) throws NoSuchMethodException, SecurityException; // Возвращает public-метод с заданными именем и типами // параметров. Возбуждает исключительную ситуацию, // если такого метода нет, или если доступ к этой // информации запрещен политикой безопасности
    public Method [] getDeclaredMethods () throws SecurityException; // Возвращает все методы, продекларированные в данном // классе. Возбуждает исключительную ситуацию, если // доступ к этой информации запрещен политикой // безопасности . . . }


    public final class Method extends Object implements Member { // Информация о методе класса или интерфейса
    public Class getDeclaringClass ();
    // Возвращает класс или интерфейс, // содержащий декларацию данного метода
    public String getName ();
    // Возвращает имя метода в виде цепочки символов
    public native int getModifiers ();
    // Возвращает модификаторы (public, ...), // использованные при описании метода
    public Class [] getParameterTypes ();
    // Возвращает типы формальных параметров метода
    public Class getReturnType ();
    // Возвращает тип результата метода
    public Class [] getExceptionTypes ();
    // Возвращает исключительные ситуации, // возбуждаемые данным методом
    public String toString ();
    // Возвращает цепочку символов, описывающую метод
    public native Object invoke (Object obj, Object args []) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NullPointerException; // Применяет данный метод к объекту obj // с заданным списком параметров . . . }


    public class BeanDescriptor extends FeatureDescriptor { // Описатель компонента объектной среды
    public BeanDescriptor (Class beanClass);
    // Создает описатель по классу компонента
    public Class getBeanClass ();
    // Возвращает класс компонента
    public Class getCustomizerClass ();
    // Возвращает класс-настройщик компонента // (см. раздел "Настройка свойств")
    . . . }


    public interface BeanInfo { // Интерфейс, который нужно реализовать, // чтобы явным образом афишировать характеристики // компонента объектной среды
    public abstract BeanDescriptor getBeanDescriptor ();
    // Возвращает описатель компонента
    public abstract EventSetDescriptor [] getEventSetDescriptors ();
    // Возвращает описатели событий, // возбуждаемых компонентом
    public abstract PropertyDescriptor [] getPropertyDescriptors ();
    // Возвращает описатели афишируемых // свойств компонента
    public abstract MethodDescriptor [] getMethodDescriptors ();
    // Возвращает описатели афишируемых // методов компонента
    public abstract Image getIcon (int iconKind);
    // Возвращает иконку, ассоциированную с компонентом
    . . . }


    public class Introspector extends Object { // Выяснение характеристик компонента объектной среды
    public static BeanInfo getBeanInfo (Class beanClass) throws IntrospectionException; // Выясняет афишируемые характеристики компонента. // При нештатном ходе процесса интроспекции // возбуждает исключительную ситуацию
    public static String [] getBeanInfoSearchPath ();
    // Возвращает массив пакетов, // в которых будут разыскиваться классы BeanInfo
    public static void setBeanInfoSearchPath (String path []);
    // Устанавливает массив пакетов, // в которых будут разыскиваться классы BeanInfo
    . . . }


    interface KeyPressedListener extends java.util.EventListener {
    void KeyPressed (KeyPressedEvent kpe);
    // Метод, вызываемый в подписчиках // при распространении события
    }


    implements Serializable {
    protected transient Object source; // Поле событийного объекта, хранящее информацию // об источнике. Слово transient означает, что поле // является временным и при сохранении объекта // в долговременную память не записывается
    public EventObject (Object source);
    public Object getSource ();
    public String toString ();
    // Возвращает представление событийного объекта // в виде цепочки символов }


    public class KeyPressedEvent extends java.util.EventObject {
    protected transient int KeyCode;
    KeyPressedEvent (java.awt.Component source, int Key) { super (source);
    KeyCode = Key; }
    public int getKeyPressed () { return KeyCode; } }


    public abstract class KeyPressedEventSource {
    private Vector listeners = new Vector ();
    // Массив для хранения набора подписчиков
    public synchronized void addKeyPressedListener (KeyPressedListener kpl) { // Зарегистрировать подписчика
    listeners.addElement (kpl);
    }
    public synchronized void removeKeyPressedListener(KeyPressedListener kpl) { // Аннулировать регистрацию
    listeners.removeElement (kpl);
    }
    protected fireKeyPressed (int Key) { // Распространение события (оповещение подписчиков)
    Vector l; KeyPressedEvent kpe = new KeyPressedEvent (this, Key);

    // Создадим локальную копию набора подписчиков // на момент возникновения события. // В процессе распространения события набор подписчиков // (но не локальная копия!) может изменяться synchronized (this) {l = (Vector) listeners.clone ();
    }
    // Оповестим подписчиков о наступлении события
    for (int i = 0; i < l.size();
    i++) { ((KeyPressedListener) l.elementAt(i)).KeyPressed (kpe);
    } } }


    public class MyListener implements KeyPressedListener {
    public void KeyPressed (KeyPressedEvent kpe) { . . . }
    }


    public Color getPalette (int i);
    public void setPalette (int i, Color c);
    public Color [] getPalette ();
    public void setPalette (Color c []);



    public class PropertyChangeEvent extends EventObject {
    public PropertyChangeEvent (Object source, String propertyName, Object oldValue, Object newValue);
    // Конструктор. Создает событийный объект из источника // события, имени изменяемого свойства, // старого и нового значений
    public String getPropertyName ();
    // Возвращает имя изменяемого свойства
    public Object getNewValue ();
    // Возвращает новое значение свойства
    public Object getOldValue ();
    // Возвращает прежнее значение свойства
    . . . }


    public interface PropertyChangeListener extends EventListener { public abstract void propertyChange (PropertyChangeEvent pce);
    // Метод, вызываемый после изменения // связанного свойства
    }


    public class PropertyChangeSupport extends Object implements Serializable { // Вспомогательный класс для обслуживания // связанных свойств
    public PropertyChangeSupport (Object sourceBean);
    // Конструктор
    public synchronized void addPropertyChangeListener (PropertyChangeListener pcl);
    // Регистрация подписчиков
    public synchronized void removePropertyChangeListener (PropertyChangeListener pcl);
    // Аннулирование регистрации
    public void firePropertyChange (String propertyName, Object oldValue, Object newValue);
    // Конструирование событийного объекта и // распространение события. Если новое и старое значения // совпадают, никаких действий не предпринимается
    }


    public interface PropertyEditor {
    public abstract void setValue (Object value);
    // Устанавливает редактируемый объект (свойство)
    public abstract Object getValue ();
    // Возвращает текущее значение свойства
    public abstract boolean isPaintable ();
    // Истина, если свойство имеет графическое представление // (реализован метод paintValue)
    public abstract void paintValue (Graphics gfx, Rectangle box);
    // Отрисовывает графическое представление свойства // в заданной области экрана
    public abstract String getAsText ();
    // Возвращает текстовой представление значения // свойства, доступное для редактирования
    public abstract void setAsText (String text) throws IllegalArgumentException; // Устанавливает значение свойства // по текстовому представлению
    public abstract boolean supportsCustomEditor ();
    // Истина, если поддерживается специализированный // редактор свойства
    public abstract Component getCustomEditor ();
    // Возвращает специализированный редактор свойства, // которым, вероятно, воспользуется окружение
    public abstract void addPropertyChangeListener (PropertyChangeListener pcl);
    // Регистрация подписчиков, информируемых // об изменении значения свойства
    public abstract void removePropertyChangeListener (PropertyChangeListener pcl);
    // Аннулирование регистрации
    . . . }


    public class PropertyEditorManager extends Object {
    public static void registerEditor (Class targetType, Class editorClass);
    // Регистрация редактора для типа targetType
    public static PropertyEditor findEditor (Class targetType);
    // Возвращает редактор для типа targetType
    . . . }


    public interface Customizer {
    public abstract void setObject (Object bean);
    // Устанавливает настраиваемый объект
    public abstract void addPropertyChangeListener (PropertyChangeListener pcl);
    // Настройщик должен возбуждать событие // propertyChange при изменении значения свойства
    public abstract void removePropertyChangeListener (PropertyChangeListener pcl);
    }


    public interface Serializable {
    private void writeObject (java.io.ObjectOutputStream out) throws IOException; // Запись объекта в долговременную память
    private void readObject (java.io. ObjectInputStream in) throws IOException, ClassNotFoundException; // Чтение объекта из долговременной памяти - метод, // обратный writeObject ()
    }


    public interface Externalizable extends Serializable {
    public abstract void writeExternal (ObjectOutput out) throws IOException; // Сохранение объекта в нестандартном формате
    public abstract void readExternal (ObjectInput in) throws IOException, ClassNotFoundException; // Чтение нестандартно сохраненного объекта - // метод, обратный writeExternal ()
    }


    public class Beans extends Object {
    public static Object instantiate (ClassLoader cls, String beanName) throws IOException, ClassNotFoundException; // Создание экземпляра компонента
    public static boolean isDesignTime ();
    // Истина, если работа идет в инструментальном // окружении
    public static boolean isGuiAvailable ();
    // Истина, если работа идет в графическом окружении
    . . .
    }


    public interface Collection { public abstract boolean add (Object o) throws ...; // Включает объект в набор. Возвращает "ложь", // если объект там уже был
    public abstract void addAll (Collection c) throws ...; // Включает все элементы одного набора в другой
    public abstract boolean remove (Object o) throws ...; // Удаляет объект из набора
    public abstract void clear () throws ...; // Удаляет все элементы из набора
    public abstract boolean contains (Object o);
    // Проверяет, входит ли данный объект в набор
    public abstract Iterator iterator ();
    // Возвращает итератор набора, позволяющий // перебирать элементы
    public abstract Object [] toArray ();
    // Преобразует набор в массив
    . . . }


    public interface BeanContextChild extends BeanContextListener {
    void setBeanContext (BeanContext bc) throws PropertyVetoException; // Ассоциирует контейнер с компонентом. // Если компонент считает, что новый контейнер ему // не подходит, он возбуждает исключительную ситуацию. // Интерфейс BeanContext описывается ниже, на листинге 26
    BeanContext getBeanContext ();
    // Опрашивает ассоциацию
    . . . }


    public interface BeanContextListener extends java.util.EventListener {
    void beanContextChanged (BeanContextEvent bce);
    // Метод, вызываемый в объектах-подписчиках // при изменениях контейнера
    }


    public abstract class BeanContextEvent extends java.util.EventObject {
    public BeanContext getBeanContext ();
    // Возвращает контейнер, распространяющий событие
    public synchronized void setPropagatedFrom (BeanContext bc);
    // Устанавливает первоисточник события
    public synchronized BeanContext getPropagatedFrom ();
    // Возвращает первоисточник события
    public synchronized boolean isPropagated ();
    // Истина, если событие является вторичным
    }


    public abstract class BeanContextMembershipEvent extends BeanContextEvent {
    public boolean isDeltaMember (Object o);
    // Истина, если заданный компонент был добавлен // или удален
    public Object [] getDeltas ();
    // Возвращает добавленные или удаленные компоненты
    public boolean isChildrenAddedEvent ();
    // Истина, если имело место добавление компонентов
    public boolean isChildrenRemovedEvent ();
    // Истина, если имело место удаление компонентов
    }


    public interface BeanContext extends java.beans.BeanContextChild, java.util.Collection {
    Object instantiateChild ( String beanName) throws IOException, ClassNotFoundException; // Создает новый экземпляр компонента, заданного // именем, и включает его в себя как в контейнер
    Object hasService (Class serviceClass, BeanContextChild requestor);
    // Истина, если контейнер предоставляет // запрашиваемый сервис
    Object getService (Class serviceClass, BeanContextChild requestor);
    // Возвращает сервисный объект запрашиваемого класса
    public java.net.URL getResource (String name, BeanContextChild requestor);
    // Возвращает универсальный локатор ресурса // с заданным именем
    void addBeanContextListener (BeanContextListener bcl);

    void removeBeanContextListener (BeanContextListener bcl);
    . . . }


    public class InfoBus extends Object {
    public static synchronized InfoBus open (Component c);
    // Получение ссылки на экземпляр шины. // Аргумент используется для определения контекста // (контейнера), для которого подходящая шина, возможно, // уже существует. При необходимости создается // новый экземпляр шины
    public static synchronized InfoBus open (String busName);
    // Получение ссылки на экземпляр шины. Аргумент задает // желательное имя экземпляра. Обычно используется // не-компонентами (например, инструментальным // окружением)
    public synchronized void join (InfoBusMember member) throws PropertyVetoException, InfoBusMembershipException; // Включение заданного компонента в число членов шины. // Компонент, желающий подключиться к шине, должен // реализовать интерфейс InfoBusMember. Экземпляр // шины устанавливается в качестве значения свойства // InfoBus нового члена
    public void leave (InfoBusMember member) throws PropertyVetoException; // Выведение компонента из числа членов шины. // Обычно вызывается самим компонентом
    public void propertyChange (PropertyChangeEvent event);
    // Обработка события, вызванного изменением значения // свойства InfoBus у какого-либо члена шины. Служит // для обеспечения целостности связей между шинами и // их членами
    public void addDataProducer (InfoBusDataProducer producer);
    public void addDataConsumer (InfoBusDataConsumer consumer);
    // Обслуживание подписки на события в экземпляре шины, // запрашиваемой поставщиками и/или потребителями // элементов данных
    public void fireItemAvailable (String dataItemName, InfoBusDataProducer producer);
    // Распространение среди потребителей события, // состоящего в том, что на шине появился элемент // данных с указанным именем, помещенный заданным // поставщиком
    public DataItem findDataItem (String dataItemName, InfoBusDataConsumer consumer);
    // Распространение среди поставщиков события, // состоящего в том, что заданный потребитель // нуждается в элементе данных с указанным именем . . .
    }


    public interface InfoBusMember {
    public void setInfoBus (InfoBus infobus) throws PropertyVetoException; // Установка шины, ассоциированной с компонентом. // Обычно вызывается методом InfoBus.join()
    public void addInfoBusListener (VetoableChangeListener vcl);
    // Обслуживание подписки на возможность запрета // изменения свойства InfoBus
    public void addInfoBusListener (PropertyChangeListener pcl);
    // Обслуживание подписки на информацию об изменении // свойства InfoBus . . .
    }


    public class InfoBusMemberImpl extends Object implements InfoBusMember {
    public void joinInfoBus (String busName) throws InfoBusMembershipException; // Подключение к шине с заданным именем
    public void leaveInfoBus () throws PropertyVetoException, InfoBusMembershipException; // Отключение от шины . . .
    }


    public class InfoBusEvent extends java.util.EventObject {
    InfoBusEvent (String itemName, InfoBusEventListener source);
    // Конструктор. Задаются имя ассоциированного // элемента данных и источник события
    public String getDataItemName ();
    // Возвращает имя ассоциированного элемента данных }


    public class InfoBusItemRequestedEvent extends InfoBusEvent {
    InfoBusItemRequestedEvent (String itemName, InfoBusDataConsumer consumer);
    // Конструктор. Устанавливает пустое значение // свойства DataItem и вызывает конструктор // InfoBusEvent
    public void setDataItem (DataItem item);
    // Ассоциирует элемент данных с событийным объектом
    public DataItem getDataItem ();
    // Возвращает ассоциированный элемент данных
    public InfoBusDataConsumer getSourceAsConsumer ();
    // Возвращает источник события }


    public interface Aggregate extends java.rmi.Remote, java.io.Serializable {
    Aggregate getInstanceOf (Class requestedInterface);
    // Возвращает объект, реализующий методы // заданного интерфейса (класса)
    boolean isInstanceOf (Class requestedInterface);
    // Истина, если заданный интерфейс (класс) входит // в число поддерживаемых
    Enumeration getTypes ();
    // Возвращает набор поддерживаемых интерфейсов // (классов) ...
    }
    Comments:

    Copyright ©

    Литература


  • The JavaBeans 1.01 specification. - Sun Microsystems, July, 1997.
  • Java Core Reflection. API and Specification. - Sun Microsystems, February, 1997.
  • L. Cable, G. Hamilton. A Draft Proposal to define an Extensible Runtime Containment and Services Protocol for JavaBeans (Version 0.97). - JavaSoft, August, 1997.
  • L. Cable, G. Hamilton. A Draft Proposal for a Object Aggregation/Delegation Model for JavaBeans (Version 0.8). - JavaSoft, August, 1997.
  • InfoBus Specification. Draft Version 0.04 (First Public Review). - Sun Microsystems, Inc., Lotus Development Corporation, July, 1997.
  • А. Таранов, В. Цишевский. Java как центр архипелага. - Jet Info, 1996, N 9.
  • Ю. Пуха. Объектные технологии построения распределенных информационных систем. - Jet Info, 1997, N 16.

  • Comments:

    Copyright ©


    Массив anchors


    Вы можете ссылаться на объекты anchor в вашей программе, используя массив anchors. Этот массив содержит запись для каждого тага , содержащего атрибут NAME по порядку встречаемости в документе. Например, если документ содержит три поименованных якоря, то эти якоря представлены как document.anchor[0], document.anchor[1], document.anchor[2].
    Использование массива anchors:

    1. document.anchors[index]
    2. document.anchors.length


    index целое число, представляющее якорь в документе.
    Для получения количества якорей в документе используется свойство length: document.anchors.length.
    Хотя массив anchors представляет собой поименованные якоря, значение anchors[index] является всегда нулевым. Но если в документе якоря именуются по порядку натуральными числами, вы можете использовать массив anchors и его свойство length для употребления имени якоря перед использованием его в операторах, таких как установка location.hash.
    Элементы массива anchors окрыты открыты только для чтения. Например, выражение document.anchors[0]="anchor1" не имеет эффекта.


    Массив elements


    Массив объектов, содержащий элементы формы (такие как объекты checkbox, radio и text) по порядку встречаемости.


    Массив forms



    Вы можете ссылаться на формы в вашей программе, используя массив forms (вы можете также использовать имя формы). Этот массив содержит запись для каждого объекта form (тага
    ) по порядку встречаемости в документе. Например, если документ содержит три формы, то эти формы представлены так document.forms[0], document.forms[1] и document.forms[2].
    Использование массива forms:

    1. document.forms[index]
    2. document.forms.length

    index целое число, представляющее форму в документе.
    Для получения количества форм в документе используется свойство length: document.forms.length.
    Вы можете также обращаться к элементам формы, используя массив forms. Например, вы обращаетесь к объекту text с именем quantity во второй форме так:
    document.forms[1].quantity.
    Элементы массива forms открыты только для чтения. Например, выражение document.forms[0]="music" не имеет эффекта.
    Значение каждого элемента в массиве forms является , где nameAttribute является атрибутом NAME формы.


    Массив frames


    Вы можете ссылаться на объекты frame в вашей программе, используя массив frames. Этот массив содержит запись для каждого фрейма-потомка (тага ) в окне, содержащем таг по порядку встречаемости. Например, если окно содержит три фрейма-потомка, эти фреймы отображаются как parent.frames[0], parent.frames[1], parent.frames[2].
    Использование массива frames:

    1. [frameReference.]frames[index]
    2. [frameReference.]frames.length
    3. [windowReference.]frames[index]
    4. [windowReference.]frames.length

    frameReference действительный путь ссылки на фрейм, описанный в объекте .
    windowReference переменная windowVar из определения окна (смотрите объект ) или один из синонимов top или parent.
    index целое число, представляющее количество фреймов в родительском окне.
    Для получения количества фреймов-потомков в окне или фрейме используется свойство length:
    [windowReference.]frames.length [frameReference.]frames.length
    Элементы в массиве frames открыты только для чтения. Например, выражение [windowReference.]frames[0]="frame1" не имеет эффекта.
    Значение каждого элемента в массиве frames является , nameAttribute является атрибутом NAME фрейма.


    Массив links


    Вы можете ссылаться на объекты link в вашей программе, используя массив links. Этот массив содержит запись для каждого объекта link (тага ) по порядку встречаемости в документе. Например, если документ содержит три объекта link, то эти ссылки представлены так document.links[0], document.links[1] и document.links[2].
    Использование массива links:

    1. document.links[index]
    2. document.links.length

    index целое число, представляющее ссылку в документе.
    Для получения количества ссылок в документе используется свойство length: document.links.length.
    Элементы в массиве links открыты только для чтения. Например, выражение document.links[0]="link1" не имеет эффекта.


    Механизм событий


    Согласно спецификациям JavaBeans, у каждого события есть источник и, быть может, один или несколько подписчиков (получателей).
    Источник обязан:

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

    В свою очередь, подписчик должен предпринять следующие действия:

    • выполнить реализацию интерфейса события, то есть по сути реализовать метод обработки события (напомним, что имя этого метода выбрал источник);
    • зарегистрироваться в качестве подписчика события.

    Рассмотрим перечисленные шаги более подробно.


    Метод alert


    Отображает диалоговое окно Alert с сообщением и кнопкой OK.


    Метод anchor


    Создает HTML якорь, который используется как гипертекстовая ссылка.


    Метод back


    Позволяет вернуться на предыдущий URL в списке посещенных URL'ей.


    Метод big


    Вызывает строку, отображаемою большим шрифтом, как если установить ей таг .


    Метод blink


    Вызывает мигающую строку, как если установить ей таг .


    Метод blur


    Изменен в Navigator 3.0.
    Убирает фокус с указанного объекта.


    Метод bold


    Вызывает строку, отображаемую жирным шрифтом, как если установить ей таг .


    Метод ceil


    Возвращает ближайшее целое числа, округленного в большую сторону или равное числу.


    Метод clearTimeout


    Окончание задержки, установленной методом setTimeout.


    Метод click


    Имитирует щелчок мыши на выбранном элементе формы.


    Метод close (объект document)


    Закрывает поток вывода и завершает вывод данных в рабочую область Navigator'а для отображения.


    Метод close (объект window)


    Изменен в Navigator 3.0.
    Закрывает указанное окно.


    Метод confirm


    Отображает диалоговое окно с указанным сообщением и кнопками OK и Cancel.


    Метод exp


    Возвращает enumber, где number является аргументом, а e является экспонентой, основанием натурального логарифма.


    Метод fixed


    Вызывает строку, отображаемую моноширинным шрифтом, как если установить ей таг .


    Метод floor


    Возвращает ближайшее целое числа, округленного в меньшую сторону или равное числу.


    Метод focus


    Изменен в Navigator 3.0.
    Устанавливает фокус на определенный объект.


    Метод fontcolor


    Вызывает строку, отображаемую установленным цветом, как если поместить ее в таг .


    Метод fontsize


    Вызывает строку, отображаемую установленным размером шрифта, как если поместить ее в таг .


    Метод forward


    Загружает следующий URL в списке посещенных URL'ей.


    Метод getTime


    Возвращает числовое значение, соответствующее времени для указанной даты.


    Метод getTimezoneOffset


    Возвращает смещение временной зоны в минутах относительно гринвичского меридиана.


    Метод indexOf


    Возвращает индекс позиции впервые встреченного искомого значения в вызванном объекте string. Поиск начинается с fromIndex.


    Метод italics


    Вызывает строку, отображаемую курсивом, как если установить ей таг .


    Метод lastIndexOf


    Возвращает индекс впервые встреченного искомого значения в вызванном объекте string. Поиск по строке осуществляется в обратном направлении, начиная с fromIndex.


    Метод link


    Создает гипертекстовую ссылку HTML, по которой можно перейти на другой URL.


    Метод log


    Возвращает натуральный логарифм числа (по основанию e).


    Метод open (объект document)


    Открывает поток для получения вывода методами write и writeln.


    Метод parse


    Возвращает количество миллисекунд в строковом представлении даты, начиная с 1 января 1970 00:00:00, по местному времени.


    Метод pow


    Возвращает base в степени exponent, т.е. baseexponent.


    Метод prompt


    Отображает диалоговое окно с сообщением и полем ввода.


    Метод random


    Изменен в Navigator 3.0.
    Возвращает случайное число между нулем и единицей. Этот метод применяется только на UNIX платфомах.


    Метод setTimeout


    Выполняет выражение по истечении установленного количества миллисекунд.


    Метод small


    Выводит строку, отображаемую маленьким шрифтом, как если установить ей таг .


    Метод strike


    Выводит строку, отображаемую как перечеркнутый текст, как если установить ей таг .


    Метод sub


    Выводит строку, отображаемую как нижний индекс, как если установить ей таг .


    Метод sup


    Выводит строку, отображаемую как нижний индекс, как если установить ей таг .


    Метод toGMTString


    Переводит дату в строку, используя среднее гринвичское время (GMT).


    Метод toLocaleString


    Переводит дату в строку, используя местный часовой пояс.


    Метод toLowerCase


    Возвращает значение вызванной строки, переведенной в нижний регистр.


    Метод toUpperCase


    Возвращает значение вызванной строки, переведенной в верхний регистр.


    Метод UTC


    Возвращает количество миллисекунд в объект date, начиная с 1 января 1970 00:00:00, GMT.


    Метод write


    Пишет одно или более HTML выражений в документ в указанном окне.


    Метод writeln


    Пишет одно или более HTML выражений в документ в указанном окне, добавляя символ перевода на новую строку в конец выходной информации.


    Методы и функции JavaScript


    Наталия Бельтикова, Ирина Кузина (РНЦ "Курчатовский институт")




    Методы и события, ассоциированные со свойствами


    Свойства компонентов могут быть скалярными и индексируемыми. Выборка и установка скалярных свойств осуществляется с помощью методов get/set:
    public get (); public void set ( p); (такой шаблон заголовков методов необходим для поддержки рефлексии).
    Например, если свойством компонента является цвет, соответствующие методы могут описываться как
    public Color getColor (); public void setColor (Color c); (класс Color определяется в пакете java.awt).
    Особый шаблон предусмотрен для выборки булевых свойств:
    public boolean is ();
    Вообще говоря, свойства могут быть доступны только на чтение или только на запись; тогда для них определяется лишь один из методов - get или set соответственно.
    Индексируемые свойства образуют массивы с целочисленными индексами. С этими массивами можно работать покомпонентно или как с единым целым. Шаблоны соответствующих методов и их примеры приведены на листинге (под здесь понимается тип элемента массива).
    Спецификации JavaBeans предусматривают наличие связанных свойств, после изменения которых возбуждается событие propertyChange. Другие компоненты могут подписаться на это событие и, следовательно, получать информацию о производимых изменениях, анализируя объект-параметр PropertyChangeEvent, фрагмент описания которого приведен на листинге .
    Метод propertyChange, вызываемый для обработки изменения значения свойства, описан в интерфейсе PropertyChangeListener (листинг ). Источник события, в соответствии с общими правилами (см. раздел ), должен реализовать методы addPropertyChangeListener и removePropertyChangeListener, обеспечивая регистрацию подписчиков.
    Вспомогательный класс PropertyChangeSupport, входящий в пакет java.beans, реализует рутинные действия, характерные для обслуживания связанных свойств (см. листинг ). Естественно, разработчики компонентов могут воспользоваться этим классом.
    Помимо связанных, спецификации JavaBeans описывают ограниченные свойства, перед изменением значений которых распространяется событие vetoableChange с параметром PropertyChangeEvent. Подписчики этого события могут отклонить планируемое изменение, возбудив исключительную ситуацию PropertyVetoException. Метод set должен отреагировать на подобное вето, вернув прежнее значение, "извинившись" перед уже оповещенными подписчиками (то есть вызвав их методы vetoableChange с обратной парой новое/старое значение) и передав исключительную ситуацию инициатору изменения. Соответственно, заголовок set-метода для ограниченных свойств приобретает следующий вид:
    public void set ( p) throws PropertyVetoException;
    Синтаксически связанные и ограниченные свойства аналогичны, но реализация последних требует гораздо большей аккуратности и от источников (set-методов), и от подписчиков события vetoableChange. Источнику рекомендуется воспользоваться вспомогательным классом java.beans.VetoableChangeSupport, аккуратно выполняющим все необходимые действия. Подписчикам будет проще, если сделать свойство и ограниченным, и связанным. В таком случае до изменения (при обработке события vetoableChange) подписчики заботятся только о голосовании "за" и "против", а после изменения (при обработке события propertyChange) они выясняют, каким же стало новое значение.


    Настройка свойств


    Компонент объектной среды особенно полезен тогда, когда его можно настроить. Обычно настройка выполняется во время сборки приложения в инструментальном окружении.
    Для несложных компонентов можно представить себе схему настройки, при которой окружение путем интроспекции выявляет афишируемые свойства и порождает электронный бланк, каждая клетка которого соответствует одному свойству. Редактирование содержимого клетки выполняется соответствующим редактором свойства. Редакторы свойств, принадлежащих стандартным типам, входят в Java-окружение; в более сложных случаях должен существовать специализированный редактор, поставляемый с компонентом или с инструментальным окружением.
    Класс-редактор свойства должен реализовывать интерфейс PropertyEditor (см. листинг ). Обязательными для реализации являются метод setValue () и один из методов прорисовки и редактирования свойства - в графическом или текстовом представлении. По общим правилам, при изменении значения свойства редактор должен возбуждать событие propertyChange. Отсюда необходимость в реализации методов add/remove.
    Для установления ассоциаций между типами данных и их редакторами служит класс PropertyEditorManager. Он поддерживает каталог зарегистрированных редакторов; если же явная регистрация отсутствует, PropertyEditorManager пытается отыскать класс, имя которого образовано приписыванием к имени типа текста "Editor" (см. листинг ).
    Для настройки сложных компонентов с большим числом специфических свойств может потребоваться специализированный класс, облегчающий действия пользователей по сравнению со стандартным редактированием бланка. Такой класс-настройщик должен быть прямым или косвенным преемником класса java.awt.Component, одновременно реализуя интерфейс java.beans. Customizer (описание последнего приведено на листинге ).
    Чтобы известить окружение о наличии настройщика, компонент должен предоставлять класс BeanInfo и, в частности, реализовывать метод getCustomizerClass класса BeanDescriptor (см. раздел ).
    На наш взгляд, механизм свойств специфицирован в среде JavaBeans весьма квалифицированно. В простых ситуациях разработчику компонента не нужно делать ничего; в сложных же случаях он имеет практически полную свободу для самых изощренных реализаций.
    Comments:

    Copyright ©


    Некоторые комментарии


    При проектировании механизма событий разработчикам спецификаций JavaBeans пришлось учитывать целую гамму требований:

    • механизм должен естественным образом интегрироваться в Java-среду;
    • механизм событий должен быть простым и для реализации, и для использования;
    • механизм должен быть расширяемым, поддерживать разные модели распространения событий;
    • механизм должен допускать интеграцию с другими компонентными средами.

    Таким образом, задача перед разработчиками стояла трудная, и, на наш взгляд, они не сумели найти достаточно хорошего решения, допустив ряд методологических просчетов.
    Если есть система, содержащая n источников событий и m подписчиков, то при использовании базового механизма число связей, которые необходимо поддерживать, имеет порядок n * m. Это много. Напомним, что одним из основных побудительных мотивов развития объектных технологий было понижение внутренней сложности программных систем путем обеспечения относительной независимости компонентов. Использование адаптеров позволяет уменьшить количество связей до величины порядка n + m, однако оно нуждается в стандартизации.
    Предлагаемый механизм событий плохо параметризуется, прежде всего потому, что имена методов обработки фиксируются на уровне исходных текстов. Из-за этого трудно писать программы, систематически обрабатывающие различные события. Приходится как минимум наращивать объем программ, что вступает в противоречие с основными положениями Java-технологии.
    Пространство событий не структурировано, хотя некоторые действия в некоторых частях среды Java (например, в абстрактном оконном инструментарии, AWT) в этом направлении предприняты. Возможность иерархической организации элементов - одно из необходимых условий успешного создания и сопровождения сложных систем. Здесь это условие нарушено (конечно же, иерархии классов в данном случае недостаточно).
    Складывается впечатление, что в предлагаемом виде механизм событий является слишком простым, в нем не хватает ряда понятий. По существу это способ диспетчеризации вызовов методов. Какая-либо "событийность" в такой трактовке попросту отсутствует. Обычно события возникают с частотой, определяемой факторами, внешними по отношению к программной системе, так что необходимо минимизировать по крайней мере время распространения события. При предлагаемом синхронном вызове методов оценить время распространения не представляется возможным. Более того, необходимо позаботиться о противодействии атакам на доступность, производимым путем регистрации подписчика, метод обработки которого не возвращает управления. Часть этих проблем можно решить, реализовав интеллектуальный многопотоковый адаптер, но тогда придется отдельно решать вопросы безопасности, так как ряд защитных мер в Java-технологии основан на прослеживании стека вызовов, и опасность может грозить со стороны зловредного источника событий.
    При подготовке спецификаций JavaBeans пришлось пересмотреть механизм событий, первоначально предусматривавшийся абстрактным оконным инструментарием. Весьма возможно, что и версия 1.01 спецификаций JavaBeans не является в этом смысле окончательной. Впрочем, для систем небольшого и среднего масштаба она представляется вполне удовлетворительной.


    Объект anchor (массив anchors)


    Фрагмент текста, который может быть помещен в гиперссылку.


    Объект button


    Изменен в Navigator 3.0.
    Нажимаемая кнопка в HTML форме.


    Объект checkbox


    Изменен в Navigator 3.0.
    Контрольный переключатель (checkbox) в HTML форме. checkbox является сенсорным переключателем, позволяющим пользователю устанавливать значение on или off.


    Объект Date


    Изменен в Navigator 3.0.
    Позволяет вам работать с датой и временем.


    Объект document


    Изменен в Navigator 3.0.
    Содержит информацию о текущем документе и обеспечен методами отображения HTML-документа.


    Объект form (массив forms)


    Изменен в Navigator 3.0.
    Позволяет пользователям вставлять текст и делать изменения из объектов формы таких как графические опции, селекторные кнопки и списки элементов. Вы можете также использовать форму для отправки данных серверу.


    Объект frame (массив frames)


    Изменен в Navigator 3.0.
    Окно, которое может показывать на одном экране несколько независимо прокручиваемых фреймов, каждый из которых имеет свой собственный URL. Фреймы могут указывать на различные URL'и и быть ссылкой других URL'ей, все внутри одного экрана.


    Объект hidden


    Изменен в Navigator 3.0.
    Текстовый объект формы, который не отображается в HTML форме. Объект hidden используется для передачи пар имя/значение при загрузке формы.


    Объект history


    Содержит информацию о URL'ях, которые клиент посещал внутри окна. Эта информация сохраняется и доступна через меню Go Navigator'а.


    Объект link (массив links)


    Изменен в Navigator 3.0.
    Кусок текста или картинка, определенные как гипертекстовая ссылка. При выборе пользователем ссылки в тексте, в окно загружается документ, соответствующий этой гипертекстовой ссылке.


    Объект location


    Изменен в Navigator 3.0.
    Содержит информацию о текущем URL.


    Объект Math


    Изменен в Navigator 3.0.
    Встроенный объект, имеющий свойства и методы для математических констант и функций. Например, свойство PI объекта Math имеет значение Пи.


    Объект navigator


    Изменен в Navigator 3.0.
    Содержит информацию о используемой версии Navigator'а.


    Объект password


    Изменен в Navigator 3.0.
    Текстовое поле в HTML форме, значение которого на экране отображается звездочками (*). Когда пользователь вводит текст в это поле, звездочки (*) скрывают введенное значение.


    Объект radio


    Изменен в Navigator 3.0.
    Установка статических кнопок (кнопок radio) в HTML форме. Установка кнопок radio позволяет пользователю выбрать один пункт из списка.


    Объект reset


    Изменен в Navigator 3.0.
    Кнопка сброса (кнопка reset)в HTML форме. Кнопка reset сбрасывает все элементы в форме в их значения, установленные по умолчанию.


    Объект submit


    Изменен в Navigator 3.0.
    Кнопка передачи данных (кнопка submit) в HTML форме. Кнопка submit вызывает передачу формы.


    Объект text


    Изменен в Navigator 3.0.
    Поле ввода текста в HTML форме. Текстовое поле позволяет пользователю вводить слова, фразы или числовой ряд.


    Объект textarea


    Изменен в Navigator 3.0.
    Многострочное поле ввода текста в HTML форме. Поле textarea позволяет пользователю вводить слова, фразы или числа.


    Объект window


    Изменен в Navigator 3.0.
    Объект верхнего уровня для групп объектов document, location и history.


    Объекты JavaScript


    Наталия Бельтикова, Ирина Кузина (РНЦ "Курчатовский институт")




    Обмен данными


    Компоненты объектной среды обычно взаимодействуют не только с объемлющим контейнером, но и между собой. Механизм событий - это одна грань такого взаимодействия. В дополнение необходима возможность обмена структурированными элементами данных.
    Соответствующая спецификация [5] готовится специалистами компаний Sun Microsystems и Lotus Development. И хотя совместная работа только началась, мы сочли необходимым осветить выдвинутые предложения ввиду исключительной важности затрагиваемой темы.
    Центральным понятием предлагаемых спецификаций является информационная шина. Компоненты могут подключаться к шине, помещать на нее данные (это делают поставщики) и считывать данные (это делают потребители). Обмен носит асинхронный характер: поставщик, поместив данные, не заботится о том, когда они будут считаны. Для идентификации элементов данных используются их имена.
    Информационная шина описывается классом InfoBus. Методы этого класса (реализуемого в рамках виртуальной Java-машины) порождают экземпляры шины, осуществляют подключение компонентов к подходящим экземплярам, отслеживают список шин и подключенных к ним компонентов, распространяет события, обслуживающие обмен данными, и т.п. Фрагмент описания класса InfoBus представлен на листинге .
    Процесс информационного взаимодействия компонентов в спецификациях InfoBus можно подразделить на пять фаз:

    • подключение к шине;
    • прослушивание шины;
    • установление контакта между поставщиком и потребителем, передача элемента данных;
    • выяснение формата элемента данных;
    • интерпретация элемента данных.

    Для подключения к шине компонент должен реализовать интерфейс InfoBusMember, получить ссылку на экземпляр шины и войти в число ее членов. Фрагмент интерфейса InfoBusMember приведен на листинге . Обратим внимание, что шина, ассоциируемая с компонентом, трактуется как его свойство, изменение значения которого может отслеживаться на основе механизма событий.
    Для облегчения реализации интерфейса InfoBusMember спецификации предлагают класс InfoBusMemberImpl, который, в дополнение к "обязательным", предоставляет еще два удобных метода - joinInfoBus () и leaveInfoBus () (см. листинг ).
    Для реализации второй фазы (прослушивание шины) поставщик должен подписаться на информацию о запросах данных, воспользовавшись методом addDataProducer () класса InfoBus. Аналогично, потребитель должен подписаться на информацию о наличии данных, обратившись к методу addDataConsumer (). Компонент может одновременно являться и поставщиком, и потребителем (типичный пример - промежуточное звено конвейера).
    Третью фазы информационного взаимодействия компонентов обслуживают преимущественно событийные объекты. В соответствии с моделью, принятой в спецификации InfoBus, поставщик оповещает потребителей о появлении нового элемента данных. Потребители запрашивают у поставщиков данные, когда в них возникает нужда. Обмен элементом данных становится возможным, если поставщик и потребитель используют для него одно и то же имя. Ответственность за надлежащий выбор имен лежит на разработчике приложения.
    Класс InfoBusEvent является базовым для событийных объектов поставки/приема. Его описание приведено на листинге .
    Поставщик объявляет о наличии новых данных, рассылая всем потребителям шины событийный объект класса InfoBusItemAvailableEvent. Методы этого класса позволяют получить информацию о поставщике и ассоциированный элемент данных.
    Потребитель, желающий получить данные, рассылает объект класса InfoBusItemRequestedEvent, описание которого приведено на листинге . Обратим внимание на метод setDataItem, позволяющий поставщику, получившему событийный объект, "привязать" к нему элемент данных, выдав его тем самым инициатору запроса.
    Формат элемента данных определяется интерфейсами, которые этот элемент реализует. Базовым интерфейсом элементов данных является DataItem, в число преемников которого входят CollectionAccess, DbAccess и др. Поскольку проблема обмена структурированными данными уже решена в рамках абстрактного оконного инструментария (пакет java.awt.datatransfer), представляется естественным и в спецификациях InfoBus пойти тем же путем, что и было сделано.
    Спецификации InfoBus только начали свой путь к официальному утверждению. Многие детали еще не определены. Тем не менее, основополагающие решения приняты, и они представляются весьма удачными. В частности, понятие экземпляра шины позволяет структурировать пространство поставщиков и потребителей, уменьшая сложность системы и повышая эффективность обмена данными.


    Обработчик событий onBlur


    Изменен в Navigator 3.0.
    Событие blur происходит когда поля формы select, text или textarea теряют фокус. Обработчик событий onBlur выполняет программу JavaScript, когда происходит событие blur.
    Синтаксис onBlur смотрите в описании соответствующих объектов.


    Обработчик событий onChange


    Событие change происходит, когда поля формы select, text или textarea теряют фокус и их значения изменяются. Обработчик событий onChange выполняет программу JavaScript, когда происходит событие change.
    Обработчик событий onChange используется для подтверждения данных после их изменения пользователем.
    Синтаксис onChange смотрите в описании соответствующих объектов.


    Обработчик событий onClick


    Событие click происходит при щелчке мышью на объекте формы. Обработчик событий onClick выполняет программу JavaScript, когда происходит событие click.
    Синтаксис onClick смотрите в описании соответствующих объектов.


    Обработчик событий onFocus


    Изменен в Navigator 3.0.
    Событие focus происходит, когда поле получает фокус ввода с клавиатуры или щелчком мыши. Выбор результатов внутри поля связано с событием select, но не с событием focus. Обработчик событий onFocus выполняет программу JavaScript, когда происходит событие focus.
    Синтаксис onFocus смотрите в описании соответствующих объектов.


    Обработчик событий onLoad


    Событие load происходит, когда Navigator завершает загрузку окна или всех фреймов внутри тага . Обработчик событий onLoad выполняет программу JavaScript, когда происходит событие load.
    Обработчик событий onLoad используется внутри тагов или , например, <BODY onLoad="...">.
    В отношении и событие onLoad, размещенное внутри фрейма в таге , выполняется перед событием onLoad, размещенном внутри в таге


    Обработчик событий onMouseOver


    Событие mouseOver происходит каждый раз, когда курсор мыши попадает на объект. Обработчик событий onMouseOver выполняет программу JavaScript, когда происходит событие mouseOver.
    Вы должны возвращать true внутри обработчика событий, если вы хотите использовать свойства status или defaultStatus с обработчиком событий onMouseOver.
    Синтаксис onMouseOver смотрите в описании соответствующих объектов.


    Обработчик событий onSelect


    Событие select происходит, когда пользователь выбирает некоторый текст внутри поля text или textarea. Обработчик событий onSelect выполняет программу JavaScript, когда происходит событие select.
    Синтаксис onSelect смотрите в описании соответствующих объектов.


    Обработчик событий onSubmit


    Изменен в Navigator 3.0.
    Событие submit происходит, когда пользователь отправляет форму на Web-сервер. Обработчик событий onSubmit выполняет программу JavaScript, когда происходит событие submit.
    Вы можете использовать обработчик событий onSubmit для остановки передачи данных формы; для этого используется выражение return, которое возвращает false в обработчик событий. Любое другое возвращенное значение отправляет форму.
    Синтаксис onSubmit смотрите в описании соответствующих объектов.


    Обработчик событий onUnload


    Событие unload происходит, когда вы выходите из документа. Обработчик событий onUnload выполняет программу JavaScript, когда происходит событие unload.
    Обработчик событий onLoad используется внутри тагов или , например, <BODY onUnload="...">.
    В отношении и событие onUnload, размещенное внутри фрейма в таге , происходит перед событием onUnload, размещенного внутри в таге .


    Обработчики событий JavaScript


    Наталия Бельтикова, Ирина Кузина (РНЦ "Курчатовский институт")




    в документе метод bold используется


    Для форматирования и отображения строки в документе метод bold используется с методами write или writeln.

    в строке индексируются слева направо.


    Символы в строке индексируются слева направо. Индексом первого символа является 0, индексом последнего символа - stringName.length-1. Если вы указали index превышающий количество символов в строке, JavaScript возвратит пустую строку.

    Результат действия метода click изменяется


    Результат действия метода click изменяется в зависимости от вызываемого элемента:

    • для button, reset и submit выполняется одинаковое действие - нажатие кнопки.
    • для radio - выбор кнопки radio.
    • для checkbox - отметка галочкой checkbox и установка значения на on.


    Метод close закрывает поток вывода,


    Метод close закрывает поток вывода, открытый методом document.open(). Если поток был открыт для рабочей области Navigator'а, метод close завершает вывод содержимого потока на экран. Таги стиля шрифта, такие как и
    , автоматически закрывают поток вывода. Метод close также останавливает "meteor shower" в иконе Navigator'а и отображает "Document: Done" в строке состояния.

    Метод close закрывает указанное окно.


    Метод close закрывает указанное окно. Если вы объявляете close без указания windowReference, то JavaScript закрывает текущее окно.
    В событиях вы должны указывать window.close() вместо обычно используемого close(). Объявление close() без определения имени объекта равносильно document.close().

    Метод confirm используется для принятия


    Метод confirm используется для принятия пользователем решения, требующего выбора OK или Cancel. Аргумент message определяет сообщение, которое требует решения пользователя. Метод confirm возвращает true, если пользователь выбрал OK, и false, если пользователь выбрал Cancel.
    Хотя confirm является методом объекта window, вам не нужно указывать windowReference при его вызове. Например, windowReference.confirm() является необязательным.

    Метод cos возвращает числовое значение


    Метод cos возвращает числовое значение между -1 и 1, которое представляет собой косинус угла.

    Функция escape не является методом,


    Функция escape не является методом, связанным с любым объектом, но является частью самого языка.
    Значение, возвращаемое функцией escape, является строкой вида "%xx", где xx является ASCII кодировкой символа в аргументе. Если аргументом функции escape является буквенно-числовым символом, то функция escape возвращает тот же символ.

    Функция eval является встроенной функцией


    Функция eval является встроенной функцией JavaScript. Она не является методом, связанным с любым объектом, но является частью самого языка.
    Аргументом функции eval является строка. Не используйте eval для вычислений арифметических выражений. JavaScript вычисляет арифметические выражения автоматически. Если аргумент представляет собой выражение, eval вычисляет выражение. Если аргумент представляет собой одно или более JavaScript команд, то eval выполняет команды.
    Если вы построили арифметическое выражение как строку, вы можете использовать eval для ее вычисления.

    Метод alert используется для отображения


    Метод alert используется для отображения сообщения, не требующего решения пользователя. Аргумент message определяет сообщение, которое содержит диалоговое окно.
    Хотя alert является методом объекта window вам не нужно определять windowReference, при его вызове. Например, windowReference.alert() необязательно.

    в документе метод fixed используется


    Для форматирования и отображения строки в документе метод fixed используется с методами write и writeln.

    Метод focus используется для установки


    Метод focus используется для установки фокуса на указанный элемент формы. Вы можете затем программно ввести значение в элемент или позволить пользователю ввести значение.

    в документе метод fontcolor используется


    Для форматирования и отображения строки в документе метод fontcolor используется с методами write и writeln.
    Если вы определяете color как шестиразрядное шестнадцатиричное число вы должны использовать формат rrggbb.
    Метод fontcolor анулирует значение, установленное в свойстве fgColor.

    в документе метод fontsize используется


    Для форматирования и отображения строки в документе метод fontsize используется с методами write и writeln.
    Когда вы определяете size как целое, вы устанавливаете размер stringName в один из семи специфицированных размеров. Когда вы определяете size как "-2", вы устанавливаете размер шрифта stringName относительно размера, установленного в таге .

    Этот метод выполняет действие равносильное


    Этот метод выполняет действие равносильное выбору пользователем кнопки Forward в окне Navigator'а. Метод forward также равносилен history.go(1).

    возвращаемое getDate, является целым числом


    Значение, возвращаемое getDate, является целым числом от 1 до 31.

    возвращаемое getDay, является целым числом,


    Значение, возвращаемое getDay, является целым числом, соответствующим дню недели: ноль для воскресенья, один для понедельника, два для вторника и так далее.

    возвращаемое getHours, является целым числом


    Значение, возвращаемое getHours, является целым числом от 0 до 23.

    возвращаемое getMinutes, является целым числом


    Значение, возвращаемое getMinutes, является целым числом от 0 до 59.

    возвращаемое getMonth, является целым числом


    Значение, возвращаемое getMonth, является целым числом от 0 до 11. Ноль соответствует январю, один - февралю и так далее.

    с методами write или writeln


    Метод anchor используется с методами write или writeln для программного создания и отображения якоря в документе. Якорь создается с помощью метода anchor, а write или writeln используется для отображения якоря в документе.
    В синтаксисе строка text представляет собой текст, который увидит пользователь. Строка nameAttribute представляет собой атрибут NAME тага
    .
    Якоря, созданные с помощью метода anchor становятся элементами массива anchors. Информацию о массиве anchors смотрите в объекте .

    возвращаемое getSeconds, является целым числом


    Значение, возвращаемое getSeconds, является целым числом от 0 до 59.

    возвращаемое методом getTime, является числом


    Значение, возвращаемое методом getTime, является числом миллисекунд, начиная с 1 января 1970 00:00:00. Вы можете использовать этот метод для назначения даты и времени другому объекту date.

    Смещение временной зоны является разницей


    Смещение временной зоны является разницей между местным временем и GMT (гринвичским временем). Сезонное время (зимнее, летнее) не дает возможности говорить об этом смещении как о константе.

    возвращаемое getYear, равно году минус


    Значение, возвращаемое getYear, равно году минус 1900. Например, если год равен 1976, то возвращаемое значение равно 76.

    Метод go позволяет перейти на


    Метод go позволяет перейти на адрес, содержащийся в списке посещенных URL'ей, который указан вами в качестве аргумента метода go. Вы можете посмотреть этот список, выбрав History в меню Window. Последние 10 позиций списка также отображаются в меню Go.
    Аргумент delta может быть положительным и отрицательным числом. Если delta больше нуля, то метод go переходит на URL вперед в списке посещенных URL'ей; в противном случае переход осуществляется на URL назад. Если delta равна 0, то Navigator перезагружает текущую страницу.
    Аргумент location является строкой. location выбирает для загрузки ближайший адрес в списке посещенных URL'ей, содержащий подстроку location, указанную вами в качестве аргумента. Каждая часть URL содержит определенную информацию. Смотрите объект , где описаны компоненты URL.

    в строке индексируются слева направо.


    Символы в строке индексируются слева направо. Индекс первого символа равен 0, индекс последнего - stringName.length-1.
    Если вы не указываете значение fromIndex, JavaScript принимает по умолчанию 0. Если searchValue не найден, JavaScript возвращает -1.

    Функция isNaN является встроенной функцией


    Функция isNaN является встроенной функцией JavaScript. Она не является методом, связанным с любым объектом, но является частью самого языка. Функция isNaN применяется только на UNIX платформах.
    На всех платформах, за исключением Windows, функции parseFloat и parseInt возвращают "NaN", когда они принимают нечисловое значение. Значение "NaN" не является числом в любом случае. Вы можете вызывать функцию NaN для того, чтобы определить является ли результат parseFloat или parseInt "NaN". Если над "NaN" совершаются арифметические операции, то их результатами также будет "NaN".
    Функция isNaN возвращает true или false.

    в документе метод italics используется


    Для форматирования и отображения строки в документе метод italics используется с методами write или writeln.

    в строке индексируются слева направо.


    Символы в строке индексируются слева направо. Индекс первого символа равен 0, индекс последнего - stringName.length-1.
    Если вы не указываете значение fromIndex, JavaScript принимает по умолчанию stringName.length-1 (конец строки). Если searchValue не найден, JavaScript возвращает -1.

    в документе метод link используется


    Для создания и отображения гипертекстовой ссылки в документе метод link используется с методами write или writeln. Создайте ссылку методом link, затем вызовите write или writeln для отображения ссылки в документе.
    В синтаксисе строка linkText представляет собой текст, который увидит пользователь. Строка hrefAttribute представляет собой атрибут HREF тага
    , это будет целевой URL. Каждая часть URL содержит определенную информацию. Смотрите объект , где описаны компоненты URL.
    Ссылки, созданные методом link, становятся элементами массива .

    Метод asin возвращает числовое значение


    Метод asin возвращает числовое значение между -Пи/2 и Пи/2. Если значение number находится за пределами данного диапазона, возвращаемое значение всегда будет 0.

    Если значение number находится за


    Если значение number находится за пределами диапазона, возвращенное значение всегда будет -1.797693134862316e+308.

    Метод open открывает поток для


    Метод open открывает поток для получения вывода методами write и writeln. Если mimeType является текстом или картинкой, то поток открыт в рабочую область Navigator'а; иначе, поток открыт на plug-in. Если документ уже существует в целевом окне, то метод open очищает его.
    Для закрытия потока используйте метод document.close(). Метод close вызывает текст или картинку, которые были отправлены в рабочую область Navigator'а для отображения. После использования document.close(), введите document.open() снова, когда вы захотите начать вывод другого потока.
    mimeType является необязательным аргументом, определяющим тип документа. Если вы не указываете mimeType, то метод open принимает по умолчанию text/html.
    Описание mimeType:

    • text/html определяет текст, содержащий ASCII текст в HTML формате.
    • text/plain определяет текст, содержащий ASCII текст с символами конца строки, для ограничения отображаемых строк.
    • image/gif определяет документ с закодированными байтами, содержащий GIF заголовок и размеры в пикселях.
    • image/jpeg определяет документ с закодированными байтами, содержащий JPEG заголовок и размеры в пикселях.
    • image/x-bitmap определяет документ с закодированными байтами, содержащий bitmap заголовок и размеры в пикселях.
    • plug-in загружает определенный plug-in и использует его как место назначения для методов write и writeln. Например, "x-world/vrtml" загружет VR Scout VRML plug-in из Chaco Communications, а "aplication/x-director" загружает Macromedia Shockware plug-in.


    Метод open открывает новое окно


    Метод open открывает новое окно web-броузера клиента, что равносильно выбору New WebBrowser из меню File Navigator'а. Аргумент URL определяет URL, содержащийся в новом окне. Если URL является пустой строкой, то создастся пустое окно.
    В событиях вы должны указывать window.open() вместо обычно используемого open(). Объявление open() без определения имени объекта равносильно document.open().
    windowFeatures является необязательным списком перечисленных через запятую опций для нового окна. Булевы опции windowFeatures принимают значение true, если они определены без значений, или как yes или 1. Например, open("", "messageWindow", "toolbar") и open("", "messageWindow", "toolbar=1") как в первом, так и во втором случае опция toolbar принимает значение true. Если windowName не определяет существующего окна и вы не определяете windowFeatures, то все булевы опции windowFeatures принимают по умолчанию значение true. Если вы определяете любую из опций windowFeatures, то все остальные опции принимают значение false, если вы их не определите дополнительно.
    Описание windowFeatures:

    • toolbar создает стандартные рабочие инструменты Navigator'а, с такими кнопками как "Back" и "Forward".
    • location создает поле ввода Location.
    • directories создает кнопки стандартных директорий Navigator'а, такие как "What's New" и "What's Coll".
    • status создает строку состояния внизу окна.
    • menubar создает меню вверху окна.
    • scrollbars создает горизонтальную и вертикальную прокрутки, когда документ больше, чем размер окна.
    • resizable позволяет пользователю изменять размер окна.
    • width определяет ширину окна в пикселях.
    • height определяет высоту окна в пикселях.


    и возвращает количество миллисекунд, начиная


    Метод parse выдает дату в строковом представлении (например, "Dec 25, 1995") и возвращает количество миллисекунд, начиная с 1 января 1970 00:00:00 (по местному времени). Эта функция используется для установки значений даты, основанных на строковом значении, например, в сочетании с методом setTime и объектом Date.
    Полученная строка представляет собой время, parse возвращает значение времени. Она принимается в стандартном синтаксисе даты IETF: "Mon, 25 Dec 1995 13:30:00 GMT". Она понимает континентальную US временную зону, но в основном, используется временная зона смещения, например "Mon, 25 Dec 1995 13:30:00 GMT+0430" (4 часа, 30 минут западнее Гринвича). Если вы не указали временной зоны, принимается местная временная зона. GMT и UTC считаются эквивалентными.
    Так как функция parse является статическим методом Date, вы всегда используете ее как Date.parse(), а не как метод созданного вами объекта date.

    Функция parseFloat является встроенным объектом


    Функция parseFloat является встроенным объектом JavaScript. Она не является методом, связанным с любым объектом, но является частью самого языка.
    Функция parseFloat анализирует строку-аргумент и возвращает число с плавающей точкой. Если встреченный им символ отличается от знака (+ или -), цифры (0-9), десятичной точки или экспоненты, то он возвращает значение до этой точки, игнорируя этот символ и все последующие символы.
    Если первый символ не может быть конвертирован в число, parseFloat возвращает одно из следующих значений:

    • "пусто" на Windows платформах.
    • "NaN" на любых других платформах указывает на то, что значение не является числом.


    Функция parseFloat является встроенным объектом


    Функция parseFloat является встроенным объектом JavaScript. Она не является методом, связанным с любым объектом, но является частью самого языка.
    Функция parseFloat анализирует его первый аргумент-строку и пытается возвратить целое число, определенное как основание. Например, основание 10 означает перевод в десятичное число, 8 - восьмеричное, 16 - шестнадцатиричное, и т.д.
    Если parseInt в указанном основании встречает символ, не являющийся числом, то он пропускает его и все следующие символы и возвращает целочисленное значение разобранное до точки. ParseInt усекает числа до целочисленных значений.
    Если основание не определено или определено как 0, JavaScript принимает следующее:

    • если ввод string начинается с "0x", то основание равно 16 (шестнадцатиричное).
    • если ввод string начинается с "0", то основание равно 8 (восьмиричное).
    • если ввод string начинается с любого другого значения, то основание равно 10 (десятичное).
    • если первый символ не может быть конвертирован в число, parseFloat возвращает одно из следующих значений:

    • "пусто" на Windows платформах.
    • "NaN" на любых других платформах указывает на то, что значение не является числом.


    Для арифметических целей значение "NaN" не явяляется числом в любом случае. Вы можете вызвать функцию isNaN для того, чтобы определить является ли результат parseInt "NaN". Если "NaN" применить в арифметических операциях, то их результатами также будут "NaN".

    Метод prompt используется для отображения


    Метод prompt используется для отображения диалогового окна, требующего ввода текста пользователем. Если вы не определяете первоначальное значение для inputDefault, то диалоговое окно отображает значение .
    Хотя prompt является методом объекта window, вам не нужно определять windowReference, при его вызове. Например, windowReference.prompt() является не обязательным.

    Метод setTime используется для добавления


    Метод setTime используется для добавления даты и времени другому объекту.

    Метод setTimeout выполняет выражение после


    Метод setTimeout выполняет выражение после установленного количества времени. Он не выполняет выражение многократно. Например, если метод setTimeout установлен на 5 секунд, то выражение выполнится через 5 секунд, но не каждые 5 секунд.

    Метод sin возвращает числовое значение


    Метод sin возвращает числовое значение между -1 и 1, представляющее собой синус угла.

    Метод atan возвращает числовое выражение


    Метод atan возвращает числовое выражение между -Пи/2 и Пи/2.

    в документе метод small используется


    Для форматирования и отображения строки в документе метод small используется с методами write или writeln.

    Если значение number находится за


    Если значение number находится за пределами данного диапазона, возвращенное значение всегда будет 0.

    в документе метод strike используется


    Для форматирования и отображения строки в документе метод strike используется с методами write или writeln.

    в документе метод sub используется


    Для форматирования и отображения строки в документе метод sub используется с методами write или writeln.

    Метод submit передает указанную форму.


    Метод submit передает указанную форму. Он выполняет такое же действие как кнопка submit.
    Метод submit используется для передачи данных http-серверу. Метод submit возвращает данные, используя методы "get" или "post", определенные в свойстве method.

    в строке индексируются слева направо.


    Символы в строке индексируются слева направо. Индекс первого символа равен 0, индекс последнего - stringName.length-1.
    Если indexA меньше чем indexB, то метод substring возвращает подстроку, начиная с символа indexA и заканчивая символом перед indexB. Если indexA больше чем indexB, то метод substring возвращает подстроку, начиная с символа indexB и заканчивая символом перед indexA. Если indexA равен indexB, то метод substring возвращает пустую строку.

    в документе метод sup используется


    Для форматирования и отображения строки в документе метод sup используется с методами write или writeln.

    Метод tan возвращает числовое значение,


    Метод tan возвращает числовое значение, представляющее собой тангенс угла.

    Точный формат значения возвращаемого toGMTString


    Точный формат значения возвращаемого toGMTString зависит от платформы.

    Если вы для перевода даты


    Если вы для перевода даты используете toLocaleString, помните, что различные locales собирают строку в различных путях. Используйте методы getHours, getMinutes, getSeconds для получения более переносимых результатов.

    Этот метод выполняет действие равносильное


    Этот метод выполняет действие равносильное выбору пользователем кнопки Back в окне Navigator'а. Метод back также равносилен history.go(-1).

    Метод toLowerCase возвращает значение stringName,


    Метод toLowerCase возвращает значение stringName, переведенное в нижний регистр. toLowerCase не изменяет значения stringName.

    Метод toUpperCase возвращает значение stringName,


    Метод toUpperCase возвращает значение stringName, переведенное в верхний регистр. toUpperCase не изменяет значения stringName.

    Функция unescape не является методом,


    Функция unescape не является методом, связанным с каким-либо объектом, но является частью самого языка. Строка, возвращаемая функцией unescape, является рядом символов в ISO Latin-1 кодировке.

    UTC берет параметры даты, разделенные


    UTC берет параметры даты, разделенные запятой, и возвращает количество миллисекунд, начиная с 1 января 1970 00:00:00, GMT.
    Так как UTC является статическим методом Date, используйте его как Date.UTC(), а не как метод созданного вами объекта date.

    Метод write отображает любое количество


    Метод write отображает любое количество выражений в окне документа. Вы можете определить любое JavaScript выражение методом write, включая числовое, строковое или логическое.
    Метод write является таким же как метод writeln, но метод write не добавляет символа перевода на новую строку в конец выходной информации.
    Метод write используется внутри тага





    Comments:

    Copyright ©


    с предлагаемыми дополнениями образуют целостную


    Спецификации JavaBeans в совокупности с предлагаемыми дополнениями образуют целостную архитектуру компонентной объектной среды, позволяющей накапливать и многократно использовать программистские знания. Уникальным достоинством JavaBeans является Java-фундамент, предоставляющий современный объектный язык, гарантирующий мобильность и информационную безопасность разрабатываемого программного обеспечения.
    Компоненты среды JavaBeans оказываются мобильными вдвойне. Мост к ActiveX автоматически "вкладывает" их в эту среду, а средства Java IDL помогают организовать взаимодействие с CORBA-брокерами объектных запросов.
    Разработка спецификаций JavaBeans следовала и следует традициям открытости, заложенным на предыдущих этапах развития Java-технологии. Партнерами JavaSoft в этой работе выступали такие известные компании, как Apple Computer, Borland International, IBM, Informix Software, Lotus Development, Netscape Communications, Novell, Oracle, Silicon Graphics, Sybase, Texas Instruments и многие другие. Спецификации доступны для свободного ознакомления, внесения замечаний и предложений.
    Политика партнерства способствовала созданию многочисленных инструментальных окружений, поддерживающих процессы разработки и интеграции компонентов JavaBeans. Назовем Data Director for Java (Informix Software), Visual Age for Java (IBM), BeanMachine (Lotus Development), Cosmo Code (Silicon Graphics). На подходе JBuilder (Borland International), Visual JavaScript (Netscape Communications), Java Studio и Java Workshop (SunSoft), PowerJ (Sybase) и др.
    Разработчики, делающие ставку на JavaBeans, не рискуют проиграть. Эта компонентная объектная среда вступает в пору зрелости, обладая всеми качествами, необходимыми для успешного продвижения.

    

        Бизнес: Предпринимательство - Малый бизнес - Управление