Изучаем Java EE 7 - [168]
>
>
>··············xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"
>··············xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
>··············http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
>··············version="2.2">
>··
>····
>······
>····
>····
>······
>······msg
>····
>··
>··
>····
>····
>······
>······
>····
>··
>
Создание компонентов-подложек
Как отмечалось ранее в этой главе, шаблон MVC поощряет разделение между моделью, представлением и контроллером: JSF-страницы являются представлением, а FacesServlet — контроллером. Компоненты-подложки — это шлюз к модели.
Компоненты-подложки — это аннотированные классы Java, они занимают центральное место в веб-приложениях. Они могут выполнять бизнес-логику (или делегировать ее выполнение компонентам EJB), обрабатывать навигацию между страницами и хранить данные. Типичное JSF-приложение включает в себя один или несколько компонентов-подложек, которые могут быть разделены между несколькими страницами. Эти данные хранятся в атрибутах компонентов-подложек, и действия, выполняемые на странице, вызывают метод компонента. Для связывания компонентов с компонентами-подложками следует использовать язык выражений (например, #{bookController.book.title}).
Я предпочитаю использовать термин «компонент-подложка», а не «управляемый компонент», но исторически они имеют одинаковое значение в JSF. «Управляемый компонент» относится к более общей модели компонентов в Java EE, которую я представил в главе 2 вместе с CDI. В Java EE любой POJO (Plain Old Java Object — «простой Java-объект в старом стиле»), управляемый контейнером или провайдером, называется управляемым компонентом. Поэтому компонент-подложка на самом деле является управляемым компонентом, но для JSF.
Создать компонент-подложку так же просто, как сущность EJB или JPA: это всего лишь класс Java с CDI-аннотацией @Named (листинг 11.3) и областью действия CDI (в данном случае это @RequestScoped). Они не используют записи файла faces-config.xml, вспомогательные классы и не наследуют от других классов. JSF 2.2 также задействует механизм конфигурации с помощью исключения, поэтому, указав только две аннотации, вы можете использовать значения по умолчанию и развертывать веб-приложение, имеющее компонент-подложку.
>@Named
>@RequestScoped
>public class BookController {
>··private Book book = new Book();
>··public String doCreateBook() {
>····createBook(book);
>····return "newBook.xhtml";
>··}
>··// Конструкторы и методы работы со свойствами
>}
В листинге 11.3 показана программная модель компонентов-подложек: он обладает состоянием (атрибут book) в течение конкретного периода времени (область действия), определяет методы действий (doCreateBook()) и обрабатывает навигацию (возвращает страницу newBook.xhtml).
С помощью языка выражений компонент может связать его значения со свойствами (например,
Структура компонентов-подложек
Компоненты-подложки — это классы Java, которые управляются FacesServlet. Компоненты пользовательского интерфейса связаны со свойствами компонентов-подложек и могут вызывать методы действий. Компоненты-подложки должны следовать следующим требованиям.
• Класс должен иметь аннотацию @javax.inject.Named или XML-эквивалент в дескрипторе развертывания faces-config.xml.
• Класс должен иметь область действия (например, @RequestScoped).
• Класс должен быть определен как общедоступный, но не окончательный или абстрактный.
• Класс должен иметь общедоступный конструктор без аргументов, который будет использован контейнером для создания экземпляров этого класса.
• Класс не должен определять метод finalize().
• Атрибуты должны включать общедоступные методы работы со свойствами для того, чтобы быть связанными с компонентом.
Следуя модели легкого использования Java EE 7, компоненты-подложки могут быть просто аннотированными POJO, устраняя необходимость конфигурации. Как вы помните, в главе 2 я представил стереотипы CDI. @javax.enterprise.inject.Model — идеальный стереотип для использования в компонентах-подложках, поскольку он имеет аннотации @Named и @RequestScoped (как показано в листинге 11.4). Таким образом, вы можете переписать BookController, продемонстрированный в листинге 11.3, заменив аннотации на @Model (листинг 11.5), и получить такое же поведение.
>@Named
>@RequestScoped
>@Documented
>@Stereotype
>@Target({ TYPE, METHOD, FIELD })
>@Retention(RUNTIME)
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.