Изучаем 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.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.