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

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

>public @interface Model {

>}


Листинг 11.5. Класс BookController, использующий стереотип @Model

>@Model

>public class BookController {

>··private Book book = new Book();


>··public String doCreateBook() {

>····createBook(book);

>····return "listBooks.xhtml";

>··}

>··// Конструкторы, методы работы со свойствами

>}

Наличие у класса аннотации @javax.inject.Named позволяет языку выражений использовать эту страницу. С помощью аннотации @Named также можно указать другое имя для компонента-подложки (которое по умолчанию является именем класса и начинается со строчной буквы). Компоненты пользовательского интерфейса связаны со свойствами компонента-подложки, изменение имени по умолчанию влияет на способ вызова свойства или метода. В коде, представленном в листинге 11.6, компонент-подложка переименовывается в MyBean.


Листинг 11.6. Переименование компонента-подложки

>@Named("myBean")

>@RequestScoped

>public class BookController06 {

>···private Book book = new Book();

>···public String doCreateBook() {

>·····createBook(book);

>·····return "listBooks.xhtml";

>···}

>···// Конструкторы, методы работы со свойствами

>}

Чтобы вызвать атрибуты или методы этого компонента-подложки на ваших страницах, вам следует использовать переопределенное имя таким образом:

>

>

>··Создать новую

>·····книгу

>


Примечание

До появления версии JSF 2.2 вы должны были аннотировать компонент-подложку с помощью аннотации @javax.faces.bean.ManagedBean. Это вводит в заблуждение, потому что данная аннотация имеет имя Managed Bean (Управляемый компонент), определяющее более общую компонентную модель Java EE, которая является частью JSR-25 °Common Annotations (@javax.annotation.ManagedBean). Но что более важно, в версии JSF 2.2 была улучшена интеграция с CDI и теперь рекомендуется использовать аннотацию CDI @Named, а также области действия CDI. Пакет javax.faces.bean будет объявлен устаревшим в следующей версии JSF.

Области действия

Объекты, которые создаются как часть компонента-подложки, имеют определенный срок службы и могут или не могут быть доступными для компонентов пользовательского интерфейса или объектов в веб-приложении. Срок службы и доступность объекта известны как область действия. В веб-приложении (в компонентах-подложках и страницах) вы можете указать область действия объекта, используя разную продолжительность.

• Приложение — это наименее ограничительный вариант (используйте аннотацию @ApplicationScoped для вашего компонента-подложки) с самой большой продолжительностью жизни. Созданные объекты доступны во всех циклах запросов/ответов для всех клиентов, использующих веб-приложение, до тех пор, пока приложение активно. Эти объекты можно вызывать одновременно из нескольких источников, они должны быть потокобезопасными (устанавливается с помощью ключевого слова syncronized). Объекты с такой областью действия могут использовать другие объекты либо без области действия, либо с такой же областью действия.

• Сессия — объекты доступны для любых циклов запросов/ответов, которые принадлежат сессии клиента (@SessionScoped). Эти объекты имеют состояние, которое сохраняется между запросами и хранится до тех пор, пока сессия не будет завершена. Объекты с такой областью действия могут использовать и другие объекты либо без области действия, либо с такой же областью действия, либо с областью действия на уровне приложения.

• Представление — объекты доступны в пределах заданного представления, пока оно не изменится, и их состояние сохраняется до тех пор, пока пользователь не перейдет к новому представлению (в этот момент состояние стирается). Объекты с такой областью действия могут использовать и другие объекты либо без области действия, либо с такой же областью действия, либо с областью действия на уровне приложения или сеанса. Компоненты-подложки могут быть аннотированы с помощью @ViewScoped.

• Запрос — состояние доступно в начале запроса и до тех пор, пока клиенту не был отправлен ответ (аннотация @RequestScoped). Клиент может выполнять несколько запросов, но остаться на одном и том же представлении. Именно поэтому продолжительность @ViewScoped больше, чем @RequestScoped. Объекты с такой областью действия могут использовать и другие объекты либо без области действия, либо с такой же областью действия, либо с областью действия на уровне приложения или сеанса.

• Момент — эта область действия была введена в версии JSF 2.0 и представляет собой короткую коммуникацию. Это способ передачи временных объектов, которые распространяются на одном представлении и очищаются перед переходом к другому. Такая область действия может быть использована только программно, поскольку аннотации для нее не существует.

• Поток — объекты в этой области действия создаются, когда пользователь входит в указанный поток, и освобождаются, когда он выходит из потока (с помощью аннотации @FlowScoped).


Примечание

Все аннотации областей видимости, используемые в JSF 2.2, теперь являются областями действия CDI (то есть все они аннотированы @javax.enterprise.context.NormalScope). Но они находятся в разных спецификациях: @ApplicationScoped, @RequestScoped и @SessionScoped являются частью CDI, а @ViewScoped и @FlowScoped определяются в спецификации JSF.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


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

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


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

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


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

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