Изучаем Java EE 7 - [163]
>
>
>
>
По умолчанию ресурсы хранятся в каталоге resource. Начиная с версии JSF 2.2, вы можете изменить это значение по умолчанию, установив значение переменной javax.faces.WEBAPP_RESOURCES_DIRECTORY в дескрипторе развертывания web.xml. Если этот параметр установлен, то среда выполнения JSF интерпретирует его значение как путь относительно корня веб-приложения, по которому и следует искать ресурсы.
Неявные объекты
Чтобы получить доступ к ресурсу, можно использовать неявный объект, который называется resources (например, #{resources['book.gif']}). Этот объект не должен быть объявлен, он доступен на всех страницах JSF. Такие объекты называются неявными объектами (или неявными переменными). Неявные объекты — это специальные идентификаторы, которые сопоставляются с конкретными часто используемыми объектами. Они неявные, поскольку страница имеет к ним доступ и может использовать их без необходимости их явного объявления или инициализации. Неявные объекты используются в выражениях EL. В табл. 10.18 перечислены все неявные объекты, к которым может иметь доступ страница.
Неявный объект | Описание | Возвращаемый тип |
---|---|---|
application | Представляет среду веб-приложения. Используется для получения конфигурационных параметров приложения | Object |
applicationScope | Преобразует имена глобальных атрибутов приложения в их значения | Map |
component | Указывает на текущий компонент | UIComponent |
cc | Указывает на текущий составной компонент | UIComponent |
cookie | Определяет объект типа Map, содержащий имена cookies (являющиеся ключами) и объекты типа Cookie | Map |
facesContext | Указывает на объект типа FacesContext для текущего запроса | FacesContext |
flash | Представляет объект, использующий флеш (подробнее об областях видимости читайте в главе 11) | Object |
header | Преобразует имя HTTP-заголовка в значение заголовка типа String | Map |
headerValues | Преобразует имя HTTP-заголовка в набор всех значений заголовка типа String[] | Map |
initParam | Преобразует имена параметров инициализации контекста к значениям типа String | Map |
param | Преобразует имена параметров запроса к одному значению параметра типа String | Map |
paramValues | Преобразует имена параметров запроса к набору всех значений параметра типа String[] | Map |
request | Представляет объект запроса HTTP | Object |
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.
>
>······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.

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

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

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

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

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

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