private final static int TEST = 1;
private final static int SHIFT = 2;
private int coderType = SHIFT; // default value
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
В примере providermethods
показано, как использовать метод-производитель для выбора между двумя бинами во время выполнения, как описано в Использование методов-производителей, полей-производителей и методов закрытия в приложениях CDI. Он очень похож на пример encoder
, описанный в Пример encoder: использование альтернатив. Пример включает в себя тот же интерфейс и две его реализации, Managed-бин, страницу Facelets и файлы конфигурации. Он также содержит тип квалификатора. Когда вы запускаете его, вам не нужно редактировать файл beans.xml
и повторно развёртывать приложение, чтобы изменить его поведение.
Здесь рассматриваются следующие темы:
Компоненты producermethods
очень похожи на компоненты encoder
с некоторыми существенными отличиями.
Ни одна реализация компонента Coder
не аннотирована @Alternative
и файла beans.xml
нет, поскольку он не нужен.
Страница Facelets и Managed-бин CoderBean
имеют дополнительное свойство coderType
, которое позволяет пользователю указать во время выполнения, какую реализацию использовать. Кроме того, Managed-бин имеет метод-производитель, который выбирает реализацию, используя квалификатор @Chosen
.
Бин объявляет две константы, определяющие, является ли тип кодировщика тестовой реализацией или реализацией, которая фактически сдвигает буквы:
private final static int TEST = 1;
private final static int SHIFT = 2;
private int coderType = SHIFT; // default value
Метод источника, аннотированный с помощью @Produces
и @Chosen
, а также @RequestScoped
(так что он длится только в течение одного запроса и ответа) возвращает одну из двух реализаций на основе coderType
, предоставленного пользователем.
@Produces
@Chosen
@RequestScoped
public Coder getCoder() {
switch (coderType) {
case TEST:
return new TestCoderImpl();
case SHIFT:
return new CoderImpl();
default:
return null;
}
}
Наконец, Managed-бин инъецирует выбранную реализацию, указав тот же квалификатор, который был возвращён методом источника для устранения неоднозначности:
@Inject
@Chosen
@RequestScoped
Coder coder;
Страница Facelets содержит изменённые инструкции и группу выбора одного из двух независимых переключателей, выбранное значение которой присваивается свойству coderBean.coderType
:
<h2>String Encoder</h2>
<p>Select Test or Shift, type a string and an integer, then click
Encode.</p>
<p>If you select Test, the TestCoderImpl bean will display the
argument values.</p>
<p>If you select Shift, the CoderImpl bean will return a string that
shifts the letters in the original string by the value you specify.
The value must be between 0 and 26.</p>
<h:form id="encodeit">
<h:selectOneRadio id="coderType"
required="true"
value="#{coderBean.coderType}">
<f:selectItem
itemValue="1"
itemLabel="Test"/>
<f:selectItem
itemValue="2"
itemLabel="Shift Letters"/>
</h:selectOneRadio>
...
Вы можете использовать IDE NetBeans или Maven для сборки, упаковки, развёртывания и запуска приложения providermethods
.
Здесь рассматриваются следующие темы:
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
В меню «Файл» выберите «Открыть проект».
В диалоговом окне «Открыть проект» перейдите к:
tut-install/examples/cdi
Выберите каталог providermethods
.
Нажмите Открыть проект.
На вкладке «Проекты» кликните правой кнопкой мыши проект providermethods
и выберите «Сборка».
Эта команда собирает и упаковывает приложение в WAR-файл, providermethods.war
, расположенный в каталоге target
, а затем развёртывает его на сервере GlassFish.
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
В окне терминала перейдите в:
tut-install/examples/cdi/producermethods/
Введите следующую команду для развёртывания приложения:
mvn install
Эта команда собирает и упаковывает приложение в WAR-файл, providermethods.war
, расположенный в каталоге target
, а затем развёртывает его на сервере GlassFish.
В веб-браузере введите следующий URL:
http://localhost:8080/producermethods
На странице String Encoder выберите опцию «Test» или «Shift Letters», введите строку и количество букв для смещения, а затем нажмите «Encode».
В зависимости от вашего выбора, строка результата отображает либо закодированную строку, либо указанные вами входные значения.
Назад | Вперёд | Содержание |