blob: b862b1bb2bee82dafab804435066908dd4e84ae8 [file] [log] [blame]
<!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>Выберите &quot;Веб-приложение&quot; из категории &quot;Java Web&quot; и нажмите кнопку &quot;Далее&quot;.</li>
<li>Введите <strong>SimpleEE6App</strong> в качестве имени проекта и укажите местоположение проекта. </li>
<li>Снимите флажок &quot;Использовать отдельную папку&quot;, если он установлен. Нажмите кнопку &quot;Далее&quot;.<br /> (В рамках этого руководства копирование библиотек проекта в отдельную папку нецелесообразно, поскольку совместное использование библиотек с другими пользователями или проектами не требуется.)<br />
</li>
<li>Выберите сервер GlassFish и укажите Java EE 6 или Java EE 7 в качестве версии Java EE. Нажмите кнопку &quot;Далее&quot;.<br /> <img alt="Мастер создания проектов" class="margin-around b-all" src="../../../images_www/articles/74/javaee/gettingstarted/newappwizard.png" title="Панель &apos;Сервер и настройки&apos; в мастере создания проектов">
</li>
<li>Выберите в панели &quot;Платформы&quot; JavaServer Faces. Нажмите кнопку &quot;Завершить&quot;.
<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="Панель &apos;Платформы&apos; мастера создания проектов"></li>
</ol>
<p>При нажатии кнопки &quot;Завершить&quot; проект будет создан в среде IDE, который откроется в окне &quot;Проекты&quot;. В среде IDE автоматически создается и открывается в редакторе страница <tt>index.xhtml</tt>.</p>
<a name="Exercise_2"></a>
<h2>Создание класса сущностей и фасада сеанса</h2>
<p>В этом разделе будет создан класс сущностей и фасад сеанса для класса сущностей. Класс сущностей &ndash; это простой старый объект 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>Щелкните узел проекта правой кнопкой мыши и выберите команду &quot;Создать&quot; &gt; &quot;Другие&quot;.</li>
<li>Выберите &quot;Класс сущностей&quot; в категории &quot;Сохранение состояния&quot;. Нажмите кнопку &quot;Далее&quot;.</li>
<li>В поле &quot;Имя класса&quot; введите <strong>Message</strong>.</li>
<li>В поле &quot;Пакет&quot; введите <strong>entities</strong>.</li>
<li>Выберите команду &quot;Создать блок сохранения состояния&quot;. Нажмите кнопку &quot;Далее&quot;.</li>
<li>Выберите источник данных (например, выберите <tt>jdbc/sample</tt>, если необходимо использовать JavaDB).
<p>Источник данных для <tt>jdbc/sample</tt> находится в составе пакета среды IDE при установке среды IDE и сервера приложений GlassFish. Однако можно указать другой источник данных, если это необходимо.</p>
<p>Можно сохранить другие параметры по умолчанию (имя блока сохранения состояния, поставщик сохранения состояния EclipseLink). Убедитесь в том, что для блока сохранения состояния используется интерфейс API транзакций Java и что для стратегии создания таблиц установлено значение &quot;Создать&quot;, т. е. таблицы на основе классов сущностей создаются при развертывании приложения.
</p></li>
<li>В мастере создания блока сохранения состояния нажмите кнопку &quot;Завершить&quot;.
<p>При нажатии кнопки &quot;Завершить&quot; в среде 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>Щелкните правой кнопкой мыши в редакторе и выберите команду &quot;Вставить код&quot; (Alt-Insert; Ctrl-I для Mac), а затем &quot;Получение и установка&quot;.</li>
<li>В диалоговом окне &quot;Создание методов получения и установки&quot; выберите поле <tt>message</tt> и нажмите кнопку &quot;Создать&quot;.
<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=&quot;JTA&quot;</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>Щелкните узел проекта правой кнопкой мыши и выберите команду &quot;Создать&quot; &gt; &quot;Другие&quot;.</li>
<li>Выберите &quot;Сеансные компоненты для сущностных классов&quot; из категории Enterprise JavaBeans. Нажмите кнопку &quot;Далее&quot;.</li>
<li>Выберите сущность <tt>Message</tt> и нажмите кнопку &quot;Добавить&quot;. Нажмите кнопку &quot;Далее&quot;.</li>
<li>В поле &quot;Пакет&quot; введите <strong>boundary</strong>. Нажмите кнопку &quot;Завершить&quot;.
<p>Обратите внимание на то, что создавать бизнес-интерфейс для сеансного компонента не требуется. Вместо этого в данном приложении компонент будет отображаться для локально управляемого компонента в представлении без интерфейса.</p>
<img alt="Компоненты Bean сеанса для мастера классов сущностей" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/sessionwizard.png" title="Компоненты Bean сеанса для мастера классов сущностей"></li>
</ol>
<p>Когда вы нажмете &quot;Готово&quot;, среда 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&lt;Message&gt; {
@PersistenceContext(unitName = "SimpleEE6AppPU")
private EntityManager em;
</pre>
<p>При создании фасада для сущности с помощью мастера в среде IDE по умолчанию добавляется аннотация <tt>PersistenceContext</tt> (<tt>@PersistenceContext(unitName = &quot;SimpleEE6AppPU&quot;)</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>Щелкните узел проекта правой кнопкой мыши и выберите команду &quot;Создать&quot; &gt; &quot;Другие&quot;.</li>
<li>Выберите &quot;Управляемый компонент JSF&quot; из категории &quot;JavaServer Faces&quot;. Нажмите кнопку &quot;Далее&quot;.</li>
<li>В поле &quot;Имя класса&quot; введите <strong>MessageView</strong>.
<p>Имя управляемого компонента <tt>MessageView</tt> используется в качестве значения для <tt>inputText</tt> и <tt>commandButton</tt> на странице JSF <tt>index.xhtml</tt> при вызове методов в компоненте.</p>
</li>
<li>В поле &quot;Пакет&quot; введите <strong>my.presentation</strong>.</li>
<li>В поле &quot;Имя&quot;, используемое для управляемого компонента, введите <strong>MessageView</strong>.
<p class="notes"><strong>Примечание.</strong> При создании управляемого компонента с помощью мастера, IDE по умолчанию назначает имя компоненту на основе имени класса компонента, при этом имя будет начинаться с маленькой буквы. В данном руководстве и для демонстрационных целей вы назначаете базовому элементу имя, начинающееся с заглавной буквы. При ссылке на компонент на страницах JSF вы будете использовать<tt>MessageView</tt>вместо <tt>messageView</tt>. Если вы не назначали имени, то на странице JSF будет использоваться по умолчанию<tt>messageView</tt>.</p></li>
<li>Установите контекст для запроса. Нажмите кнопку &quot;Завершить&quot;.</li>
</ol>
<img alt="Мастер создания новых управляемых компонентов JSF" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/newjsfbean.png" title="Мастер создания новых управляемых компонентов JSF">
<p>При нажатии кнопки &quot;Готово&quot; в среде IDE создается класс компонента, который затем открывается в редакторе. В окне 'Проекты' отобразятся следующие файлы.</p>
<img alt="В окне &apos;Проекты&apos; отображается структура файла" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/projectswindow.png" title="В окне &apos;Проекты&apos; отображается структура файла">
<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>Щелкните правой кнопкой мыши в редакторе и выберите команду &quot;Вставить код&quot; (Alt-Insert; Ctrl-I для Mac), затем во всплывающем окне выберите &quot;Вызов компонента EJB&quot;.</li>
<li>В диалоговом окне &quot;Вызов компонента EJB&quot; выберите MessageFacade. Нажмите кнопку &quot;ОК&quot;.<br /> <img alt="Диалоговое окно &apos;Вызвать компонент корпоративного уровня&apos;" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/callbean.png" title="Диалоговое окно &apos;Вызвать компонент корпоративного уровня&apos;">
<p>При нажатии кнопки &quot;ОК&quot; в среде 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> возвращает строку &quot;theend&quot;. Спецификация 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>&lt;h:body&gt;</tt>.
<pre class="examplecode">
&lt;h:body&gt;
<strong>&lt;f:view&gt;
&lt;h:form&gt;
&lt;h:outputLabel value="Message:"/&gt;&lt;h:inputText value="#{MessageView.message.message}"/&gt;
&lt;h:commandButton action="#{MessageView.postMessage}" value="Post Message"/&gt;
&lt;/h:form&gt;
&lt;/f:view&gt;</strong>
&lt;/h:body&gt;</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>&lt;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> возвращает &quot;theend&quot;, а обработчик переходов выполняет поиск страницы с именем <tt>theend.xhtml</tt>.</p>
<a name="Exercise_3c"></a>
<h3>Создание страницы результатов</h3>
<p>В этом упражнении будет создана страница JSF <tt>theend.xhtml</tt>. Эта страница будет отображаться при нажатии пользователем кнопки &quot;Отправить сообщение&quot; в <tt>index.xhtml</tt> и при вызове метода <tt>postMessage</tt> в управляемом компоненте JSF.</p>
<ol>
<li>Щелкните узел проекта правой кнопкой мыши и выберите команду &quot;Создать&quot; &gt; &quot;Другие&quot;.</li>
<li>В категории &quot;JavaServer Faces&quot; выберите &quot;Страница JSF&quot;. Нажмите кнопку &quot;Далее&quot;.</li>
<li>В поле &quot;Имя файла&quot; введите <strong>theend</strong>.</li>
<li>Убедитесь в том, что флажок &quot;Facelets&quot; установлен. Нажмите кнопку &quot;Завершить&quot;.<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>Измените файл посредством ввода следующего кода между тегов &lt;h:body&gt;.
<pre class="examplecode">
&lt;h:body&gt;
<strong>&lt;h:outputLabel value="Thanks! There are "/&gt;
&lt;h:outputText value="#{MessageView.numberOfMessages}"/&gt;
&lt;h:outputLabel value=" messages!"/&gt;</strong>
&lt;/h:body&gt;</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>Щелкните правой кнопкой мыши узел проекта в окне &quot;Проекты&quot; и выберите &quot;Выполнить&quot;.
<p>При выборе команды &quot;Выполнить&quot; в среде IDE происходит сборка и развертывание приложения, и в браузере открывается <tt>index.xhtml</tt>.</p></li>
<li>Введите сообщение в текстовое поле. Нажмите кнопку &quot;Отправить сообщение&quot;. <br /> <img alt="Приложение в браузере" class="margin-around b-all" src="../../../images_www/articles/72/javaee/gettingstarted/browser1.png" title="Приложение в браузере">
</li>
</ol>
<p>При нажатии кнопки &quot;Отправить сообщение&quot; сообщение сохраняется в базе данных, и извлекается и отображается число сообщений </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>Выберите в главном меню &quot;Группа &gt; Subversion &gt; Проверить&quot;.</li>
<li>В диалоговом окне &quot;Проверка&quot; введите следующий URL-адрес репозитория:<br /> <tt>https://svn.netbeans.org/svn/samples~samples-source-code</tt><br /> Нажмите кнопку &quot;Далее&quot;.</li>
<li>Нажмите кнопку Browse (&quot;Обзор&quot;) для открытия диалогового окна Browse Repository Folders (&quot;Обзор папок репозитория&quot;).</li>
<li>Разверните корневой узел и выберите <strong>samples/javaee/SimpleEE6App</strong>. Нажмите кнопку &quot;ОК&quot;.</li>
<li>Укажите локальную папку для исходных файлов (папка должна быть пустой).</li>
<li>Нажмите кнопку &quot;Завершить&quot;.
<p>После нажатия кнопки &quot;Готово&quot; среда IDE инициализирует локальную папку в качестве репозитория Subversion и выполняет проверку исходных файлов проекта на выходе.</p>
</li>
<li>Щелкните команду &quot;Открыть проект&quot; в диалоговом окне, которое появится после завершения проверки.</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&amp;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>