Читаем Изучаем Java EE 7 полностью

··public void saveAccount() {

····account = new Account();

····// Задает свойства учетной записи

··}

··public void createCustomer() {

····Customer customer = new Customer();

····customer.setLogin(login);

····customer.setAccount(account);

····customerService.createCustomer(customer);

····conversation.end();

··}

}

В листинге 2.21 компонент CustomerCreationWizard сопровождается аннотацией @ConversationScoped. Затем он внедряет CustomerService для создания Customer, но что более важно, он внедряет Conversation. Этот интерфейс позволяет программно управлять жизненным циклом области видимости диалога. Обратите внимание, что при вызове метода saveLogin начинается диалог (conversation.begin()). Теперь он начинается и используется в течение всего времени работы мастера. Как только вызывается последний шаг мастера, вызывается метод createCustomer и диалог заканчивается (conversation.end()). Таблица 2.3 предлагает вам краткое обозрение API Conversation.

Таблица 2.3. API Conversation
МетодОписание
void begin()Помечает текущий кратковременный диалог как длительный
void begin(String id)Помечает текущий кратковременный диалог как длительный, со специальным идентификатором
void end()Помечает текущий длительный диалог как кратковременный
String getId()Получает идентификатор текущего длительного диалога
long getTimeout()Получает время задержки текущего диалога
void setTimeout(long millis)Задает время задержки текущего диалога
boolean isTransient()Определяет, помечен ли диалог как кратковременный или длительный
<p>Компоненты в языке выражений</p>

Одна из ключевых возможностей CDI состоит в том, что он связывает уровень транзакций и веб-уровень. Но, как вы уже могли видеть, одна из первоочередных характеристик CDI заключается в том, что внедрение зависимостей (DI) полностью типобезопасно и не зависит от символьных имен. В Java-коде это не вызывает проблем, поскольку компоненты не будут разрешимы без символьных имен за пределами Java. В частности, это касается EL-выражений на страницах JSF.

По умолчанию компонентам CDI не присваивается имя и они неразрешимы с помощью EL-связывания. Чтобы можно было присвоить компоненту имя, он должен быть аннотирован встроенным квалификатором @javax.inject.Named, как показано в листинге 2.22.

Листинг 2.22. Компонент BookService с символьным именем

@Named

public class BookService {

··private String title, description;

··private Float price;

··private Book book;

··@Inject @ThirteenDigits

··private NumberGenerator numberGenerator;

··public String createBook() {

····book = new Book(title, price, description);

····book.setIsbn(numberGenerator.generateNumber());

····return "customer.xhtml";

··}

}

Квалификатор @Named позволяет получить доступ к компоненту BookService через его имя (им по умолчанию является имя класса в «верблюжьем регистре» (CamelCase) с первой строчной буквой). Следующий отрывок кода показывает кнопку JSF, вызывающую метод createBook:

Вы также можете переопределить имя компонента, добавив другое имя к квалификатору.

@Named("myService")

public class BookService {…}

Затем вы можете использовать это новое имя на странице JSF.

<p>Перехватчики</p>

Перехватчики позволяют добавлять к вашим компонентам сквозную функциональность. Как показано на рис. 2.2, когда клиент вызывает метод на управляемом компоненте (а значит, и на компоненте CDI, EJB либо веб-службе RESTful и т. д.), контейнер может перехватить вызов и обработать бизнес-логику перед тем, как будет вызван метод компонента. Перехватчики делятся на четыре типа:

• перехватчики, действующие на уровне конструктора, — перехватчик, ассоциированный с конструктором целевого класса (@AroundConstruct);

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных