| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <!-- |
| Copyright (c) 2009, 2010, 2011, Oracle and/or its affiliates. All rights reserved. |
| --> |
| |
| <html> |
| <head> |
| <title>Начало работы с приложениями Java EE</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > |
| <meta name="description" content="A tutorial that introduces NetBeans IDE support for some of the new features in Java EE 6."> |
| <link rel="stylesheet" href="../../../netbeans.css"> |
| <meta name="author" content="ken ganfield"> |
| </head> |
| <body> |
| <h1>Начало работы с приложениями Java EE</h1> |
| |
| <p>В этом документе содержится краткое описание некоторых возможностей, добавленных в спецификацию Java Enterprise Edition 6 (Java EE 6). В качестве иллюстрации новых возможностей в этом учебном курсе используется пример создания простого веб-приложения Java EE, содержащего фасад компонента сеанса без сохранения состояния EJB 3.1 для класса сущностей. Для создания класса сущностей и сеансного компонента в среде IDE используются мастеры. В созданном мастером коде используются запросы, определенные в интерфейсе Criteria API, который является частью JPA 2.x и входит в состав спецификации Java EE 6. Затем создается управляемый компонент с именем, имеющий доступ к фасаду сеанса и уровню представления, на котором используется инфраструктура вида Facelets, как указано в спецификации JSF 2.x.</p> |
| |
| <p>Этот учебный курс основан на публикации в блоге <a href="http://www.adam-bien.com/roller/abien/entry/simplest_possible_jsf_2_ejb" target="_blank" title="http://www.adam-bien.com/roller/abien/entry/simplest_possible_jsf_2_ejb"> Простейший из возможных компонентов JSF 2 / EJB 3.1 / JPA - с развертыванием WAR</a> (автор Адам Бьен (Adam Bien)). Дополнительные примеры по Java EE examples доступна в проекте Адама Бьена по Kenai <a href="http://kenai.com/projects/javaee-patterns" target="_blank" title="http://kenai.com/projects/javaee-patterns"> Шаблоны и испытанные приемы Java EE</a> и в его книге "Шаблоны Java EE в реальном мире - обдумывая заново проверенные приемы", которая доступна на <a href="http://press.adam-bien.com" target="_blank" title="http://press.adam-bien.com">http://press.adam-bien.com</a>.</p> |
| |
| |
| <p><b>Упражнения по темам руководства</b></p> |
| <img alt="Содержимое на этой странице применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0"> |
| <ul> |
| <li><a href="#Exercise_1">Создание проекта веб-приложения</a></li> |
| <li><a href="#Exercise_2">Создание класса сущностей и фасада сеанса</a> |
| <ul> |
| <li><a href="#Exercise_2a">Создание класса сущностей</a></li> |
| <li><a href="#Exercise_2b">Создание фасада сеанса</a></li> |
| </ul> |
| </li> |
| <li><a href="#Exercise_3">Создание управляемого компонента JSF и страниц JSF</a> |
| <ul> |
| <li><a href="#Exercise_3a">Создание управляемого компонента</a></li> |
| <li><a href="#Exercise_3b">Изменение страницы-указателя</a></li> |
| <li><a href="#Exercise_3c">Создание страницы результатов</a></li> |
| </ul> |
| |
| </li> |
| <li><a href="#Exercise_4">Выполнение проекта</a></li> |
| <li><a href="#Exercise_5">Загрузка проекта решения</a></li> |
| </ul> |
| <p><b>Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.</b></p> |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">Программное обеспечение или материал</th> |
| <th class="tblheader" scope="col">Требуемая версия</th> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">IDE NetBeans</a></td> |
| <td class="tbltd1">Версия 7.2, 7.3, 7.4, 8.0, Java EE</td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Комплект для разработчика на языке Java (JDK)</a></td> |
| <td class="tbltd1">версия 7 или 8</td> |
| </tr> |
| <tr> |
| <td class="tbltd1">GlassFish Server Open Source Edition 3.1.2.2</td> |
| <td class="tbltd1">3.x, 4.x</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <p><b>Предпосылки</b></p> |
| <p>Предполагается, что читатель обладает базовыми знаниями по следующим технологиям или опытом программирования с их использованием:</p> |
| <ul> |
| <li>Программирование на Java</li> |
| <li>IDE NetBeans</li> |
| </ul> |
| <p class="tips">Можно загрузить <a href="https://netbeans.org/projects/samples/downloads/download/Samples/JavaEE/SimpleEE6App72.zip">готовый проект в виде архива ZIP</a>.</p> |
| |
| <!-- ===================================================================================== --> |
| |
| |
| <a name="Exercise_1"></a> |
| <!--Exercise 1: --> |
| <h2>Создание проекта веб-приложения</h2> |
| <p>В этом упражнении создается простое веб-приложение. При создании веб-приложения укажите в качестве целевого контейнера Java EE сервер GlassFish. Сервер GlassFish совместим с Java EE и включает в себя библиотеки JSF 2.x, необходимые для этого приложения.</p> |
| |
| <p>В мастере создания проектов в качестве версии Java EE можно выбрать Java EE 6 Web или Java EE 7 Web. Java EE 6 Web и Java EE 7 Web являются упрощенными профилями Java EE 6, которые содержат подмножество полной платформы Java EE. Профили Java EE Web разработаны для веб-приложений, не требующих расширенных технологий Java EE, таких как поддержка удаленных интерфейсов, полная спецификация EJB 3.1 и API-интерфейс службы передачи сообщений Java (JMS).</p> |
| |
| <p>Веб-профили поддерживают обработку транзакций и управление сохранением состояния, которые часто используются в корпоративных веб-приложениях. Профили Java EE Web можно использовать для веб-приложений, в которых применяются компоненты сеансов с локальным интерфейсом или без интерфейса. При использовании в приложении удаленного интерфейса необходим полный профиль Java EE.</p> |
| |
| |
| <ol> |
| <li>Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N; ⌘-Shift-N в Mac) в главном меню.</li> |
| <li>Выберите "Веб-приложение" из категории "Java Web" и нажмите кнопку "Далее".</li> |
| <li>Введите <strong>SimpleEE6App</strong> в качестве имени проекта и укажите местоположение проекта. </li> |
| <li>Снимите флажок "Использовать отдельную папку", если он установлен. Нажмите кнопку "Далее".<br /> (В рамках этого руководства копирование библиотек проекта в отдельную папку нецелесообразно, поскольку совместное использование библиотек с другими пользователями или проектами не требуется.)<br /> |
| </li> |
| <li>Выберите сервер GlassFish и укажите Java EE 6 или Java EE 7 в качестве версии Java EE. Нажмите кнопку "Далее".<br /> <img alt="Мастер создания проектов" class="margin-around b-all" src="../../../images_www/articles/74/javaee/gettingstarted/newappwizard.png" title="Панель 'Сервер и настройки' в мастере создания проектов"> |
| |
| |
| </li> |
| <li>Выберите в панели "Платформы" JavaServer Faces. Нажмите кнопку "Завершить". |
| <p>По умолчанию при разработке веб-приложения Java EE, развертываемого на сервере GlassFish, в среде IDE будет выбрана библиотека JSF 2.x. Версия используемой по умолчанию библиотеки JSF зависит от версии, поставляемой в комплекте с сервером GlassFish. Библиотека JSF 2.x позволяет использовать Facelets в качестве языка страниц и обеспечивает поддержку JSF 1.2 и JSP.</p> |
| <img alt="Мастер создания проектов" class="margin-around b-all" src="../../../images_www/articles/74/javaee/gettingstarted/newappwizard2.png" title="Панель 'Платформы' мастера создания проектов"></li> |
| </ol> |
| |
| <p>При нажатии кнопки "Завершить" проект будет создан в среде IDE, который откроется в окне "Проекты". В среде IDE автоматически создается и открывается в редакторе страница <tt>index.xhtml</tt>.</p> |
| |
| |
| |
| <a name="Exercise_2"></a> |
| <h2>Создание класса сущностей и фасада сеанса</h2> |
| |
| <p>В этом разделе будет создан класс сущностей и фасад сеанса для класса сущностей. Класс сущностей – это простой старый объект Java (Plain Old Java Object, POJO), простой класс Java, идентифицированный аннотацией <tt>@Entity</tt> как сущность. Начиная со спецификации Java EE 5 классы сущностей можно использовать в качестве объектов с сохраняемым состоянием для представления таблиц в базе данных. Интерфейс Java Persistence API позволяет использовать сохранение состояния в веб-приложениях без необходимости создания модуля EJB. |
| </p> |
| |
| <p>Фасад сеанса для класса сущностей в этом приложении является сеансным компонентом без сохранения состояния. Архитектура Enterprise JavaBean (EJB) 3.1, представленная как часть спецификации Java EE 6, позволяет создавать компоненты сеансов без бизнес-интерфейсов, которые требовались в EJB 3.0. Спецификация Java EE 6 также допускает упаковку компонентов EJB напрямую в архив WAR. Благодаря этому упрощается разработка небольших приложений за счет исключения необходимости создания отдельных модулей EJB, которые запаковываются как архив JAR в архив EAR. Однако для больших приложений J2EE, которые распределяются на разных машинах, остается необходимость в создании архивов EAR для отделения бизнес-логики от уровня представления.</p> |
| |
| <p class="tips">Подробные сведения об использовании EJB 3.1 в среде IDE приведены в учебном курсе <a href="javaee-entapp-ejb.html">Создание приложения J2EE с помощью EJB 3.1</a>.</p> |
| |
| <p class="tips">Дополнительные сведения о классах сущностей см. в главе <a href="http://docs.oracle.com/javaee/7/tutorial/doc/persistence-intro.htm">Введение в API-интерфейс сохранения состояния Java</a> в <a href="http://download.oracle.com/javaee/7/tutorial/doc/">Учебном курсе по Java EE 7</a>.</p> |
| |
| <p class="tips">Дополнительные сведения о компонентах сеансов см. в главе <a href="http://docs.oracle.com/javaee/7/tutorial/doc/ejb-intro002.htm">Что такое компонент сеанса?</a> в <a href="http://download.oracle.com/javaee/7/tutorial/doc/">Руководстве по Java EE 7</a>.</p> |
| |
| |
| <div class="indent"> |
| <a name="Exercise_2a"></a> |
| <h3>Создание класса сущности</h3> |
| <p>В этом упражнении с помощью мастера создания класса сущностей будет создан простой класс сущностей с сохраняемым состоянием. Также будет описан мастер создания блока сохранения состояния, которая определяет источник данных и диспетчер сущностей, используемые в приложении. Будет добавлено одно поле в класс для представления данных в таблице и созданы методы получения и установки для нового поля.</p> |
| |
| <p>Класс сущностей должен иметь первичный ключ. При создании класса сущностей с помощью мастера в среде IDE по умолчанию создается поле <tt>id</tt> и создается аннотация <tt>@Id</tt> для объявления этого поля в качестве первичного ключа. Также в среде IDE добавляется аннотация <tt>@GeneratedValue</tt> и указывается стратегия создания ключей для первичного поля id.</p> |
| |
| <p>Использование в проекте интерфейса Java Persistence значительно упрощает разработку приложения в силу отсутствия необходимости настройки дескрипторов развертывания для определения информации относительно объектно-реляционного сопоставления для сохраняющих состояние полей или свойств. Вместо этого можно использовать аннотации для определения этих свойства непосредственно в простом классе Java.</p> |
| |
| <p>Сохранением состояния объекта управляет интерфейс API EntityManager. Интерфейс API EntityManager обрабатывает контекст сохранения состояния, а каждый контекст сохранения состояния представляет собой группу экземпляров объекта. При разработке приложения для обозначения экземпляра контекста с сохранением состояния для классов сущностей к классу можно добавить аннотации. В дальнейшем жизненный цикл экземпляров объекта управляется контейнером.</p> |
| |
| <p>Для создания класса сущностей выполните следующие действия.</p> |
| <ol> |
| <li>Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие".</li> |
| <li>Выберите "Класс сущностей" в категории "Сохранение состояния". Нажмите кнопку "Далее".</li> |
| <li>В поле "Имя класса" введите <strong>Message</strong>.</li> |
| <li>В поле "Пакет" введите <strong>entities</strong>.</li> |
| <li>Выберите команду "Создать блок сохранения состояния". Нажмите кнопку "Далее".</li> |
| <li>Выберите источник данных (например, выберите <tt>jdbc/sample</tt>, если необходимо использовать JavaDB). |
| <p>Источник данных для <tt>jdbc/sample</tt> находится в составе пакета среды IDE при установке среды IDE и сервера приложений GlassFish. Однако можно указать другой источник данных, если это необходимо.</p> |
| <p>Можно сохранить другие параметры по умолчанию (имя блока сохранения состояния, поставщик сохранения состояния EclipseLink). Убедитесь в том, что для блока сохранения состояния используется интерфейс API транзакций Java и что для стратегии создания таблиц установлено значение "Создать", т. е. таблицы на основе классов сущностей создаются при развертывании приложения. |
| </p></li> |
| |
| <li>В мастере создания блока сохранения состояния нажмите кнопку "Завершить". |
| <p>При нажатии кнопки "Завершить" в среде IDE будет создан класс сущностей, который откроется в редакторе. Как видно из примера, в среде IDE было создано поле id <tt>private Long id;</tt>, и для поля созданы аннотации <tt>@Id</tt> и <tt>@GeneratedValue(strategy = GenerationType.AUTO)</tt>.</p></li> |
| <li>В редакторе добавьте поле <tt>message</tt> (выделено полужирным шрифтом) под полем <tt>id</tt>. |
| <pre class="examplecode"> |
| private Long id; |
| <strong>private String message;</strong></pre> |
| </li> |
| <li>Щелкните правой кнопкой мыши в редакторе и выберите команду "Вставить код" (Alt-Insert; Ctrl-I для Mac), а затем "Получение и установка".</li> |
| <li>В диалоговом окне "Создание методов получения и установки" выберите поле <tt>message</tt> и нажмите кнопку "Создать". |
| <p>В среде IDE будут созданы методы получения и установки для поля <tt>message</tt>.</p> |
| <img alt="Мастер создания блоков сохранения состояния" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/getters-dialog.png" title="Мастер создания блоков сохранения состояния"></li> |
| |
| <li>Сохраните изменения.</li> |
| </ol> |
| |
| <p>Класс сущностей представляет собой таблицу в базе данных. При запуске этого приложения автоматически будет создана таблица базы данных для сообщения. Таблица будет состоять из столбцов <tt>id</tt> и <tt>message</tt>.</p> |
| |
| <p>Если проанализировать блок сохранения состояния в редакторе XML, можно увидеть, что в приложении используется интерфейс API транзакций Java (JTA) (<tt>transaction-type="JTA"</tt>). Это указывает на то, что управление жизненным циклом сущностей в контексте сохранения состояния осуществляется контейнером. В результате требуется меньше строк кода, так как жизненный цикл сущностей управляется контейнером, а не приложением. Подробные сведения об использовании JTA для управления транзакциями приведены в документации по <a href="http://www.oracle.com/technetwork/java/javaee/jta/index.html" target="_blank">интерфейсу Java Transaction API</a>.</p> |
| |
| |
| <a name="Exercise_2b"></a> |
| <h3>Создание фасада сеанса</h3> |
| |
| <p>В этом упражнении будет использоваться мастер создания фасада сеанса без сохранения состояния для сущности Message. Согласно спецификации EJB 3.1. теперь бизнес-интерфейсы для сеансных компонентов не являются обязательными. В этом приложении, где клиент, имеющий доступ к компоненту, является локальным клиентом, для отображения компонента существует возможность использования представления с локальным интерфейсом или без интерфейса.</p> |
| |
| <p>Для создания сеансного компонента выполните следующие шаги.</p> |
| <ol> |
| <li>Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие".</li> |
| <li>Выберите "Сеансные компоненты для сущностных классов" из категории Enterprise JavaBeans. Нажмите кнопку "Далее".</li> |
| <li>Выберите сущность <tt>Message</tt> и нажмите кнопку "Добавить". Нажмите кнопку "Далее".</li> |
| <li>В поле "Пакет" введите <strong>boundary</strong>. Нажмите кнопку "Завершить". |
| <p>Обратите внимание на то, что создавать бизнес-интерфейс для сеансного компонента не требуется. Вместо этого в данном приложении компонент будет отображаться для локально управляемого компонента в представлении без интерфейса.</p> |
| <img alt="Компоненты Bean сеанса для мастера классов сущностей" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/sessionwizard.png" title="Компоненты Bean сеанса для мастера классов сущностей"></li> |
| </ol> |
| |
| <p>Когда вы нажмете "Готово", среда IDE создаст фасадный класс сеанса<tt>MessageFacade.java</tt> и <tt>AbstractFacade.java</tt> и откроет файлы в редакторе. Как вы увидите в созданном коде, аннотация <tt>@Stateless</tt> используeтся для объявления <tt>MessageFacade.java</tt> сеансным компонентом без состояния. <tt>MessageFacade.java</tt> является расширением <tt>AbstractFacade.java</tt>, который содержит бизнес-логику и управляет транзакцией.</p> |
| |
| <pre class="examplecode"> |
| @Stateless |
| public class MessageFacade extends AbstractFacade<Message> { |
| @PersistenceContext(unitName = "SimpleEE6AppPU") |
| private EntityManager em; |
| </pre> |
| |
| <p>При создании фасада для сущности с помощью мастера в среде IDE по умолчанию добавляется аннотация <tt>PersistenceContext</tt> (<tt>@PersistenceContext(unitName = "SimpleEE6AppPU")</tt>) для внедрения ресурса диспетчера сущностей в элемент сеансного компонента и для определения имени блока сохранения состояния. В этом примере имя блока сохранения состояния объявлено явно, но имя не является обязательным, если в приложении используется только один блок сохранения состояния.</p> |
| |
| <p>Среда IDE также создает методы в <tt>AbstractFacade.java</tt> для создания, изменения, удаления и нахождения сущностей. В интерфейсе API EntityManager определяются методы взаимодействия с контекстом сохранения состояния. Как видите, среда IDE генерирует некоторые распространенные методы запросов, используемые по умолчанию, которые можно использовать для нахождения объектов сущностей. В методах <tt>findAll</tt>, <tt>findRange</tt> и <tt>count</tt> используются методы, определенные в интерфейсе API Criteria для создания запросов. API-интерфейс Criteria входит в спецификацию JPA 2.x, которая в свою очередь является частью спецификации Java EE 6.</p> |
| |
| </div> |
| |
| |
| |
| <!-- ===================================================================================== --> |
| <a name="Exercise_3"></a> |
| <h2>Создание управляемого компонента JSF и страниц JSF</h2> |
| |
| <p>В этом разделе представлена информация о том, как с помощью JavaServer Faces (JSF) 2.x создать уровень представления для приложения и управляемый базовый компонент, используемый на страницах JSF. Спецификация JSF 2.x делает возможным использование Facelets в качестве предпочтительной технологии представлений для приложений на основе JSF. Начиная с версии JSF 2.x можно использовать аннотацию <tt>@ManagedBean</tt> в исходном коде для объявления класса управляемого компонента. Для объявления управляемых компонентов JSF больше не требуется добавлять записи в файл <tt>faces-config.xml</tt>. Для получения доступа к методам в управляемом компоненте можно использовать имена компонентов на страницах JSF.</p> |
| <p class="tips">Подробные сведения о поддержке спецификации JavaServer Faces 2.x в среде IDE см. в разделе <a href="../web/jsf20-support.html">Поддержка JSF 2.x в IDE NetBeans</a>.</p> |
| <p class="tips">Подробные сведения о спецификации JavaServer Faces 2.x см. в главе <a href="http://docs.oracle.com/javaee/7/tutorial/doc/jsf-intro.htm" target="_blank">Технология JavaServer Faces</a> учебного курса по Java EE 7.</p> |
| |
| <div class="indent"> |
| |
| <a name="Exercise_3a"></a> |
| <h3>Создание управляемого компонента</h3> |
| <p>В этом упражнении будет создан простой управляемый компонент JSF, используемый для получения доступа к фасаду сеанса. Спецификация JSF 2.x позволяет использовать аннотации в классе компонента для определения класса как управляемого компонента JSF, а также указания области и имени компонента.</p> |
| |
| <p>Для создания управляемого компонента выполните следующие шаги.</p> |
| <ol> |
| <li>Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие".</li> |
| <li>Выберите "Управляемый компонент JSF" из категории "JavaServer Faces". Нажмите кнопку "Далее".</li> |
| <li>В поле "Имя класса" введите <strong>MessageView</strong>. |
| <p>Имя управляемого компонента <tt>MessageView</tt> используется в качестве значения для <tt>inputText</tt> и <tt>commandButton</tt> на странице JSF <tt>index.xhtml</tt> при вызове методов в компоненте.</p> |
| </li> |
| <li>В поле "Пакет" введите <strong>my.presentation</strong>.</li> |
| <li>В поле "Имя", используемое для управляемого компонента, введите <strong>MessageView</strong>. |
| <p class="notes"><strong>Примечание.</strong> При создании управляемого компонента с помощью мастера, IDE по умолчанию назначает имя компоненту на основе имени класса компонента, при этом имя будет начинаться с маленькой буквы. В данном руководстве и для демонстрационных целей вы назначаете базовому элементу имя, начинающееся с заглавной буквы. При ссылке на компонент на страницах JSF вы будете использовать<tt>MessageView</tt>вместо <tt>messageView</tt>. Если вы не назначали имени, то на странице JSF будет использоваться по умолчанию<tt>messageView</tt>.</p></li> |
| <li>Установите контекст для запроса. Нажмите кнопку "Завершить".</li> |
| </ol> |
| <img alt="Мастер создания новых управляемых компонентов JSF" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/newjsfbean.png" title="Мастер создания новых управляемых компонентов JSF"> |
| |
| <p>При нажатии кнопки "Готово" в среде IDE создается класс компонента, который затем открывается в редакторе. В окне 'Проекты' отобразятся следующие файлы.</p> |
| <img alt="В окне 'Проекты' отображается структура файла" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/projectswindow.png" title="В окне 'Проекты' отображается структура файла"> |
| |
| <p>В редакторе можно увидеть, что в среде IDE добавлены аннотации <tt>@ManagedBean</tt> и <tt>@RequestScoped</tt> и имя компонента.</p> |
| <pre class="examplecode"> |
| @ManagedBean(name="MessageView") |
| @RequestScoped |
| public class MessageView { |
| |
| /** Creates a new instance of MessageView */ |
| public MessageView() { |
| } |
| |
| } |
| </pre> |
| |
| <p>Теперь добавляем аннотацию <tt>@EJB</tt> для использования учета зависимостей, чтобы получить ссылку на сеансный компонент MessageFacade. Вы также будете вызывать методы <tt>findAll</tt> и <tt>создавать</tt>, отображаемые на фасаде. Автозавершение кода среды IDE помогает при вводе методов.</p> |
| <ol> |
| <li>Щелкните правой кнопкой мыши в редакторе и выберите команду "Вставить код" (Alt-Insert; Ctrl-I для Mac), затем во всплывающем окне выберите "Вызов компонента EJB".</li> |
| <li>В диалоговом окне "Вызов компонента EJB" выберите MessageFacade. Нажмите кнопку "ОК".<br /> <img alt="Диалоговое окно 'Вызвать компонент корпоративного уровня'" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/callbean.png" title="Диалоговое окно 'Вызвать компонент корпоративного уровня'"> |
| <p>При нажатии кнопки "ОК" в среде IDE добавляется следующий код (выделено полужирным шрифтом) для ввода компонента.</p> |
| <pre class="examplecode"> |
| public class MessageView { |
| |
| /** Creates a new instance of MessageView */ |
| public MessageView() { |
| } |
| |
| // Injects the MessageFacade session bean using the @EJB annotation |
| <strong>@EJB |
| private MessageFacade messageFacade;</strong> |
| } |
| </pre> |
| </li> |
| <li>Для создания нового экземпляра добавьте следующий код. |
| <pre class="examplecode">/** Creates a new instance of MessageView */ |
| public MessageView() { |
| this.message = new Message(); |
| }</pre> |
| </li> |
| <li>Добавьте следующий код к классу. |
| <pre class="examplecode"> |
| // Creates a new field |
| private Message message; |
| |
| |
| // Calls getMessage to retrieve the message |
| public Message getMessage() { |
| return message; |
| } |
| |
| // Returns the total number of messages |
| public int getNumberOfMessages(){ |
| return messageFacade.findAll().size(); |
| } |
| |
| // Saves the message and then returns the string "theend" |
| public String postMessage(){ |
| this.messageFacade.create(message); |
| return "theend"; |
| } |
| </pre> |
| </li> |
| <li>Щелкните правой кнопкой мыши в области редактора и выберите команду 'Исправить операторы импорта' (Alt-Shift-I; ⌘-Shift-I в Mac) и сохраните изменения.</li> |
| </ol> |
| <p class="tips">Можно использовать автозавершение кода в редакторе, упрощающее ввод кода. |
| </p> |
| |
| |
| <p>Обратите внимание, что метод <tt>postMessage</tt> возвращает строку "theend". Спецификация JSF 2.x допускает использование правил неявных переходов в приложениях, использующих технологию Facelets. В таком приложении правила переходов не настраиваются в <tt>faces-config.xml</tt>. Вместо этого обработчик переходов пытается найти подходящую страницу в приложении. В этом случае обработчик переходов пытается найти страницу с именем <tt>theend.xhtml</tt> при вызове метода <tt>postMessage</tt>.<p> |
| |
| |
| <a name="Exercise_3b"></a> |
| <h3>Изменение страницы-указателя</h3> |
| |
| <p>В этом упражнении будет выполнено несколько простых изменений страницы <tt>index.xhtml</tt> для добавления компонентов пользовательского интерфейса. Выполняется добавление формы с текстовым полем для ввода и кнопкой.</p> |
| <ol> |
| <li>Откройте в редакторе <tt>index.xhtml</tt>.</li> |
| <li>Измените файл для добавления следующей простой формы между тегами <tt><h:body></tt>. |
| <pre class="examplecode"> |
| <h:body> |
| <strong><f:view> |
| <h:form> |
| <h:outputLabel value="Message:"/><h:inputText value="#{MessageView.message.message}"/> |
| <h:commandButton action="#{MessageView.postMessage}" value="Post Message"/> |
| </h:form> |
| </f:view></strong> |
| </h:body></pre> |
| <p class="tips">Автозавершение кода JSF может помочь при вводе кода. |
| </p> |
| <img alt="Автозавершение кода в редакторе исходного кода" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/jsfcodecompletion1.png" title="Автозавершение кода в редакторе исходного кода"> |
| <p class="notes"><strong>Примечание.</strong> При копировании и вставке кода в файл отображается предупреждение на левом поле рядом со строков, содержащей <tt><f:view></tt>. Вы можете поместить курсор вставки на строку и нажать сочетание клавиш Alt-пробел для открытия подсказки по исправлению ошибки. Отображается подсказка о том, что требуется добавить объявление библиотеки <tt>xmlns:f="http://xmlns.jcp.org/jsf/core"</tt>.</p> |
| </li> |
| <li>Сохраните изменения. |
| </li> |
| </ol> |
| |
| <p>Компоненты <tt>inputText</tt> и <tt>commandButton</tt> вызывают методы в управляемом компоненте JSF с именем <tt>MessageView</tt>. Метод <tt>postMessage</tt> возвращает "theend", а обработчик переходов выполняет поиск страницы с именем <tt>theend.xhtml</tt>.</p> |
| |
| <a name="Exercise_3c"></a> |
| <h3>Создание страницы результатов</h3> |
| |
| <p>В этом упражнении будет создана страница JSF <tt>theend.xhtml</tt>. Эта страница будет отображаться при нажатии пользователем кнопки "Отправить сообщение" в <tt>index.xhtml</tt> и при вызове метода <tt>postMessage</tt> в управляемом компоненте JSF.</p> |
| <ol> |
| <li>Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие".</li> |
| <li>В категории "JavaServer Faces" выберите "Страница JSF". Нажмите кнопку "Далее".</li> |
| <li>В поле "Имя файла" введите <strong>theend</strong>.</li> |
| <li>Убедитесь в том, что флажок "Facelets" установлен. Нажмите кнопку "Завершить".<br> <img alt="моментальный снимок мастера создания файлов JSF" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/result-jsf-page.png" title="Создание файла theend JSF в мастере создания файлов JSF"> |
| </li> |
| <li>Измените файл посредством ввода следующего кода между тегов <h:body>. |
| <pre class="examplecode"> |
| <h:body> |
| <strong><h:outputLabel value="Thanks! There are "/> |
| <h:outputText value="#{MessageView.numberOfMessages}"/> |
| <h:outputLabel value=" messages!"/></strong> |
| </h:body></pre> |
| </li> |
| </ol> |
| <p class="tips">Когда вы начинаете вводить данные, среда IDE автоматически добавляет определение библиотеки тегов <tt>xmlns:h="http://xmlns.jcp.org/jsf/html"</tt> в файл для элементов JSF.</p> |
| </div> |
| |
| <a name="Exercise_4"></a> |
| <h2>Запуск приложения</h2> |
| <p>Кодировка приложения завершена. Теперь можно протестировать приложение в браузере.</p> |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел проекта в окне "Проекты" и выберите "Выполнить". |
| <p>При выборе команды "Выполнить" в среде IDE происходит сборка и развертывание приложения, и в браузере открывается <tt>index.xhtml</tt>.</p></li> |
| <li>Введите сообщение в текстовое поле. Нажмите кнопку "Отправить сообщение". <br /> <img alt="Приложение в браузере" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/browser1.png" title="Приложение в браузере"> |
| |
| </li> |
| </ol> |
| |
| <p>При нажатии кнопки "Отправить сообщение" сообщение сохраняется в базе данных, и извлекается и отображается число сообщений </p> |
| <img alt="Приложение в браузере с отображением результатов" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/browser2.png" title="Приложение в браузере с отображением результатов"> <a name="Exercise_5"></a> |
| <h2>Загрузка проекта решения</h2> |
| <p>Простые проекты, используемые в этом руководстве, можно загрузить следующими способами.</p> |
| <ul> |
| <li>Загрузите <a href="https://netbeans.org/projects/samples/downloads/download/Samples/JavaEE/SimpleEE6App72.zip">архив завершенного проекта в формате zip</a>.</li> |
| <li>Выполните проверку исходных файлов проекта на выходе из примеров NetBeans, выполнив перечисленные ниже действия. |
| <ol> |
| <li>Выберите в главном меню "Группа > Subversion > Проверить".</li> |
| <li>В диалоговом окне "Проверка" введите следующий URL-адрес репозитория:<br /> <tt>https://svn.netbeans.org/svn/samples~samples-source-code</tt><br /> Нажмите кнопку "Далее".</li> |
| <li>Нажмите кнопку Browse ("Обзор") для открытия диалогового окна Browse Repository Folders ("Обзор папок репозитория").</li> |
| <li>Разверните корневой узел и выберите <strong>samples/javaee/SimpleEE6App</strong>. Нажмите кнопку "ОК".</li> |
| <li>Укажите локальную папку для исходных файлов (папка должна быть пустой).</li> |
| <li>Нажмите кнопку "Завершить". |
| <p>После нажатия кнопки "Готово" среда IDE инициализирует локальную папку в качестве репозитория Subversion и выполняет проверку исходных файлов проекта на выходе.</p> |
| </li> |
| <li>Щелкните команду "Открыть проект" в диалоговом окне, которое появится после завершения проверки.</li> |
| </ol> |
| |
| <p class="notes"><strong>Примечания.</strong></p> |
| <ul> |
| <li>Для получения исходных файлов на редактирование требуется клиент Subversion. For more about installing Subversion, see the section on <a href="../ide/subversion.html#settingUp">Setting up Subversion</a> in the <a href="../ide/subversion.html">Guide to Subversion in IDE NetBeans</a>.</li> |
| </ul> |
| </li> |
| </ul> |
| |
| |
| <br> |
| <div class="feedback-box" ><a href="/about/contact_form.html?to=3&subject=Feedback:%20Getting%20Started%20with%20Java%20EE%206%20Applications">Отправить отзыв по этому учебному курсу</a></div> |
| <br style="clear:both;" /> |
| <!-- ======================================================================================= --> |
| <h2><a name="nextsteps"></a>Дополнительные сведения</h2> |
| <p>For more information about using IDE NetBeans to develop Java EE applications, see the following resources: |
| </p> |
| <ul> |
| <li><a href="javaee-intro.html">Введение в технологию Java EE </a></li> |
| <li><a href="../web/jsf20-support.html">Поддержка JSF 2.x в IDE NetBeans</a></li> |
| <li><a href="../../trails/java-ee.html">Учебная карта по Java EE и Java Web</a></li> |
| </ul> |
| <p>Подробные сведения об использовании технологий Java EE для развертывания приложений см. в <a href="http://download.oracle.com/javaee/7/tutorial/doc/">Учебном курсе по Java EE 7</a>.</p> |
| <p>To send comments and suggestions, get support, and keep informed on the latest developments on the IDE NetBeans Java EE development features, <a href="../../../community/lists/top.html">join the nbj2ee mailing list</a>.</p> |
| </body> |
| </html> |