Изучаем Java EE 7 - [163]

Шрифт
Интервал

>

>

>

>


Примечание

По умолчанию ресурсы хранятся в каталоге resource. Начиная с версии JSF 2.2, вы можете изменить это значение по умолчанию, установив значение переменной javax.faces.WEBAPP_RESOURCES_DIRECTORY в дескрипторе развертывания web.xml. Если этот параметр установлен, то среда выполнения JSF интерпретирует его значение как путь относительно корня веб-приложения, по которому и следует искать ресурсы.

Неявные объекты

Чтобы получить доступ к ресурсу, можно использовать неявный объект, который называется resources (например, #{resources['book.gif']}). Этот объект не должен быть объявлен, он доступен на всех страницах JSF. Такие объекты называются неявными объектами (или неявными переменными). Неявные объекты — это специальные идентификаторы, которые сопоставляются с конкретными часто используемыми объектами. Они неявные, поскольку страница имеет к ним доступ и может использовать их без необходимости их явного объявления или инициализации. Неявные объекты используются в выражениях EL. В табл. 10.18 перечислены все неявные объекты, к которым может иметь доступ страница.


Таблица 10.18. Неявные объекты
Неявный объектОписаниеВозвращаемый тип
applicationПредставляет среду веб-приложения. Используется для получения конфигурационных параметров приложенияObject
applicationScopeПреобразует имена глобальных атрибутов приложения в их значенияMap
componentУказывает на текущий компонентUIComponent
ccУказывает на текущий составной компонентUIComponent
cookieОпределяет объект типа Map, содержащий имена cookies (являющиеся ключами) и объекты типа CookieMap
facesContextУказывает на объект типа FacesContext для текущего запросаFacesContext
flashПредставляет объект, использующий флеш (подробнее об областях видимости читайте в главе 11)Object
headerПреобразует имя HTTP-заголовка в значение заголовка типа StringMap
headerValuesПреобразует имя HTTP-заголовка в набор всех значений заголовка типа String[]Map
initParamПреобразует имена параметров инициализации контекста к значениям типа StringMap
paramПреобразует имена параметров запроса к одному значению параметра типа StringMap
paramValuesПреобразует имена параметров запроса к набору всех значений параметра типа String[]Map
requestПредставляет объект запроса HTTPObject
requestScopeПреобразует имена атрибутов запроса к их значениямMap
resourceПредставляет объект ресурсаObject
sessionПредставляет объект сеанса НТТРObject
sessionScopeПреобразует имена атрибутов сеанса к их значениямMap
viewПредставляет текущее представлениеUIViewRoot
viewScopeПреобразует имена атрибутов представления к их значениямMap

Все эти неявные объекты — реальные объекты с интерфейсами, и, как только вы узнаете их API (смотрите технические характеристики или документацию), вы сможете получить доступ к их атрибутам с помощью EL. Например, строка #{}view.locale позволит получить локаль текущего представления (en_US, pt_PT и т. д.). Если вы храните объект book в области действия сеанса, вы можете получить доступ к нему так: #{sessionScope.book}. Вы даже можете использовать более богатый алгоритм для отображения всех HTTP-заголовков и их значений, что показано в листинге 10.13.


Листинг 10.13. Страницы, где с использованием неявных объектов отображаются локаль и HTTP-заголовки

>

>······xmlns: h="http://xmlns.jcp.org/jsf/html"

>······xmlns: c="http://xmlns.jcp.org/jsp/jstl/core">

>

>··

Неявные объекты

>··



>··

Локаль

>··


>··

headerValues

>··

>···· =

>····

>······

>····

>··


>··


>··

>

>

Если выполнить код листинга 10.13, вы получите страницу, показанную на рис. 10.7.


Рис. 10.7. Страница JSF, отображающая значения неявных объектов

Составные компоненты

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

Ранее я упоминал, что все названные выше компоненты явно или неявно наследуют от класса javax.faces.component.UIComponent. До появления версии JSF 2.0, если вы хотели создать свой собственный компонент, вы должны были унаследовать класс компонента, который наиболее близок к вашему (UICommand, UIGraphic, UIOutput и др.), объявить его в файле faces-config.xml, а также обеспечить обработчик тегов и отрисовщик. Эти шаги были сложными, и другие веб-фреймворки, такие как Facelets, показали, что можно гораздо проще создать мощные компоненты. Здесь следует рассмотреть составные компоненты: они дают разработчикам возможность писать настоящие, многоразовые составляющие пользовательского интерфейса JSF без кода Java или конфигурации XML.


Рекомендуем почитать
Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.


Обработка событий в С++

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


Обработка баз данных на Visual Basic.NET

Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000.


MFC и OpenGL

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


Симуляция частичной специализации

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.